aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJP Rosevear <jpr@src.gnome.org>2003-11-19 00:33:30 +0800
committerJP Rosevear <jpr@src.gnome.org>2003-11-19 00:33:30 +0800
commit58f1b46675ef29528f51e5c44fe0e087bda5d82d (patch)
tree725648cf84182762d9dc2ac5846b233203411d59
parentb47685534d7e5738d712962334537bb329831b9e (diff)
downloadgsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar.gz
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar.bz2
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar.lz
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar.xz
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.tar.zst
gsoc2013-evolution-58f1b46675ef29528f51e5c44fe0e087bda5d82d.zip
Remove libical from this tree, it resides in e-d-s now.
svn path=/trunk/; revision=23417
-rw-r--r--libical/AUTHORS4
-rw-r--r--libical/COPYING0
-rw-r--r--libical/INSTALL24
-rw-r--r--libical/Makefile.am9
-rw-r--r--libical/NEWS522
-rw-r--r--libical/README102
-rw-r--r--libical/TEST4
-rw-r--r--libical/THANKS69
-rw-r--r--libical/TODO39
-rwxr-xr-xlibical/autogen.sh61
-rw-r--r--libical/configure.in307
-rw-r--r--libical/design-data/.cvsignore6
-rw-r--r--libical/design-data/Makefile.am6
-rw-r--r--libical/design-data/components.txt22
-rw-r--r--libical/design-data/param-c-types.txt23
-rw-r--r--libical/design-data/parameters.csv33
-rw-r--r--libical/design-data/params-in-prop.txt57
-rw-r--r--libical/design-data/prop-to-value.txt57
-rw-r--r--libical/design-data/properties.csv108
-rw-r--r--libical/design-data/property-tokens.txt65
-rw-r--r--libical/design-data/restrictions.csv1420
-rw-r--r--libical/design-data/status.txt56
-rw-r--r--libical/design-data/value-c-types.txt23
-rw-r--r--libical/design-data/value-mem-semantics.txt19
-rw-r--r--libical/design-data/value-types.csv35
-rw-r--r--libical/doc/.cvsignore6
-rw-r--r--libical/doc/AddingOrModifyingComponents.txt23
-rw-r--r--libical/doc/Makefile.am1
-rw-r--r--libical/doc/UsingLibical.lyx2584
-rw-r--r--libical/doc/UsingLibical.ps2327
-rw-r--r--libical/doc/UsingLibical.txt1384
-rw-r--r--libical/examples/.cvsignore7
-rw-r--r--libical/examples/Makefile.am20
-rw-r--r--libical/examples/access-usecases.txt60
-rw-r--r--libical/examples/access_components.c318
-rw-r--r--libical/examples/access_properties_and_parameters.c144
-rw-r--r--libical/examples/access_store.c210
-rw-r--r--libical/examples/changenames.pl4
-rw-r--r--libical/examples/errors.c70
-rw-r--r--libical/examples/main.c12
-rw-r--r--libical/examples/parse_text.c68
-rw-r--r--libical/examples/usecases.c89
-rw-r--r--libical/scripts/.cvsignore6
-rw-r--r--libical/scripts/Makefile.am9
-rwxr-xr-xlibical/scripts/mkderivedcomponents.pl170
-rwxr-xr-xlibical/scripts/mkderivedparameters.pl332
-rwxr-xr-xlibical/scripts/mkderivedproperties.pl258
-rwxr-xr-xlibical/scripts/mkderivedvalues.pl232
-rw-r--r--libical/scripts/mkinclude.sh39
-rwxr-xr-xlibical/scripts/mkneticali.pl99
-rwxr-xr-xlibical/scripts/mkparameterrestrictions.pl85
-rwxr-xr-xlibical/scripts/mkrestrictionrecords.pl109
-rwxr-xr-xlibical/scripts/mkrestrictiontable.pl98
-rw-r--r--libical/scripts/readvaluesfile.pl133
-rw-r--r--libical/src/.cvsignore6
-rw-r--r--libical/src/Makefile.am19
-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.c3054
-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
-rw-r--r--libical/src/java/.cvsignore2
-rw-r--r--libical/src/java/ICalDurationType.java114
-rw-r--r--libical/src/java/ICalParameter.java259
-rw-r--r--libical/src/java/ICalPeriodType.java71
-rw-r--r--libical/src/java/ICalProperty.java507
-rw-r--r--libical/src/java/ICalRecurrenceType.java284
-rw-r--r--libical/src/java/ICalTimeType.java145
-rw-r--r--libical/src/java/ICalTriggerType.java93
-rw-r--r--libical/src/java/ICalValue.java209
-rw-r--r--libical/src/java/Makefile.am51
-rw-r--r--libical/src/java/VAgenda.java24
-rw-r--r--libical/src/java/VAlarm.java24
-rw-r--r--libical/src/java/VCalendar.java24
-rw-r--r--libical/src/java/VComponent.java199
-rw-r--r--libical/src/java/VEvent.java24
-rw-r--r--libical/src/java/VFreeBusy.java18
-rw-r--r--libical/src/java/VQuery.java24
-rw-r--r--libical/src/java/VToDo.java24
-rw-r--r--libical/src/java/jlibical_consts_cxx.h42
-rw-r--r--libical/src/java/jlibical_utils_cxx.cpp458
-rw-r--r--libical/src/java/jlibical_utils_cxx.h59
-rw-r--r--libical/src/java/jniICalDurationType_cxx.cpp130
-rw-r--r--libical/src/java/jniICalDurationType_cxx.h47
-rw-r--r--libical/src/java/jniICalPeriodType_cxx.cpp144
-rw-r--r--libical/src/java/jniICalPeriodType_cxx.h42
-rw-r--r--libical/src/java/jniICalRecurrenceType_cxx.cpp347
-rw-r--r--libical/src/java/jniICalRecurrenceType_cxx.h60
-rw-r--r--libical/src/java/jniICalTimeType_cxx.cpp176
-rw-r--r--libical/src/java/jniICalTimeType_cxx.h52
-rw-r--r--libical/src/java/jniICalTriggerType_cxx.cpp111
-rw-r--r--libical/src/java/jniICalTriggerType_cxx.h39
-rw-r--r--libical/src/java/net_cp_jlibical_ICalParameter_cxx.cpp310
-rw-r--r--libical/src/java/net_cp_jlibical_ICalParameter_cxx.h143
-rw-r--r--libical/src/java/net_cp_jlibical_ICalProperty_cxx.cpp1690
-rw-r--r--libical/src/java/net_cp_jlibical_ICalProperty_cxx.h654
-rw-r--r--libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp436
-rw-r--r--libical/src/java/net_cp_jlibical_ICalValue_cxx.h182
-rw-r--r--libical/src/java/net_cp_jlibical_VComponent_cxx.cpp956
-rw-r--r--libical/src/java/net_cp_jlibical_VComponent_cxx.h358
-rw-r--r--libical/src/java/testjni.java377
-rw-r--r--libical/src/libical/.cvsignore28
-rw-r--r--libical/src/libical/Makefile.am287
-rw-r--r--libical/src/libical/astime.h65
-rw-r--r--libical/src/libical/caldate.c176
-rw-r--r--libical/src/libical/ical.h31
-rw-r--r--libical/src/libical/icalarray.c163
-rw-r--r--libical/src/libical/icalarray.h63
-rw-r--r--libical/src/libical/icalattach.c139
-rw-r--r--libical/src/libical/icalattach.h60
-rw-r--r--libical/src/libical/icalattachimpl.h59
-rw-r--r--libical/src/libical/icalattendee.c30
-rw-r--r--libical/src/libical/icalattendee.h68
-rw-r--r--libical/src/libical/icalcomponent.c2611
-rw-r--r--libical/src/libical/icalcomponent.h282
-rw-r--r--libical/src/libical/icalderivedparameter.c.in205
-rw-r--r--libical/src/libical/icalderivedparameter.h.in38
-rw-r--r--libical/src/libical/icalderivedproperty.c.in285
-rw-r--r--libical/src/libical/icalderivedproperty.h.in22
-rw-r--r--libical/src/libical/icalderivedvalue.c.in337
-rw-r--r--libical/src/libical/icalderivedvalue.h.in65
-rw-r--r--libical/src/libical/icalduration.c332
-rw-r--r--libical/src/libical/icalduration.h62
-rw-r--r--libical/src/libical/icalenums.c166
-rw-r--r--libical/src/libical/icalenums.h166
-rw-r--r--libical/src/libical/icalerror.c251
-rw-r--r--libical/src/libical/icalerror.h160
-rw-r--r--libical/src/libical/icallangbind.c312
-rw-r--r--libical/src/libical/icallangbind.h54
-rw-r--r--libical/src/libical/icallexer.l161
-rw-r--r--libical/src/libical/icalmemory.c367
-rw-r--r--libical/src/libical/icalmemory.h84
-rw-r--r--libical/src/libical/icalmime.c394
-rw-r--r--libical/src/libical/icalmime.h43
-rw-r--r--libical/src/libical/icalparameter.c383
-rw-r--r--libical/src/libical/icalparameter.h69
-rw-r--r--libical/src/libical/icalparameter_cxx.cpp289
-rw-r--r--libical/src/libical/icalparameter_cxx.h159
-rw-r--r--libical/src/libical/icalparameterimpl.h52
-rw-r--r--libical/src/libical/icalparser.c1112
-rw-r--r--libical/src/libical/icalparser.h96
-rw-r--r--libical/src/libical/icalperiod.c170
-rw-r--r--libical/src/libical/icalperiod.h55
-rw-r--r--libical/src/libical/icalproperty.c989
-rw-r--r--libical/src/libical/icalproperty.h134
-rw-r--r--libical/src/libical/icalproperty_cxx.cpp702
-rw-r--r--libical/src/libical/icalproperty_cxx.h365
-rw-r--r--libical/src/libical/icalrecur.c2458
-rw-r--r--libical/src/libical/icalrecur.h215
-rw-r--r--libical/src/libical/icalrestriction.c.in465
-rw-r--r--libical/src/libical/icalrestriction.h63
-rw-r--r--libical/src/libical/icaltime.c1050
-rw-r--r--libical/src/libical/icaltime.h277
-rw-r--r--libical/src/libical/icaltimezone.c1709
-rw-r--r--libical/src/libical/icaltimezone.h169
-rw-r--r--libical/src/libical/icaltypes.c191
-rw-r--r--libical/src/libical/icaltypes.h107
-rw-r--r--libical/src/libical/icalvalue.c1322
-rw-r--r--libical/src/libical/icalvalue.h88
-rw-r--r--libical/src/libical/icalvalue_cxx.cpp262
-rw-r--r--libical/src/libical/icalvalue_cxx.h151
-rw-r--r--libical/src/libical/icalvalueimpl.h95
-rw-r--r--libical/src/libical/icalversion.h.in7
-rw-r--r--libical/src/libical/icalyacc.y417
-rw-r--r--libical/src/libical/icptrholder.h93
-rw-r--r--libical/src/libical/pvl.c584
-rw-r--r--libical/src/libical/pvl.h97
-rw-r--r--libical/src/libical/sspm.c1619
-rw-r--r--libical/src/libical/sspm.h143
-rw-r--r--libical/src/libical/vcomponent.cpp817
-rw-r--r--libical/src/libical/vcomponent.h340
-rw-r--r--libical/src/libical/vsnprintf.c172
-rw-r--r--libical/src/libicalcap/.cvsignore2
-rw-r--r--libical/src/libicalcap/Makefile.am73
-rw-r--r--libical/src/libicalcap/client.c187
-rw-r--r--libical/src/libicalcap/icalcap.c44
-rw-r--r--libical/src/libicalcap/icalcap.h47
-rw-r--r--libical/src/libicalcap/icalcap_impl.h34
-rw-r--r--libical/src/libicalcap/icalcap_message.c225
-rw-r--r--libical/src/libicalcap/icalcap_message_impl.h33
-rw-r--r--libical/src/libicalcap/icalcap_rr.c545
-rw-r--r--libical/src/libicalcap/icalcap_server.c52
-rw-r--r--libical/src/libicalcap/icalcap_server.h19
-rw-r--r--libical/src/libicalcap/icalcap_server_impl.h31
-rw-r--r--libical/src/libicalcap/icalcap_session.c62
-rw-r--r--libical/src/libicalcap/icalcap_session.h15
-rw-r--r--libical/src/libicalcap/icalcap_session_impl.h36
-rw-r--r--libical/src/libicalcap/icalcap_utils.c134
-rw-r--r--libical/src/libicalss/.cvsignore7
-rw-r--r--libical/src/libicalss/Makefile.am123
-rw-r--r--libical/src/libicalss/icalbdbset.c1598
-rw-r--r--libical/src/libicalss/icalbdbset.h147
-rw-r--r--libical/src/libicalss/icalbdbset_cxx.h61
-rw-r--r--libical/src/libicalss/icalbdbsetimpl.h41
-rw-r--r--libical/src/libicalss/icalcalendar.c263
-rw-r--r--libical/src/libicalss/icalcalendar.h67
-rw-r--r--libical/src/libicalss/icalcaputil.h58
-rw-r--r--libical/src/libicalss/icalclassify.c754
-rw-r--r--libical/src/libicalss/icalclassify.h45
-rw-r--r--libical/src/libicalss/icalcluster.c245
-rw-r--r--libical/src/libicalss/icalcluster.h61
-rw-r--r--libical/src/libicalss/icalclusterimpl.h45
-rw-r--r--libical/src/libicalss/icalcomponent.h115
-rw-r--r--libical/src/libicalss/icalcsdb.h67
-rw-r--r--libical/src/libicalss/icalcstp.c116
-rw-r--r--libical/src/libicalss/icalcstp.h79
-rw-r--r--libical/src/libicalss/icalcstpclient.c343
-rw-r--r--libical/src/libicalss/icalcstpclient.h100
-rw-r--r--libical/src/libicalss/icalcstpserver.c278
-rw-r--r--libical/src/libicalss/icalcstpserver.h101
-rw-r--r--libical/src/libicalss/icaldirset.c805
-rw-r--r--libical/src/libicalss/icaldirset.h98
-rw-r--r--libical/src/libicalss/icaldirsetimpl.h48
-rw-r--r--libical/src/libicalss/icalfileset.c921
-rw-r--r--libical/src/libicalss/icalfileset.h131
-rw-r--r--libical/src/libicalss/icalfilesetimpl.h53
-rw-r--r--libical/src/libicalss/icalgauge.c525
-rw-r--r--libical/src/libicalss/icalgauge.h63
-rw-r--r--libical/src/libicalss/icalgaugeimpl.h63
-rw-r--r--libical/src/libicalss/icalmessage.c378
-rw-r--r--libical/src/libicalss/icalmessage.h71
-rw-r--r--libical/src/libicalss/icalset.c493
-rw-r--r--libical/src/libicalss/icalset.h184
-rw-r--r--libical/src/libicalss/icalspanlist.c567
-rw-r--r--libical/src/libicalss/icalspanlist.h77
-rw-r--r--libical/src/libicalss/icalspanlist_cxx.cpp92
-rw-r--r--libical/src/libicalss/icalspanlist_cxx.h53
-rw-r--r--libical/src/libicalss/icalss.h17
-rw-r--r--libical/src/libicalss/icalsslexer.l134
-rw-r--r--libical/src/libicalss/icalssutil.c29
-rw-r--r--libical/src/libicalss/icalssutil.h27
-rw-r--r--libical/src/libicalss/icalssyacc.h34
-rw-r--r--libical/src/libicalss/icalssyacc.y249
-rw-r--r--libical/src/libicalvcal/.cvsignore6
-rw-r--r--libical/src/libicalvcal/Makefile.am39
-rw-r--r--libical/src/libicalvcal/README.TXT951
-rw-r--r--libical/src/libicalvcal/icalvcal.c1646
-rw-r--r--libical/src/libicalvcal/icalvcal.h54
-rw-r--r--libical/src/libicalvcal/port.h88
-rw-r--r--libical/src/libicalvcal/vcaltest.c118
-rw-r--r--libical/src/libicalvcal/vcaltmp.c337
-rw-r--r--libical/src/libicalvcal/vcaltmp.h128
-rw-r--r--libical/src/libicalvcal/vcc.h80
-rw-r--r--libical/src/libicalvcal/vcc.y1200
-rw-r--r--libical/src/libicalvcal/vctest.c95
-rw-r--r--libical/src/libicalvcal/vobject.c1455
-rw-r--r--libical/src/libicalvcal/vobject.h366
-rw-r--r--libical/src/python/.cvsignore10
-rw-r--r--libical/src/python/Attendee.py114
-rw-r--r--libical/src/python/ChangeLog129
-rw-r--r--libical/src/python/Collection.py124
-rw-r--r--libical/src/python/Component.py799
-rw-r--r--libical/src/python/DerivedProperties.py159
-rw-r--r--libical/src/python/Duration.py92
-rw-r--r--libical/src/python/Error.py10
-rw-r--r--libical/src/python/Gauge.py88
-rw-r--r--libical/src/python/Libical.py36
-rw-r--r--libical/src/python/LibicalWrap.i453
-rw-r--r--libical/src/python/Makefile.am48
-rw-r--r--libical/src/python/Period.py216
-rw-r--r--libical/src/python/Property.py268
-rw-r--r--libical/src/python/Store.py181
-rw-r--r--libical/src/python/Time.py215
-rw-r--r--libical/src/python/littlefile.txt3
-rw-r--r--libical/src/python/python-binding.txt434
-rw-r--r--libical/src/python/test.py603
-rw-r--r--libical/src/test/.cvsignore16
-rw-r--r--libical/src/test/2445.ics326
-rw-r--r--libical/src/test/2446.ics0
-rw-r--r--libical/src/test/Makefile.am48
-rw-r--r--libical/src/test/copycluster.c133
-rw-r--r--libical/src/test/findobj.c71
-rw-r--r--libical/src/test/icaltestparser.c122
-rw-r--r--libical/src/test/itip.ics14
-rw-r--r--libical/src/test/outgoing.ics544
-rw-r--r--libical/src/test/process.c407
-rw-r--r--libical/src/test/recur.c161
-rw-r--r--libical/src/test/regression-classify.c187
-rw-r--r--libical/src/test/regression-component.c580
-rw-r--r--libical/src/test/regression-cxx.cpp137
-rw-r--r--libical/src/test/regression-recur.c194
-rw-r--r--libical/src/test/regression-storage.c804
-rw-r--r--libical/src/test/regression-utils.c169
-rw-r--r--libical/src/test/regression.c3667
-rw-r--r--libical/src/test/regression.h53
-rw-r--r--libical/src/test/storage.c873
-rw-r--r--libical/src/test/stow.c888
-rw-r--r--libical/src/test/test_fileset.ics60
-rw-r--r--libical/src/test/testclassify.c128
-rw-r--r--libical/src/test/testmime.c339
-rw-r--r--libical/src/test/testvcal.c64
-rw-r--r--libical/test-data/.cvsignore6
-rw-r--r--libical/test-data/07
-rw-r--r--libical/test-data/138
-rw-r--r--libical/test-data/1.113
-rw-r--r--libical/test-data/222
-rw-r--r--libical/test-data/2445.ics331
-rw-r--r--libical/test-data/2446.ics1006
-rw-r--r--libical/test-data/321
-rw-r--r--libical/test-data/423
-rw-r--r--libical/test-data/516
-rw-r--r--libical/test-data/612
-rw-r--r--libical/test-data/714
-rw-r--r--libical/test-data/Makefile.am27
-rw-r--r--libical/test-data/calendar.ics63
-rw-r--r--libical/test-data/classify.ics43
-rw-r--r--libical/test-data/complex-mime-error.txt59
-rw-r--r--libical/test-data/complex-mime.txt81
-rw-r--r--libical/test-data/incoming.ics294
-rw-r--r--libical/test-data/large.ics40533
-rw-r--r--libical/test-data/overlaps.ics32
-rw-r--r--libical/test-data/process-calendar.ics108
-rw-r--r--libical/test-data/process-incoming.ics107
-rw-r--r--libical/test-data/recur-errors.txt44
-rw-r--r--libical/test-data/recur.txt644
-rw-r--r--libical/test-data/restriction.ics49
-rw-r--r--libical/test-data/simple-mime.txt27
-rw-r--r--libical/test-data/smallcluster.ics13
-rw-r--r--libical/test-data/spanlist.ics35
-rw-r--r--libical/test-data/stresstest.ics178
-rw-r--r--libical/test-data/user-cal.vcf76
-rw-r--r--libical/zoneinfo/.cvsignore2
-rw-r--r--libical/zoneinfo/Africa/Abidjan.ics14
-rw-r--r--libical/zoneinfo/Africa/Accra.ics14
-rw-r--r--libical/zoneinfo/Africa/Addis_Ababa.ics14
-rw-r--r--libical/zoneinfo/Africa/Algiers.ics14
-rw-r--r--libical/zoneinfo/Africa/Asmera.ics14
-rw-r--r--libical/zoneinfo/Africa/Bamako.ics14
-rw-r--r--libical/zoneinfo/Africa/Bangui.ics14
-rw-r--r--libical/zoneinfo/Africa/Banjul.ics14
-rw-r--r--libical/zoneinfo/Africa/Bissau.ics14
-rw-r--r--libical/zoneinfo/Africa/Blantyre.ics14
-rw-r--r--libical/zoneinfo/Africa/Brazzaville.ics14
-rw-r--r--libical/zoneinfo/Africa/Bujumbura.ics14
-rw-r--r--libical/zoneinfo/Africa/Cairo.ics22
-rw-r--r--libical/zoneinfo/Africa/Casablanca.ics14
-rw-r--r--libical/zoneinfo/Africa/Ceuta.ics22
-rw-r--r--libical/zoneinfo/Africa/Conakry.ics14
-rw-r--r--libical/zoneinfo/Africa/Dakar.ics14
-rw-r--r--libical/zoneinfo/Africa/Dar_es_Salaam.ics14
-rw-r--r--libical/zoneinfo/Africa/Djibouti.ics14
-rw-r--r--libical/zoneinfo/Africa/Douala.ics14
-rw-r--r--libical/zoneinfo/Africa/El_Aaiun.ics14
-rw-r--r--libical/zoneinfo/Africa/Freetown.ics14
-rw-r--r--libical/zoneinfo/Africa/Gaborone.ics14
-rw-r--r--libical/zoneinfo/Africa/Harare.ics14
-rw-r--r--libical/zoneinfo/Africa/Johannesburg.ics14
-rw-r--r--libical/zoneinfo/Africa/Kampala.ics14
-rw-r--r--libical/zoneinfo/Africa/Khartoum.ics14
-rw-r--r--libical/zoneinfo/Africa/Kigali.ics14
-rw-r--r--libical/zoneinfo/Africa/Kinshasa.ics14
-rw-r--r--libical/zoneinfo/Africa/Lagos.ics14
-rw-r--r--libical/zoneinfo/Africa/Libreville.ics14
-rw-r--r--libical/zoneinfo/Africa/Lome.ics14
-rw-r--r--libical/zoneinfo/Africa/Luanda.ics14
-rw-r--r--libical/zoneinfo/Africa/Lubumbashi.ics14
-rw-r--r--libical/zoneinfo/Africa/Lusaka.ics14
-rw-r--r--libical/zoneinfo/Africa/Malabo.ics14
-rw-r--r--libical/zoneinfo/Africa/Maputo.ics14
-rw-r--r--libical/zoneinfo/Africa/Maseru.ics14
-rw-r--r--libical/zoneinfo/Africa/Mbabane.ics14
-rw-r--r--libical/zoneinfo/Africa/Mogadishu.ics14
-rw-r--r--libical/zoneinfo/Africa/Monrovia.ics14
-rw-r--r--libical/zoneinfo/Africa/Nairobi.ics14
-rw-r--r--libical/zoneinfo/Africa/Ndjamena.ics14
-rw-r--r--libical/zoneinfo/Africa/Niamey.ics14
-rw-r--r--libical/zoneinfo/Africa/Nouakchott.ics14
-rw-r--r--libical/zoneinfo/Africa/Ouagadougou.ics14
-rw-r--r--libical/zoneinfo/Africa/Porto-Novo.ics14
-rw-r--r--libical/zoneinfo/Africa/Sao_Tome.ics14
-rw-r--r--libical/zoneinfo/Africa/Timbuktu.ics14
-rw-r--r--libical/zoneinfo/Africa/Tripoli.ics14
-rw-r--r--libical/zoneinfo/Africa/Tunis.ics14
-rw-r--r--libical/zoneinfo/Africa/Windhoek.ics22
-rw-r--r--libical/zoneinfo/America/Adak.ics22
-rw-r--r--libical/zoneinfo/America/Anchorage.ics22
-rw-r--r--libical/zoneinfo/America/Anguilla.ics14
-rw-r--r--libical/zoneinfo/America/Antigua.ics14
-rw-r--r--libical/zoneinfo/America/Araguaina.ics22
-rw-r--r--libical/zoneinfo/America/Aruba.ics14
-rw-r--r--libical/zoneinfo/America/Asuncion.ics22
-rw-r--r--libical/zoneinfo/America/Barbados.ics14
-rw-r--r--libical/zoneinfo/America/Belem.ics14
-rw-r--r--libical/zoneinfo/America/Belize.ics14
-rw-r--r--libical/zoneinfo/America/Boa_Vista.ics14
-rw-r--r--libical/zoneinfo/America/Bogota.ics14
-rw-r--r--libical/zoneinfo/America/Boise.ics22
-rw-r--r--libical/zoneinfo/America/Buenos_Aires.ics14
-rw-r--r--libical/zoneinfo/America/Cambridge_Bay.ics22
-rw-r--r--libical/zoneinfo/America/Cancun.ics22
-rw-r--r--libical/zoneinfo/America/Caracas.ics14
-rw-r--r--libical/zoneinfo/America/Catamarca.ics14
-rw-r--r--libical/zoneinfo/America/Cayenne.ics14
-rw-r--r--libical/zoneinfo/America/Cayman.ics14
-rw-r--r--libical/zoneinfo/America/Chicago.ics22
-rw-r--r--libical/zoneinfo/America/Chihuahua.ics22
-rw-r--r--libical/zoneinfo/America/Cordoba.ics14
-rw-r--r--libical/zoneinfo/America/Costa_Rica.ics14
-rw-r--r--libical/zoneinfo/America/Cuiaba.ics22
-rw-r--r--libical/zoneinfo/America/Curacao.ics14
-rw-r--r--libical/zoneinfo/America/Danmarkshavn.ics14
-rw-r--r--libical/zoneinfo/America/Dawson.ics22
-rw-r--r--libical/zoneinfo/America/Dawson_Creek.ics14
-rw-r--r--libical/zoneinfo/America/Denver.ics22
-rw-r--r--libical/zoneinfo/America/Detroit.ics22
-rw-r--r--libical/zoneinfo/America/Dominica.ics14
-rw-r--r--libical/zoneinfo/America/Edmonton.ics22
-rw-r--r--libical/zoneinfo/America/Eirunepe.ics14
-rw-r--r--libical/zoneinfo/America/El_Salvador.ics14
-rw-r--r--libical/zoneinfo/America/Fortaleza.ics22
-rw-r--r--libical/zoneinfo/America/Glace_Bay.ics22
-rw-r--r--libical/zoneinfo/America/Godthab.ics22
-rw-r--r--libical/zoneinfo/America/Goose_Bay.ics22
-rw-r--r--libical/zoneinfo/America/Grand_Turk.ics22
-rw-r--r--libical/zoneinfo/America/Grenada.ics14
-rw-r--r--libical/zoneinfo/America/Guadeloupe.ics14
-rw-r--r--libical/zoneinfo/America/Guatemala.ics14
-rw-r--r--libical/zoneinfo/America/Guayaquil.ics14
-rw-r--r--libical/zoneinfo/America/Guyana.ics14
-rw-r--r--libical/zoneinfo/America/Halifax.ics22
-rw-r--r--libical/zoneinfo/America/Havana.ics22
-rw-r--r--libical/zoneinfo/America/Hermosillo.ics14
-rw-r--r--libical/zoneinfo/America/Indiana/Indianapolis.ics14
-rw-r--r--libical/zoneinfo/America/Indiana/Knox.ics14
-rw-r--r--libical/zoneinfo/America/Indiana/Marengo.ics14
-rw-r--r--libical/zoneinfo/America/Indiana/Vevay.ics14
-rw-r--r--libical/zoneinfo/America/Indianapolis.ics14
-rw-r--r--libical/zoneinfo/America/Inuvik.ics22
-rw-r--r--libical/zoneinfo/America/Iqaluit.ics22
-rw-r--r--libical/zoneinfo/America/Jamaica.ics14
-rw-r--r--libical/zoneinfo/America/Jujuy.ics14
-rw-r--r--libical/zoneinfo/America/Juneau.ics22
-rw-r--r--libical/zoneinfo/America/Kentucky/Louisville.ics22
-rw-r--r--libical/zoneinfo/America/Kentucky/Monticello.ics22
-rw-r--r--libical/zoneinfo/America/La_Paz.ics14
-rw-r--r--libical/zoneinfo/America/Lima.ics14
-rw-r--r--libical/zoneinfo/America/Los_Angeles.ics22
-rw-r--r--libical/zoneinfo/America/Louisville.ics22
-rw-r--r--libical/zoneinfo/America/Maceio.ics22
-rw-r--r--libical/zoneinfo/America/Managua.ics14
-rw-r--r--libical/zoneinfo/America/Manaus.ics14
-rw-r--r--libical/zoneinfo/America/Martinique.ics14
-rw-r--r--libical/zoneinfo/America/Mazatlan.ics22
-rw-r--r--libical/zoneinfo/America/Mendoza.ics14
-rw-r--r--libical/zoneinfo/America/Menominee.ics22
-rw-r--r--libical/zoneinfo/America/Merida.ics22
-rw-r--r--libical/zoneinfo/America/Mexico_City.ics22
-rw-r--r--libical/zoneinfo/America/Miquelon.ics22
-rw-r--r--libical/zoneinfo/America/Monterrey.ics22
-rw-r--r--libical/zoneinfo/America/Montevideo.ics14
-rw-r--r--libical/zoneinfo/America/Montreal.ics22
-rw-r--r--libical/zoneinfo/America/Montserrat.ics14
-rw-r--r--libical/zoneinfo/America/Nassau.ics22
-rw-r--r--libical/zoneinfo/America/New_York.ics22
-rw-r--r--libical/zoneinfo/America/Nipigon.ics22
-rw-r--r--libical/zoneinfo/America/Nome.ics22
-rw-r--r--libical/zoneinfo/America/Noronha.ics14
-rw-r--r--libical/zoneinfo/America/North_Dakota/Center.ics22
-rw-r--r--libical/zoneinfo/America/Panama.ics14
-rw-r--r--libical/zoneinfo/America/Pangnirtung.ics22
-rw-r--r--libical/zoneinfo/America/Paramaribo.ics14
-rw-r--r--libical/zoneinfo/America/Phoenix.ics14
-rw-r--r--libical/zoneinfo/America/Port-au-Prince.ics14
-rw-r--r--libical/zoneinfo/America/Port_of_Spain.ics14
-rw-r--r--libical/zoneinfo/America/Porto_Velho.ics14
-rw-r--r--libical/zoneinfo/America/Puerto_Rico.ics14
-rw-r--r--libical/zoneinfo/America/Rainy_River.ics22
-rw-r--r--libical/zoneinfo/America/Rankin_Inlet.ics22
-rw-r--r--libical/zoneinfo/America/Recife.ics22
-rw-r--r--libical/zoneinfo/America/Regina.ics14
-rw-r--r--libical/zoneinfo/America/Rio_Branco.ics14
-rw-r--r--libical/zoneinfo/America/Rosario.ics14
-rw-r--r--libical/zoneinfo/America/Santiago.ics22
-rw-r--r--libical/zoneinfo/America/Santo_Domingo.ics14
-rw-r--r--libical/zoneinfo/America/Sao_Paulo.ics22
-rw-r--r--libical/zoneinfo/America/Scoresbysund.ics22
-rw-r--r--libical/zoneinfo/America/Shiprock.ics22
-rw-r--r--libical/zoneinfo/America/St_Johns.ics22
-rw-r--r--libical/zoneinfo/America/St_Kitts.ics14
-rw-r--r--libical/zoneinfo/America/St_Lucia.ics14
-rw-r--r--libical/zoneinfo/America/St_Thomas.ics14
-rw-r--r--libical/zoneinfo/America/St_Vincent.ics14
-rw-r--r--libical/zoneinfo/America/Swift_Current.ics14
-rw-r--r--libical/zoneinfo/America/Tegucigalpa.ics14
-rw-r--r--libical/zoneinfo/America/Thule.ics22
-rw-r--r--libical/zoneinfo/America/Thunder_Bay.ics22
-rw-r--r--libical/zoneinfo/America/Tijuana.ics22
-rw-r--r--libical/zoneinfo/America/Tortola.ics14
-rw-r--r--libical/zoneinfo/America/Vancouver.ics22
-rw-r--r--libical/zoneinfo/America/Whitehorse.ics22
-rw-r--r--libical/zoneinfo/America/Winnipeg.ics22
-rw-r--r--libical/zoneinfo/America/Yakutat.ics22
-rw-r--r--libical/zoneinfo/America/Yellowknife.ics22
-rw-r--r--libical/zoneinfo/Antarctica/Casey.ics14
-rw-r--r--libical/zoneinfo/Antarctica/Davis.ics14
-rw-r--r--libical/zoneinfo/Antarctica/DumontDUrville.ics14
-rw-r--r--libical/zoneinfo/Antarctica/Mawson.ics14
-rw-r--r--libical/zoneinfo/Antarctica/McMurdo.ics22
-rw-r--r--libical/zoneinfo/Antarctica/Palmer.ics22
-rw-r--r--libical/zoneinfo/Antarctica/South_Pole.ics22
-rw-r--r--libical/zoneinfo/Antarctica/Syowa.ics14
-rw-r--r--libical/zoneinfo/Antarctica/Vostok.ics14
-rw-r--r--libical/zoneinfo/Arctic/Longyearbyen.ics22
-rw-r--r--libical/zoneinfo/Asia/Aden.ics14
-rw-r--r--libical/zoneinfo/Asia/Almaty.ics22
-rw-r--r--libical/zoneinfo/Asia/Amman.ics22
-rw-r--r--libical/zoneinfo/Asia/Anadyr.ics22
-rw-r--r--libical/zoneinfo/Asia/Aqtau.ics22
-rw-r--r--libical/zoneinfo/Asia/Aqtobe.ics22
-rw-r--r--libical/zoneinfo/Asia/Ashgabat.ics14
-rw-r--r--libical/zoneinfo/Asia/Baghdad.ics22
-rw-r--r--libical/zoneinfo/Asia/Bahrain.ics14
-rw-r--r--libical/zoneinfo/Asia/Baku.ics22
-rw-r--r--libical/zoneinfo/Asia/Bangkok.ics14
-rw-r--r--libical/zoneinfo/Asia/Beirut.ics22
-rw-r--r--libical/zoneinfo/Asia/Bishkek.ics22
-rw-r--r--libical/zoneinfo/Asia/Brunei.ics14
-rw-r--r--libical/zoneinfo/Asia/Calcutta.ics14
-rw-r--r--libical/zoneinfo/Asia/Choibalsan.ics14
-rw-r--r--libical/zoneinfo/Asia/Chongqing.ics14
-rw-r--r--libical/zoneinfo/Asia/Chungking.ics46
-rw-r--r--libical/zoneinfo/Asia/Colombo.ics14
-rw-r--r--libical/zoneinfo/Asia/Damascus.ics22
-rw-r--r--libical/zoneinfo/Asia/Dhaka.ics14
-rw-r--r--libical/zoneinfo/Asia/Dili.ics14
-rw-r--r--libical/zoneinfo/Asia/Dubai.ics14
-rw-r--r--libical/zoneinfo/Asia/Dushanbe.ics14
-rw-r--r--libical/zoneinfo/Asia/Gaza.ics22
-rw-r--r--libical/zoneinfo/Asia/Harbin.ics14
-rw-r--r--libical/zoneinfo/Asia/Hong_Kong.ics14
-rw-r--r--libical/zoneinfo/Asia/Hovd.ics14
-rw-r--r--libical/zoneinfo/Asia/Irkutsk.ics22
-rw-r--r--libical/zoneinfo/Asia/Istanbul.ics22
-rw-r--r--libical/zoneinfo/Asia/Jakarta.ics14
-rw-r--r--libical/zoneinfo/Asia/Jayapura.ics14
-rw-r--r--libical/zoneinfo/Asia/Jerusalem.ics22
-rw-r--r--libical/zoneinfo/Asia/Kabul.ics14
-rw-r--r--libical/zoneinfo/Asia/Kamchatka.ics22
-rw-r--r--libical/zoneinfo/Asia/Karachi.ics22
-rw-r--r--libical/zoneinfo/Asia/Kashgar.ics14
-rw-r--r--libical/zoneinfo/Asia/Katmandu.ics14
-rw-r--r--libical/zoneinfo/Asia/Krasnoyarsk.ics22
-rw-r--r--libical/zoneinfo/Asia/Kuala_Lumpur.ics14
-rw-r--r--libical/zoneinfo/Asia/Kuching.ics14
-rw-r--r--libical/zoneinfo/Asia/Kuwait.ics14
-rw-r--r--libical/zoneinfo/Asia/Macao.ics14
-rw-r--r--libical/zoneinfo/Asia/Magadan.ics22
-rw-r--r--libical/zoneinfo/Asia/Manila.ics14
-rw-r--r--libical/zoneinfo/Asia/Muscat.ics14
-rw-r--r--libical/zoneinfo/Asia/Nicosia.ics22
-rw-r--r--libical/zoneinfo/Asia/Novosibirsk.ics22
-rw-r--r--libical/zoneinfo/Asia/Omsk.ics22
-rw-r--r--libical/zoneinfo/Asia/Phnom_Penh.ics14
-rw-r--r--libical/zoneinfo/Asia/Pontianak.ics14
-rw-r--r--libical/zoneinfo/Asia/Pyongyang.ics14
-rw-r--r--libical/zoneinfo/Asia/Qatar.ics14
-rw-r--r--libical/zoneinfo/Asia/Rangoon.ics14
-rw-r--r--libical/zoneinfo/Asia/Riyadh.ics14
-rw-r--r--libical/zoneinfo/Asia/Saigon.ics14
-rw-r--r--libical/zoneinfo/Asia/Sakhalin.ics22
-rw-r--r--libical/zoneinfo/Asia/Samarkand.ics14
-rw-r--r--libical/zoneinfo/Asia/Seoul.ics14
-rw-r--r--libical/zoneinfo/Asia/Shanghai.ics14
-rw-r--r--libical/zoneinfo/Asia/Singapore.ics14
-rw-r--r--libical/zoneinfo/Asia/Taipei.ics14
-rw-r--r--libical/zoneinfo/Asia/Tashkent.ics14
-rw-r--r--libical/zoneinfo/Asia/Tbilisi.ics22
-rw-r--r--libical/zoneinfo/Asia/Tehran.ics14
-rw-r--r--libical/zoneinfo/Asia/Thimphu.ics14
-rw-r--r--libical/zoneinfo/Asia/Tokyo.ics14
-rw-r--r--libical/zoneinfo/Asia/Ujung_Pandang.ics14
-rw-r--r--libical/zoneinfo/Asia/Ulaanbaatar.ics14
-rw-r--r--libical/zoneinfo/Asia/Urumqi.ics14
-rw-r--r--libical/zoneinfo/Asia/Vientiane.ics14
-rw-r--r--libical/zoneinfo/Asia/Vladivostok.ics22
-rw-r--r--libical/zoneinfo/Asia/Yakutsk.ics22
-rw-r--r--libical/zoneinfo/Asia/Yekaterinburg.ics22
-rw-r--r--libical/zoneinfo/Asia/Yerevan.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Azores.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Bermuda.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Canary.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Cape_Verde.ics14
-rw-r--r--libical/zoneinfo/Atlantic/Faeroe.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Jan_Mayen.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Madeira.ics22
-rw-r--r--libical/zoneinfo/Atlantic/Reykjavik.ics14
-rw-r--r--libical/zoneinfo/Atlantic/South_Georgia.ics14
-rw-r--r--libical/zoneinfo/Atlantic/St_Helena.ics14
-rw-r--r--libical/zoneinfo/Atlantic/Stanley.ics22
-rw-r--r--libical/zoneinfo/Australia/Adelaide.ics22
-rw-r--r--libical/zoneinfo/Australia/Brisbane.ics14
-rw-r--r--libical/zoneinfo/Australia/Broken_Hill.ics22
-rw-r--r--libical/zoneinfo/Australia/Darwin.ics14
-rw-r--r--libical/zoneinfo/Australia/Hobart.ics22
-rw-r--r--libical/zoneinfo/Australia/Lindeman.ics14
-rw-r--r--libical/zoneinfo/Australia/Lord_Howe.ics22
-rw-r--r--libical/zoneinfo/Australia/Melbourne.ics22
-rw-r--r--libical/zoneinfo/Australia/Perth.ics14
-rw-r--r--libical/zoneinfo/Australia/Sydney.ics22
-rw-r--r--libical/zoneinfo/Europe/Amsterdam.ics22
-rw-r--r--libical/zoneinfo/Europe/Andorra.ics22
-rw-r--r--libical/zoneinfo/Europe/Athens.ics22
-rw-r--r--libical/zoneinfo/Europe/Belfast.ics22
-rw-r--r--libical/zoneinfo/Europe/Belgrade.ics22
-rw-r--r--libical/zoneinfo/Europe/Berlin.ics22
-rw-r--r--libical/zoneinfo/Europe/Bratislava.ics22
-rw-r--r--libical/zoneinfo/Europe/Brussels.ics22
-rw-r--r--libical/zoneinfo/Europe/Bucharest.ics22
-rw-r--r--libical/zoneinfo/Europe/Budapest.ics22
-rw-r--r--libical/zoneinfo/Europe/Chisinau.ics22
-rw-r--r--libical/zoneinfo/Europe/Copenhagen.ics22
-rw-r--r--libical/zoneinfo/Europe/Dublin.ics22
-rw-r--r--libical/zoneinfo/Europe/Gibraltar.ics22
-rw-r--r--libical/zoneinfo/Europe/Helsinki.ics22
-rw-r--r--libical/zoneinfo/Europe/Istanbul.ics22
-rw-r--r--libical/zoneinfo/Europe/Kaliningrad.ics22
-rw-r--r--libical/zoneinfo/Europe/Kiev.ics22
-rw-r--r--libical/zoneinfo/Europe/Lisbon.ics22
-rw-r--r--libical/zoneinfo/Europe/Ljubljana.ics22
-rw-r--r--libical/zoneinfo/Europe/London.ics22
-rw-r--r--libical/zoneinfo/Europe/Luxembourg.ics22
-rw-r--r--libical/zoneinfo/Europe/Madrid.ics22
-rw-r--r--libical/zoneinfo/Europe/Malta.ics22
-rw-r--r--libical/zoneinfo/Europe/Minsk.ics22
-rw-r--r--libical/zoneinfo/Europe/Monaco.ics22
-rw-r--r--libical/zoneinfo/Europe/Moscow.ics22
-rw-r--r--libical/zoneinfo/Europe/Nicosia.ics22
-rw-r--r--libical/zoneinfo/Europe/Oslo.ics22
-rw-r--r--libical/zoneinfo/Europe/Paris.ics22
-rw-r--r--libical/zoneinfo/Europe/Prague.ics22
-rw-r--r--libical/zoneinfo/Europe/Riga.ics22
-rw-r--r--libical/zoneinfo/Europe/Rome.ics22
-rw-r--r--libical/zoneinfo/Europe/Samara.ics22
-rw-r--r--libical/zoneinfo/Europe/San_Marino.ics22
-rw-r--r--libical/zoneinfo/Europe/Sarajevo.ics22
-rw-r--r--libical/zoneinfo/Europe/Simferopol.ics22
-rw-r--r--libical/zoneinfo/Europe/Skopje.ics22
-rw-r--r--libical/zoneinfo/Europe/Sofia.ics22
-rw-r--r--libical/zoneinfo/Europe/Stockholm.ics22
-rw-r--r--libical/zoneinfo/Europe/Tallinn.ics22
-rw-r--r--libical/zoneinfo/Europe/Tirane.ics22
-rw-r--r--libical/zoneinfo/Europe/Uzhgorod.ics22
-rw-r--r--libical/zoneinfo/Europe/Vaduz.ics22
-rw-r--r--libical/zoneinfo/Europe/Vatican.ics22
-rw-r--r--libical/zoneinfo/Europe/Vienna.ics22
-rw-r--r--libical/zoneinfo/Europe/Vilnius.ics14
-rw-r--r--libical/zoneinfo/Europe/Warsaw.ics22
-rw-r--r--libical/zoneinfo/Europe/Zagreb.ics22
-rw-r--r--libical/zoneinfo/Europe/Zaporozhye.ics22
-rw-r--r--libical/zoneinfo/Europe/Zurich.ics22
-rw-r--r--libical/zoneinfo/Indian/Antananarivo.ics14
-rw-r--r--libical/zoneinfo/Indian/Chagos.ics14
-rw-r--r--libical/zoneinfo/Indian/Christmas.ics14
-rw-r--r--libical/zoneinfo/Indian/Cocos.ics14
-rw-r--r--libical/zoneinfo/Indian/Comoro.ics14
-rw-r--r--libical/zoneinfo/Indian/Kerguelen.ics14
-rw-r--r--libical/zoneinfo/Indian/Mahe.ics14
-rw-r--r--libical/zoneinfo/Indian/Maldives.ics14
-rw-r--r--libical/zoneinfo/Indian/Mauritius.ics14
-rw-r--r--libical/zoneinfo/Indian/Mayotte.ics14
-rw-r--r--libical/zoneinfo/Indian/Reunion.ics14
-rw-r--r--libical/zoneinfo/Makefile.am39
-rw-r--r--libical/zoneinfo/Pacific/Apia.ics14
-rw-r--r--libical/zoneinfo/Pacific/Auckland.ics22
-rw-r--r--libical/zoneinfo/Pacific/Chatham.ics22
-rw-r--r--libical/zoneinfo/Pacific/Easter.ics22
-rw-r--r--libical/zoneinfo/Pacific/Efate.ics14
-rw-r--r--libical/zoneinfo/Pacific/Enderbury.ics14
-rw-r--r--libical/zoneinfo/Pacific/Fakaofo.ics14
-rw-r--r--libical/zoneinfo/Pacific/Fiji.ics14
-rw-r--r--libical/zoneinfo/Pacific/Funafuti.ics14
-rw-r--r--libical/zoneinfo/Pacific/Galapagos.ics14
-rw-r--r--libical/zoneinfo/Pacific/Gambier.ics14
-rw-r--r--libical/zoneinfo/Pacific/Guadalcanal.ics14
-rw-r--r--libical/zoneinfo/Pacific/Guam.ics14
-rw-r--r--libical/zoneinfo/Pacific/Honolulu.ics14
-rw-r--r--libical/zoneinfo/Pacific/Johnston.ics14
-rw-r--r--libical/zoneinfo/Pacific/Kiritimati.ics14
-rw-r--r--libical/zoneinfo/Pacific/Kosrae.ics14
-rw-r--r--libical/zoneinfo/Pacific/Kwajalein.ics14
-rw-r--r--libical/zoneinfo/Pacific/Majuro.ics14
-rw-r--r--libical/zoneinfo/Pacific/Marquesas.ics14
-rw-r--r--libical/zoneinfo/Pacific/Midway.ics14
-rw-r--r--libical/zoneinfo/Pacific/Nauru.ics14
-rw-r--r--libical/zoneinfo/Pacific/Niue.ics14
-rw-r--r--libical/zoneinfo/Pacific/Norfolk.ics14
-rw-r--r--libical/zoneinfo/Pacific/Noumea.ics14
-rw-r--r--libical/zoneinfo/Pacific/Pago_Pago.ics14
-rw-r--r--libical/zoneinfo/Pacific/Palau.ics14
-rw-r--r--libical/zoneinfo/Pacific/Pitcairn.ics14
-rw-r--r--libical/zoneinfo/Pacific/Ponape.ics14
-rw-r--r--libical/zoneinfo/Pacific/Port_Moresby.ics14
-rw-r--r--libical/zoneinfo/Pacific/Rarotonga.ics14
-rw-r--r--libical/zoneinfo/Pacific/Saipan.ics14
-rw-r--r--libical/zoneinfo/Pacific/Tahiti.ics14
-rw-r--r--libical/zoneinfo/Pacific/Tarawa.ics14
-rw-r--r--libical/zoneinfo/Pacific/Tongatapu.ics22
-rw-r--r--libical/zoneinfo/Pacific/Truk.ics14
-rw-r--r--libical/zoneinfo/Pacific/Wake.ics14
-rw-r--r--libical/zoneinfo/Pacific/Wallis.ics14
-rw-r--r--libical/zoneinfo/Pacific/Yap.ics14
-rw-r--r--libical/zoneinfo/zones.tab378
719 files changed, 0 insertions, 139701 deletions
diff --git a/libical/AUTHORS b/libical/AUTHORS
deleted file mode 100644
index ce25b7bd75..0000000000
--- a/libical/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-John Gray <gray@agora-net.com>
-Andrea Campi <a.campi@inet.it>
-
-Original author May 1998-December 2001, Eric Busboom <eric@softwarestudio.org>
diff --git a/libical/COPYING b/libical/COPYING
deleted file mode 100644
index e69de29bb2..0000000000
--- a/libical/COPYING
+++ /dev/null
diff --git a/libical/INSTALL b/libical/INSTALL
deleted file mode 100644
index b3f195d679..0000000000
--- a/libical/INSTALL
+++ /dev/null
@@ -1,24 +0,0 @@
-Building the library
---------------------
-
-This distribution is developed on Red Hat Linux 6.0 and usually
-compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of
-previous version on MacOS ( with CodeWarrior ) and on UnixWare, but I
-don't know about any other systems.
-
-The library is configured with automake. From the root directory, run
-
- ./configure
-
-To build all of the Makefiles for your system. If you will be installing the library, you may want to use the --prefix flag to set the directory where the library and header files will be installed.
-
- ./configure --prefix=/proj/local/
-
-If configure runs fine, run "make" to build the library and
-"make install" to install it.
-
-The current version of libical focuses on creating and
-manipulating iCal objects. With it, you can parse text representations
-of iCal components, add and remove sub-components, properties,
-parameters and values, and print the components back out as strings.
-
diff --git a/libical/Makefile.am b/libical/Makefile.am
deleted file mode 100644
index 220d9f3322..0000000000
--- a/libical/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-
-EXTRA_DIST = \
- ChangeLog \
- README \
- TEST \
- TODO
-
-SUBDIRS = design-data doc scripts test-data src examples zoneinfo
-
diff --git a/libical/NEWS b/libical/NEWS
deleted file mode 100644
index ad1299b2fa..0000000000
--- a/libical/NEWS
+++ /dev/null
@@ -1,522 +0,0 @@
-Version 0.24, XX Xxx 2002 ( cvs tag libical-0-24 )
---------------------------------------------------
-
-**** Incompatibilities with previous version ****
-
-CSTP client/server code has been removed from libicalss.
-Future versions will eventually contain a full CAP 6.0
-client/server implementation.
-
-icalproperty_get_name() is deprecated and will change
-in a future release. Use icalproperty_get_icalproperty_name()
-instead.
-
-icalcomponent_get_span() is deprecated in this release
-because it does not handle recurring events. See
-icalcomponent_foreach_recurrence() for an alternate
-interface.
-
-The icalproperty_remove_parameter() call is deprecated
-because it improperly deals with extended parameters.
-See icalproperty_remove_parameter_by_kind() for a
-compatible call.
-
-Code that deals with the TRANSPARENT property now
-uses enumeration values to get/set values instead of
-strings.
-
-The code for dealing with icalsets was overhauled. You
-will want to use the common icalset_* routines
-directly instead of calling into the icalfileset_* or
-icaldirset_* routines.
-
-A number of routines now expect to be called with
-const arguments. A number of routines now
-return pointers to const data.
-
-
-**** New Features ****
-
-Major cleanup of the time-handling routines. New API is
-available that deals with timezones much more cleanly.
-
-The regression routines in src/test are much cleaner.
-Test runs summarize which tests fail and do not
-immediately abort() like the old set of tests. A
-number of old, commented tests were resurrected.
-
-C++ Interface: New libraries libical_cxx.la and libicalss_cxx.la
-are build when you configure with the --enable-cxx option.
-
-Java Interface: A JNI interface to libical is build when
-you configure with the --enable-java option.
-
-Most of libical is now reentrant and thread safe. The Lex/Yacc
-query parser is pre-built with flex 2.5.8 and bison 1.34. To
-rebuild these files you will need to specify the --with-devel
-option. The --enable-reentrant option also adds the -D_REENTRANT
-flag for systems that require it. The build system attempts to
-add the pthread libraries to support a thread safe memory allocator
-and thread-safe error handling.
-
-A new storage mechanism for Berkeley DB 4.0 was contributed
-by Critical Path. Specify the --with-bdb4 and --with-bdb4-dir
-options to enable.
-
-Embedded code comments are slowly being migrated to be
-doxygen compliant. See http://www.doxygen.org/ for
-more on this wonderful tool.
-
-The code should now compile with non-gcc compilers. Certain
-parts of the autogenerated code were causing problems. The
-code base has also been ported to the windows Visual C
-environment.
-
-
-Version 0.23, 26 Mar 01 ( cvs tag libical-0-23 )
-------------------------------------------------
-
-**** Incompatibilities with previous versions ****
-
-icalparameter_new_rsvp
-icalparameter_get_rsvp
-icalparameter_set_rsvp
-
- These routines now take and return ICAL_RSVP_TRUE and
- ICAL_RSVP_FALSE instead of 0 and 1
-
-icalenum_*_to_*
-
- These routines have been moved to icalproperty, icalparameter
- or icalvalue
-
-
-
-Python interface: An alpha level python interface is available in
-src/python.
-
-Perl interface: A pre-alpha level interface is available in
-src/Net-ICal-Libical
-
-Code Autogeneration: Converted all of the important files in
-design-data/ to .csv files and improved the code that is generated
-from them. Now all of the enumerations for property, parameters and
-values are generated from thes files, as are the string
-representations for the enumerations. You can add a new property or
-parameter to the system simply by adding a line to the appropriate
-file in design-data/
-
-Recurrences: Improved the recurrence code by fixing bugs in MONTHLY
-recurrences and completely re-implementing expand_year_days() for
-YEARLY recurrences. Hubert V's aided in testing.
-
-Build system: JP Rosevear made several improvements to the build
-system. Now checking out the code from cvs should give to a complete
-but minimal distribution, without any of the autognerated files.
-
-Interface changes: Nearly all of the icalenum routines for converting
-between strings and enumerations have been moved out of icalenum into
-icalproperty, icalparameter and icalvalue. This means that their names
-have changed, although #defines have been added to icalenum.h to map
-back to the old names.
-
-Added src/libical/icllangbind.c that has some functions to make it
-easier to bind libical to other languages.
-
-
-Version 0.22, 15 Jan 01 ( cvs tag libical-0-22)
-----------------------------------------------
-
-Many improvements to the time routines in icaltime.c. I think that
-they actually make sense now. Note that there is an interface change
-with icaltime_from_timet() -- I removed the is_utc parameter, since
-all timet values are in UTC. Use icaltime_from_int() if you really
-want the old interface
-
-Major improvements to icalfileset. icalfileset_select now works and so
-does file locking.
-
-Minor revision to the documentation, but it does include a new section
-on file storage ( icalfileset ) and time ( icaltime.c)
-
-Lots of bug fixes and small patches.
-
-I improved the regression test in src/test/regression.c. It now have
-command line switches to select specific tests ( undocumentated, of
-course ) and more of the tests include asserts, so you can just run it
-without looking at the output. If the test runs without crashing, it
-is mostly OK.
-
-
-
-Version 0.21, 20 Nov 00 ( cvs tag libical-0-21)
-----------------------------------------------
-
- * icalmessage.c Many routines to create new ical messages.
-
- * icalspanlist.c Code to generate a list of the busy time f the
- VEVENTS in a set. Also includes routiens to generate free and busy
- lists from the spanlist, and to find the next free time after a
- given time.
-
- * icalvalue.c The STATUS property now has its own value type,
- STATUS, which holds the enumeration icalproperty_status.
-
- * icalrestriction.c Added more restrictions. Now handles mutual
- and exclusive consitions, and checks for the reight values in
- STATUS properties
-
- * icaltypes.c Added routine to create durationtype from string:
- icaldurationtype_from_string
-
-
- * icalcomponet.c Add sever get/set convienience routines to access
- and manipulate common component propoerties from the component
- interface. This eliminates the need to create a lot of temporary
- variables if you just want to change the start time of and event.
-
-
- * icalcomponent.c Added new routines to icalcomponent:
- _get_span -- returns the start and end times of the event in UTC
- _get_first_real_component -- return ref to VTODO, VEVENT or VJOURNAL
-
- * icalspanlist.c Added new class, icalspanlist, that generates a
- list of alternating busy and free times from an icalset. The class
- includes routines to gnerate rfc2445 busy and free lists, and to
- get the next avaliable busy or free time after a given time.
-
-
-Version 0.20D 3 Nov 00
------------------------
-
-Many miscelaneous tweaks to the build system
-
-More work to icalclassify.
-
-Aded routines to icaltime.c to convert to and from specific timezones
-in Olsen format ("America/Los_Angeles")
-
-
-Version 0.20 7 Sept 00 (cvs tag libical-0-20 )
-----------------------------------------------
-
-Addedd icalclassify() which looks at a message and determine how to
-process it.
-
-Misc bug fixes and tweaks.
-
-Version 0.19 6 August 00 (cvs tag libical-0-19)
------------------------------------------------
-
-Created a MIME parser in icalmime.c. This will take any complex MIME
-encapsulated message and return an icalcomponent with the same
-structure. Each MIME part is represented by a component of type
-X-LIC-MIMEPART.
-
-Added MIME partsing to stow.c
-
-Added external iterators to icalcomponent. See test_iterators() in
-test/regression.c
-
-Refactored icalcluster and icalstore into icalset, icalfileset and
-icaldirset, which have a pseudo inheritance relationship between them.
-
-Fixed more memory leaks.
-
-Version 0.18a 10 June 00 ( cvs tag libical-0-18a )
------------------------------------------------
-
-Did the final tweaks to stow.c, a program to recieve and store iMIP
-messages.
-
-
-Version 0.18 10 June 00 ( cvs tag libical-0-18 )
------------------------------------------------
-
-Added libicalvcal, which includes the Versit code for parsing vCal
-files and a routine (icalvcal_convert() ) that converts a vCal object
-to an iCal object. The test program is src/test/testvcal.
-
-Added marginally functional recurrence code. The curent code does not
-handle all of the examples in rfc2445 ( which are extracted in
-test-data/recur.txt ) but it can do all of the obvious cases. See the
-test program in src/test/recur.c for an example. In particular, the
-code cannot handle the integer values in BYDAY, nor negative integers
-in BYMONTH or BYMONTHDAY. It also cannot handle BYSETPOS.
-
-Moved some code to the examples directory and improved the comments.
-
-Did a little more work on the documentation in the doc directory. The
-documentation is in LyX source, but there is a text version in
-UsingLibical.txt
-
-
-Version 0.17 15 May 00 (cvs tag libical-0-17 )
----------------------------------------------
-
-Fixed two bugs that added extraneous '/' to test values
-
-Fixed type in internal string for the COUNTER method
-
-Eliminated a memory leak in icalparser.c
-
-
-Version 0.16a 29 April 00
-----------------------------------------------
-
-Fixed bug in icalvalue_new_from_string that caused METHOD value to
-choke on non standard input.
-
-Fixed a memory leak in icalparser_add_line -- failed to free 'line'
-
-
-Version 0.16 5 April 00 ( cvs tag libical-0-16)
-----------------------------------------------
-
-Now using automake.
-
-Substantial changes to the parser. New interfaces let you parser
-multiple components from a single stream by feading the parser object
-one line at a time.
-
-Added a STRING value type. this type is like TEXT, but does not
-backslash magic characters. It is used in PRODID and REQUEST-STATUS,
-where the '/' and ';' are literal.
-
-Added several convience functions for REQUEST-STATUS to icalenums.c
-
-Addedd a routine to icalcomponent to convert X-LIC errors to
-REQUEST-STATUS return values.
-
-Version 0.15a 5 Mar 00 (cvs tag libical-0-15a)
----------------------
-
-Experimented with CVS
-
-Fixed icalvalue_set_text to convert escaped characters into the proper
-values.
-
-Other minor code tweaks.
-
-
-Version 0.15 7 Feb 00
----------------------
-
-Split the storage classess ( icalstore, icalcluster, icalcalendar )
-into a seperate library, libicalss
-
-Implemented restriction checking in file icalrestrictions.c. The
-checking is not complete, but can handle the bulk of the restrictions
-described in RFC 2446.
-
-Created a new value type, METHOD. Changed METHOD property to use the
-new value. The METHOD value uses an enumeration.
-
-
-Version 0.14b
--------------
-
-Implemented parsing of RECUR values, although it does not handle BYDAY
-specs with numbers.
-
-Fixed error in icalparser_next_line that mangled lines longer than the
-temp buffer (1024 chars.) The temp buffer is now 80 chars, and it can
-handle (apparently) arbitrary length lines
-
-Fixed severe brokenness in a value, but I forgot which one.
-
-Cleaned cruft out of the distribution, so the tarfile is smaller.
-
-
-Version 0.14a 14 Jan 00
------------------------
-
-Fixed bug in ROLE parameter -- missing '-' in the text of allowed values
-
-Fixed bug in X-parameters
-
-Version 0.14 11 Jan 00
-----------------------
-
-Fixed wrong value type for TRIGGER property
-
-Added Calendar object. Calendar is an aggregate of two stores and two
-clusters, and can store all of the inforamation associated with a
-calendar.
-
-icalcomponent_add_property and icalcomponent_add_component will
-complain if you try to add a component or property that is already
-part of an other component. The *_free routines wil complain if you try
-to free a linked component or property.
-
-More improvements to error handling.
-
-Parser is much more robust.
-
-Minor memory enhancements.
-
-Regression test runs without memory leaks.
-
-Version 0.13d 21Dec99
----------------------
-
-Seperated perl interface and library
-
-Added autoconf support
-
-Scripts that generate derived properties, values and parameters now
-change source and header files inline.
-
-Changed icalstore to cluster all components with DTSTART in a month
-into a single file. This should reduce number of file accesses by a
-factor of 60.
-
-Ran code through Purify and fixed memory leaks.
-
-
-Version 0.13 16Nov99
----------------------
-
-Yet more bug fixes! Yeah!
-
-Added better error handling. The Parser inserts X-LIC-*ERROR
-properties to warn of parsing errors.
-
-The imip source/sink programs in /src/imip is demonstrably functional.
-
-Version 0.12b 17Oct99
----------------------
-
-More bug fixes, particularily in parse from string routines
-
-ICal::Store is mostly functional
-
-This is version is a checkpoint, not a release.
-
-Version 0.12a 10Oct99
----------------------
-
-Expanded perl interface:
- Added 1/2 of Store module
- Fixed bugs
- Implemeted get_{first,next}_property
-
-Extended C interface
- Made get_{first,next}_property work properly
- Fixed bugs
-
-
-This is version is a checkpoint, not a release.
-
-Version 0.12 27Aug99
---------------------
-
-Added a rudimentatry perl interface
-
-This is version is a checkpoint, not a release.
-
-
-Version 0.11 11Aug99
---------------------
-
-Eliminated most use of flex/bison -- all parsing, except for the
-values, is done in C.
-
-Cleaned up memory leaks. Purify claims that I got them all.
-
-Moved all derived component/prop/param/value code ( in .inc / .h
-files) into main files ( icalcomponent.{c,h}, icalproperty.{c,h}, etc/
-)
-
-Implemented *_clone routines.
-
-Fixed a lot of bugs.
-
-Implemented more value types. Still unimplemeneted are BINARY and RECUR
-
-Included MacOS/Code Warior files from Graham Davison
-
-
-Version 0.10 8Jul99
--------------------
-
-Eliminated shift/reduce and reduce/reduce conflicts in the parser.
-This version is almost feature complete -- it has the basic structure
-for all of the library's functionality, and it will only require
-implementing procedure shells and fixing bugs. I think that all of the
-hard work is done...
-
-Version 0.09a,b 3,7 Jul99
--------------------------
-
-Various improvements to the parser, added some functionality. The parser code
-is mostly complete, and should be fully functional, except for a horde of
-bugs. Also added support for X-Properties.
-
-Version 0.09 25Jun99
---------------------
-
-Added a parser in files src/comp/icalitip.{y,l} The lexer is mostly
-functional, but the parser is not.
-
-
-Version 0.08 2Jun99
---------------------
-
-All files now have MPL licensing
-
-Implement enough of the code to perform some rudimentary testing
-
-
-Version 0.07 14May99
---------------------
-
-Remove all interfaces that construct object from a string
-
-Moved most code back into comp directory
-
-Implemented C files for most headers -- usecases.c now links.
-
-Many improvements to generation scripts.
-
-
-
-Version 0.06 25Apr99
---------------------
-
-Expanded distribution to include:
- Directory structure that can accomodate future expansion
- Several levels of Makefiles
- This CHANGES file
-
-Added headers for irip and parse modules
-
-Added several files with design information
-
-Added scripts that I had used to generate much of the ical header code.
-
-Split C headers from CC headers
-
-Added data for iTIP and iCAL component restrictions in restrictions.csv
-
-Version 0.05 11Apr99
-----------------------
-
-Changes to ical headers
-
- Added derived Property classes.
-
- Improved the interface to the derived property and parameter classes
-
- Added derived component classes.
-
- Created usecases.c and ccusecases.cc to demonstrate use
-
- C++ interface compile
-
-
-Version 0.04 5Apr99
--------------------
-
-Version 0.02 30Mar99
---------------------
diff --git a/libical/README b/libical/README
deleted file mode 100644
index 19a4740e94..0000000000
--- a/libical/README
+++ /dev/null
@@ -1,102 +0,0 @@
-
-LIBICAL -- An implementation of basic iCAL protocols
-
-The code and datafiles in this distribution are licensed under the
-Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html
-for a copy of the license. Alternately, you may use libical under the
-terms of the GNU Library General Public License. See
-http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL.
-
-This dual license ensures that the library can be incorporated into
-both proprietary code and GPL'd programs, and will benefit from
-improvements made by programmers in both realms. I will only accept
-changes into my version of the library if they are similarly
-dual-licensed.
-
-Portions of this distribution are (C) Copyright 1996 Apple Computer,
-Inc., AT&T Corp., International Business Machines Corporation and
-Siemens Rolm Communications Inc. See src/libicalvcal/README.TXT for
-details.
-
-Portions of this distribution are Copyright (c) 1997 Theo de
-Raadt. See the header for src/libical/vsnprintf.c for the full
-copyright statement.
-
-This code is under active development. If you would like to contribute
-to the project, you can contact me, Eric Busboom, at
-eric@softwarestudio.org. The project has a webpage at
-
- http://softwarestudio.org/libical/index.html
-
-and a mailing list that you can join by sending the following mail:
-
- ------------
- To: minimalist@softwarestudio.org
- Subject: subscribe libical
- ------------
-
-
-Building the library
---------------------
-
-This distribution is developed on Red Hat Linux 6.0 and usually
-compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of
-previous version on MacOS ( with CodeWarrior ) and on UnixWare, but I
-don't know about any other systems.
-
-The library is configured with automake. IF YOU ARE BUILDING THE
-SOURCE FROM A TARBALL, From the root directory, run
-
- ./configure
-
-To build all of the Makefiles for your system. If you will be
-installing the library, you may want to use the --prefix flag to set
-the directory where the library and header files will be installed.
-
- ./configure --prefix=/proj/local/
-
-If configure runs fine, run "make" to build the library and
-"make install" to install it.
-
-Although the distribution uses libtool to generate libraries, it has
-shared libraries turned off by default. To create and install shared
-libraries use:
-
- ./configure --enable-shared
-
-
-IF YOU ARE BUILDING FROM CVS, there will be no configure file until
-you create one with autogen.sh. YOu can pass configure parameters to
-autogen.sh on the command line.
-
-The current version of libical focuses on creating and
-manipulating iCal objects. With it, you can parse text representations
-of iCal components, add and remove sub-components, properties,
-parameters and values, and print the components back out as strings.
-
-
-Notes for Libical Developers
--------------------
-
-If you don't want to use gcc as the compiler, and you got the sources
-from CVS, you should set the CC variable to the path to the compiler
-and run "automake --include-deps" to keep automake from using
-gcc-specific automatic dependancy tracking.
-
- > CC=/pkg/SUNWspro/bin/cc; export CC
- > automake --include-deps
- > ./configure --prefix=/proj/local/
- > make
-
-You will not need to re-run automake unless you got the sources from CVS.
-
-Using the Library
------------------
-
-There is rudimentary, unfinished documentation in the /doc directory,
-and annotated examples in /examples and the test code in src/test.
-
-
-
-Eric Busboom
-eric@softwarestudio.org
diff --git a/libical/TEST b/libical/TEST
deleted file mode 100644
index 90c3473b31..0000000000
--- a/libical/TEST
+++ /dev/null
@@ -1,4 +0,0 @@
-
-Parser Tests
-------------
-Use iCAL keywords as first words of unquoted strings \ No newline at end of file
diff --git a/libical/THANKS b/libical/THANKS
deleted file mode 100644
index d795eecaa3..0000000000
--- a/libical/THANKS
+++ /dev/null
@@ -1,69 +0,0 @@
-Thanks to:
-
-Allan Clark <allanc@atlas.platypus.bc.ca> for testing libical against
-UnixWare.
-
-Graham Davison <g.m.davison@computer.org> for MacOS support and
-miscelaneous code bits
-
-Seth Alves <alves@hungry.com> for the first cut at the Makefile.am
-files and various utility functions.
-
-Russ Steinthal <rms39@columbia.edu> for several utility functions and
-comments.
-
-Ola Lundqvist <olalu526@student.liu.se> for the vCal test data file.
-
-Colin DuPlantis <colin@cp.net> for new functions in icalparser.c
-
-Holger Schmidt <hschmidt@chronolabs.de> for all of icalcstp.c, The
-CSTP protocol implementation, and modifications to icalcstp.h
-
-Gisle Hannemyr <gisle@oslonett.no> The decode*() functions in sspm.c
-are based on the decode() routine in the mimelite program, Copyright
-(c) 1994 Gisle Hannemyr.
-
-The Evolution team at Helixcode ( Federico Mena Quintero
-<federico@helixcode.com>, JP Rosevear <jpr@helixcode.com>, Ettore
-Perazzoli <ettore@helixcode.com>, Christopher James Lahey
-<clahey@helixcode.com>, Peter Williams <peterw@helixcode.com>) for
-miscelaneous patches and adjustments to the build system.
-
-Cornelius Schumacher <schumacher@kde.org> for many insightful
-suggestions and a few patches.
-
-Mark D. Anderson <mda@discerning.com> for discussions and ideas.
-
-Martin Neimeier <nei@ibn.de> for correcting bugs in icalrecur.c
-
-Tom Leitner <tom@radar.tu-graz.ac.at> For several bug fixes in
-compiling on Tru64 UNIX.
-
-Patrick Lewis <plewis@inetarena.com> for several bug reports and
-substantial ( co-authorship) contributions to the Python bindings
-
-Larry W. Virden <lvirden@cas.org> for several bug reports in compiling
-on Solaris.
-
-Bryan Bartone <bsb@mesasys.com> for code changes based on porting
-libical to Windows.
-
-Hubert V <hubertv@bigfoot.com> for checking and analyzing the output
-of the recurrence rule system.
-
-Jonathan Yue <jonathan.yue@cp.net> for icalproperty_get_name()
-
-Jeff Mace <jhm18@psu.edu> for finding bugs in gauges.
-
-John Gray <gray@agora-net.com> for routing memory leaks, porting to
-WIN32, and taking over leadership of the project.
-
-Andrea Campi <a.campi@inet.it> for miscellaneous updates and beginning
-of Doxygen documentation.
-
-Paul Lindner <plindner@cp.net> for several contributions, including
-C++ binding, reentrant parser, thread safe memory allocator, and a
-lot of documentation.
-
-Mark Tearle <mtearle@tearle.com> for keeping the Python bindings up
-to date.
diff --git a/libical/TODO b/libical/TODO
deleted file mode 100644
index f707c2a525..0000000000
--- a/libical/TODO
+++ /dev/null
@@ -1,39 +0,0 @@
-
-TODOs for libical
------------------
-
-libical treats properties with multiple values incorrecty -- it always
-seperates multiple values into multiple properties. This is not
-acceptable for CATEGORIES and RESOURCES.
-
-Some TEXT valued properties, like METHOD, have a limited set of valid
-values. The code should check that the values of these properites are
-valid. ( Although METHOD now uses enums, and is not really TEXT valued )
-
-Finish implementing values
- ATTACH/BINARY
- content_type
- language
-
-Check for buffer overflow on external input.
-
-Error Handling
-
- Dates and times: the parser will accept many illegal date time
- values
-
-RECUR values ignore integers in BYDAY clauses, ie 'FREQ=MONTHLY;BYDAY=-1SU'
-
-Restrictions code does not catch lack of DTEND or DURATION
-
-For some value types, if there illegal characters in the value ( like
-4.56 in an integer value), the parser will output the characters to
-stdout.
-
-Check all uses of strcpy and sprinf for buffer overflows
-
-Make the mime parsing code in sspm grow the list of parts as needed,
-rather than having a hard limit.
-
-in sspm.c, and unrecognized content-transfer-encoding values must
-force a content type of application/octet-stream.
diff --git a/libical/autogen.sh b/libical/autogen.sh
deleted file mode 100755
index ef41bbe86e..0000000000
--- a/libical/autogen.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-ORIGDIR=`pwd`
-cd $srcdir
-PROJECT=libical
-TEST_TYPE=-d
-FILE=src
-
-DIE=0
-
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have autoconf installed to compile $PROJECT."
- echo "Download the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have automake installed to compile $PROJECT."
- echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-}
-
-if test "$DIE" -eq 1; then
- exit 1
-fi
-
-test $TEST_TYPE $FILE || {
- echo "You must run this script in the top-level $PROJECT directory"
- exit 1
-}
-
-if test -z "$*"; then
- echo "I am going to run ./configure with no arguments - if you wish "
- echo "to pass any to it, please specify them on the $0 command line."
-fi
-
-case $CC in
-*xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;;
-esac
-
-aclocal $ACLOCAL_FLAGS
-
-# optionally feature autoheader
-(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader
-
-automake -a $am_opt
-autoconf
-cd $ORIGDIR
-
-$srcdir/configure "$@"
-
-echo
-echo "Now type 'make' to compile $PROJECT."
diff --git a/libical/configure.in b/libical/configure.in
deleted file mode 100644
index 84c4914ccc..0000000000
--- a/libical/configure.in
+++ /dev/null
@@ -1,307 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(src)
-AC_CANONICAL_SYSTEM
-
-AM_INIT_AUTOMAKE(libical,0.24)
-AM_CONFIG_HEADER(config.h)
-
-dnl Set the aux dir to .. (the toplevel evolution directory) so ylwrap
-dnl is found in the correct directory for automake >= 1.5
-AC_CONFIG_AUX_DIR(..)
-
-dnl Subst in evolution's private directories
-AC_SUBST(privlibdir)
-AC_SUBST(privincludedir)
-AC_SUBST(privdatadir)
-
-dnl Initialize maintainer mode
-AM_MAINTAINER_MODE
-
-dnl Checks for programs.
-AC_PROG_YACC
-AC_PROG_CC
-AC_PROG_CXX
-AM_PROG_LEX
-AC_PROG_LN_S
-AC_PROG_INSTALL
-
-dnl Initialize libtool
-AM_DISABLE_STATIC
-AM_PROG_LIBTOOL
-
-AC_SUBST(AR)
-
-dnl *** bdb4 support
-
-AC_MSG_CHECKING(for Berkeley DB4 support)
-AC_ARG_WITH(bdb4, [ --with-bdb4 Add support for Berkeley DB 4.0],
-[case $with_bdb4 in
- yes) AC_MSG_RESULT(yes)
- AC_MSG_RESULT( Adding Berkeley DB support)
- WITH_BDB4="yes"
- ;;
- no) AC_MSG_RESULT(no)
- ;;
- *) AC_MSG_RESULT(no)
- AC_MSG_RESULT(Ignoring unknown argument to --with-bdb4: $with_bdb4)
- ;;
-esac],
-AC_MSG_RESULT(no))
-
-if test x$WITH_BDB4 = xyes; then
- AC_ARG_WITH(bdb4_dir, [ --with-bdb4-dir=PATH Use PATH as location of BerkeleyDB 4.0],
- BDB_DIR=$withval,
- BDB_DIR=/usr/local/BerkeleyDB.4.0
- )
-
- AC_MSG_CHECKING(for Berkeley DB include files)
- if test -f $BDB_DIR/include/db.h; then
- BDB_DIR_INCLUDE=$BDB_DIR/include
- AC_MSG_RESULT($BDB_DIR_INCLUDE)
- else
- if test -f $BDB_DIR/include/db4/db.h; then
- BDB_DIR_INCLUDE=$BDB_DIR/include/db4
- AC_MSG_RESULT($BDB_DIR_INCLUDE)
- else
- WITH_BDB4="no"
- AC_MSG_RESULT(not found!)
- fi
- fi
-
- AC_MSG_CHECKING(for Berkeley DB libraries)
- if test -f $BDB_DIR/lib/libdb-4.0.la; then
- BDB_DIR_LIB=$BDB_DIR/lib
- BDB_LIB=libdb-4.0.la
- AC_MSG_RESULT($BDB_DIR_LIB $BDB_LIB)
- else
- if test -f $BDB_DIR/lib/libdb4.la; then
- BDB_DIR_LIB=$BDB_DIR/lib
- BDB_LIB=libdb4.la
- AC_MSG_RESULT($BDB_DIR_LIB $BDB_LIB)
- else
- WITH_BDB4="no"
- AC_MSG_RESULT(not found!)
- fi
- fi
-
- AC_SUBST(BDB_DIR)
- AC_SUBST(BDB_DIR_INCLUDE)
- AC_SUBST(BDB_DIR_LIB)
- AC_SUBST(BDB_LIB)
- dnl 4.0 is required...
- BDB_VERSION="4.0"
- AC_SUBST(BDB_VERSION)
-fi
-AM_CONDITIONAL(WITH_BDB4, test x$WITH_BDB4 = xyes)
-
-dnl *** Yacc/Bison support
-
-if test "x$USE_MAINTAINER_MODE" == xyes; then
- DEV="yes"
- AC_MSG_RESULT([Setting up for development: -Wall, flex, bison])
-fi
-
-AM_CONDITIONAL(DEV, test x$DEV = xyes)
-
-AC_CHECK_PROGS(AR, ar aal, ar)
-AC_CHECK_PROGS(PERL, perl5 perl)
-
-AC_MSG_CHECKING(whether to define _REENTRANT)
-AC_ARG_ENABLE(reentrant, [ --enable-reentrant define _REENTRANT to enable reentrant system calls],
-[ case "${enableval}" in
- no)
- AC_MSG_RESULT(no)
- ac_cv_reentrant=no
- ;;
- *)
- AC_MSG_RESULT(yes)
- AC_DEFINE(ICAL_REENTRANT, ,[Define if we want _REENTRANT]) [CFLAGS="$CFLAGS -D_REENTRANT"]
- ac_cv_reentrant=yes
- ;;
- esac ],
- AC_MSG_RESULT(no)
-)
-
-dnl *** libicalcap support (experimental)
-
-AC_MSG_CHECKING(for CAP/BEEP support)
-AC_ARG_WITH(libicalcap, [ --with-libicalcap Add support for CAP/BEEP support],
-[case $with_libicalcap in
- yes) AC_MSG_RESULT(yes)
- AC_MSG_RESULT( Adding CAP/BEEP support)
- WITH_CAP="yes"
- ;;
- no) AC_MSG_RESULT(no)
- ;;
- *) AC_MSG_RESULT(no)
- AC_MSG_RESULT(Ignoring unknown argument to --with-libicalcap: $with_libicalcap)
- ;;
-esac],
-AC_MSG_RESULT(no))
-
-if test x$WITH_CAP = xyes; then
- AC_MSG_CHECKING(for CAP/BEEP files)
- PKG_CHECK_MODULES(RRCAP, roadrunner >= 0.9 \
- rrtls >= 0.9 \
- rrsasl >= 0.9 \
- rrcap >= 0.9)
-
- AC_SUBST(RRCAP_CFLAGS)
- AC_SUBST(RRCAP_LIBS)
-fi
-AM_CONDITIONAL(WITH_CAP, test x$WITH_CAP = xyes)
-
-dnl **************************************************
-dnl test/regression.c (and maybe others) needs this defined
-dnl **************************************************
-AC_DEFINE(ICAL_ERRORS_ARE_FATAL,0,[Define to make icalerror_* calls abort instead of internally signalling an error])
-AC_DEFINE(NO_WARN_DEPRECATED,1,[Define to 1 if you DO NOT WANT to see deprecated messages])
-AC_DEFINE(NO_WARN_ICAL_MALFORMEDDATA_ERROR_HACK,1,[Define to 1 if you DO NO WANT to see the warning messages related to ICAL_MALFORMEDDATA_ERROR and parsing .ics zoneinfo files])
-
-AC_DEFINE(ICAL_UNIX_NEWLINE,1,[Define to terminate lines with "\n" instead of "\r\n"])
-dnl AC_DEFINE(ICAL_NO_EMPTY_ARRAY_DECL,1,[Define to 1 if your compile does not like lines like: struct something foo[]])
-
-dnl Checks for libraries.
-dnl Replace `main' with a function in -lical:
-dnl AC_CHECK_LIB(ical, main)
-
-dnl Check if this system can use pthreads
-dnl HACK to support FreeBSD 4.x pthread
-
-case "${host}" in
- *-*-freebsdelf4* )
- AC_MSG_RESULT(checking for pthread_create in -lpthread... -pthread (FreeBSD 4.x style))
- AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
- PTHREAD_LIBS=-pthread;;
-
- *)
- AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
- if test "x$have_pthread" = xyes; then
- AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
- PTHREAD_LIBS=-lpthread
- fi;;
-esac
-
-AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
-AC_SUBST(PTHREAD_LIBS)
-
-dnl Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS(assert.h ctype.h pthread.h stdint.h time.h sys/types.h unistd.h wctype.h)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
-AC_TYPE_MODE_T
-AC_CHECK_TYPE(intptr_t)
-AC_STRUCT_TM
-
-dnl Checks for library functions.
-AC_CHECK_FUNCS(gmtime_r isspace iswspace strdup snprintf)
-
-dnl **************************************************
-dnl * Check for C++
-dnl **************************************************
-
-AC_ARG_ENABLE(cxx,
-[ --enable-cxx Enable C++ bindings],,enable_cxx="no")
-AM_CONDITIONAL(WITH_CXX_BINDINGS, test x$enable_cxx = "xyes")
-
-dnl **************************************************
-dnl * Check for Java
-dnl **************************************************
-
-AC_ARG_ENABLE(java,
-[ --enable-java Enable Java bindings],,enable_java="no")
-if test "x$enable_java" = "xyes"; then
- AC_PATH_PROG(JAR, jar, /usr/local/bin/jar, /usr/local/bin:$PATH)
- AC_PATH_PROG(JAVA, java, /usr/local/bin/java, /usr/local/bin:$PATH)
- AC_PATH_PROG(JAVAC, javac, /usr/local/bin/javac, /usr/local/bin:$PATH)
- AC_PATH_PROG(JAVAH, javah, /usr/local/bin/javah, /usr/local/bin:$PATH)
- AC_SUBST(JAR)
- AC_SUBST(JAVA)
- AC_SUBST(JAVAC)
- AC_SUBST(JAVAH)
-
- dnl truly gross
-
- case "${host}" in
- *-*-solaris*) JAVA_PLATFORM="solaris" ;;
- *-*-linux*) JAVA_PLATFORM="linux" ;;
- *-*-freebsd*) JAVA_PLATFORM="bsd" ;;
- *-*-aix*) JAVA_PLATFORM="aix" ;;
- *-sequent-*) JAVA_PLATFORM="ptx" ;;
- *-*-hpux*) JAVA_PLATFORM="hpux" ;;
- *-*-irix*) JAVA_PLATFORM="irix" ;;
- *-*-os390*) JAVA_PLATFORM="os390" ;;
- *-*-os400*) JAVA_PLATFORM="os400" ;;
- *-apple-darwin*|*-apple-rhapsody*) JAVA_PLATFORM="darwin" ;;
- *) JAVA_PLATFORM="unknown" ;;
- esac
-
- AC_SUBST(JAVA_PLATFORM)
-fi
-
-AM_CONDITIONAL(WITH_JAVA, test x$enable_java = "xyes")
-
-dnl **************************************************
-dnl * Check for Python
-dnl **************************************************
-python_val=false
-AC_ARG_ENABLE(python,
-[ --enable-python Enable python bindings],,enable_python="no")
-
-if test "x$enable_python" = "xyes"; then
- python_val=true
-else
- python_val=false
-fi
-
-if test $python_val = true; then
-
- AC_CHECK_PROG(python_val, python, true, false)
- AC_CHECK_PROG(python_val, swig, true, false)
-
- PY_PREFIX=`python -c 'import sys ; print sys.prefix'`
- PY_EXEC_PREFIX=`python -c 'import sys ; print sys.exec_prefix'`
- changequote(<<, >>)dnl
- PY_VERSION=`python -c 'import sys ; print sys.version[0:3]'`
- changequote([, ])dnl
- if test -f $PY_PREFIX/include/python$PY_VERSION/Python.h; then
- PY_LIBS="python$PY_VERSION"
- PY_LIB_LOC="-L$PY_EXEC_PREFIX/lib/python$PY_VERSION/config"
- PY_CFLAGS="-I$PY_PREFIX/include/python$PY_VERSION"
- PY_MAKEFILE="$PY_EXEC_PREFIX/lib/python$PY_VERSION/config/Makefile"
- PY_LOCALMODLIBS=`sed -n -e 's/^LOCALMODLIBS=\(.*\)/\1/p' $PY_MAKEFILE`
- PY_BASEMODLIBS=`sed -n -e 's/^BASEMODLIBS=\(.*\)/\1/p' $PY_MAKEFILE`
- PY_OTHER_LIBS=`sed -n -e 's/^LIBS=\(.*\)/\1/p' $PY_MAKEFILE`
- PY_EXTRA_LIBS="$PY_LOCALMODLIBS $PY_BASEMODLIBS $PY_OTHER_LIBS"
- AC_SUBST(PY_LIBS)
- AC_SUBST(PY_LIB_LOC)
- AC_SUBST(PY_CFLAGS)
- AC_SUBST(PY_EXTRA_LIBS)
- else
- python_val=false
- fi
-fi
-AM_CONDITIONAL(WITH_PYTHON, test $python_val = true)
-
-AC_OUTPUT([
-Makefile
-design-data/Makefile
-doc/Makefile
-examples/Makefile
-scripts/Makefile
-src/Makefile
-src/libical/Makefile
-src/libical/icalversion.h
-src/libicalcap/Makefile
-src/libicalss/Makefile
-src/libicalvcal/Makefile
-src/python/Makefile
-src/java/Makefile
-src/test/Makefile
-test-data/Makefile
-zoneinfo/Makefile
-])
-
diff --git a/libical/design-data/.cvsignore b/libical/design-data/.cvsignore
deleted file mode 100644
index dc4caac801..0000000000
--- a/libical/design-data/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/design-data/Makefile.am b/libical/design-data/Makefile.am
deleted file mode 100644
index 8f27cd6ce0..0000000000
--- a/libical/design-data/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTRA_DIST =\
- properties.csv \
- parameters.csv \
- restrictions.csv \
- status.txt \
- value-types.csv
diff --git a/libical/design-data/components.txt b/libical/design-data/components.txt
deleted file mode 100644
index c4736e72b2..0000000000
--- a/libical/design-data/components.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-ANY
-VAGENDA
-VALARM
-VCALENDAR
-VCAR
-VCOMMAND
-VEVENT
-VFREEBUSY
-VJOURNAL
-VQUERY
-VSCHEDULE
-VTIMEZONE
-VTODO
-X
-XAUDIOALARM
-XDAYLIGHTSAVINGSTIME
-XDISPLAYALARM
-XEMAILALARM
-XLICINVALID
-XMIMEPART
-XPROCEDUREALARM
-XSTANDARDTIME
diff --git a/libical/design-data/param-c-types.txt b/libical/design-data/param-c-types.txt
deleted file mode 100644
index 3f690fa0dc..0000000000
--- a/libical/design-data/param-c-types.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-ALTREP const char*
-CN const char*
-CUTYPE icalparameter_cutype
-DELEGATED-FROM const char*
-DELEGATED-TO const char*
-DIR const char*
-ENCODING icalparameter_encoding
-FBTYPE icalparameter_fbtype
-FMTTYPE const char*
-LANGUAGE const char*
-MEMBER const char*
-PARTSTAT icalparameter_partstat
-RANGE icalparameter_range
-RELATED icalparameter_related
-RELTYPE icalparameter_reltype
-ROLE icalparameter_role
-RSVP int
-SENT-BY const char*
-TZID const char*
-VALUE icalparameter_value
-X const char*
-X-LIC-ERRORTYPE icalparameter_xlicerrortype
-X-LIC-COMPARETYPE icalparameter_xliccomparetype
diff --git a/libical/design-data/parameters.csv b/libical/design-data/parameters.csv
deleted file mode 100644
index d0a2ef9df6..0000000000
--- a/libical/design-data/parameters.csv
+++ /dev/null
@@ -1,33 +0,0 @@
-"#Name ","C Type","Enumeration Values"
-"ALTREP","const char*",
-"CN","const char*",
-"CUTYPE","icalparameter_cutype","INDIVIDUAL;GROUP;RESOURCE;ROOM;UNKNOWN"
-"DELEGATED-FROM","const char*",
-"DELEGATED-TO","const char*",
-"DIR","const char*",
-"ENCODING","icalparameter_encoding","8BIT;BASE64"
-"FBTYPE","icalparameter_fbtype","FREE;BUSY;BUSYUNAVAILABLE;BUSYTENTATIVE"
-"FMTTYPE","const char*",
-"LANGUAGE","const char*",
-"MEMBER","const char*",
-"PARTSTAT","icalparameter_partstat","NEEDS-ACTION;ACCEPTED;DECLINED;TENTATIVE;DELEGATED;COMPLETED;INPROCESS"
-"RANGE","icalparameter_range","THISANDPRIOR;THISANDFUTURE"
-"RELATED","icalparameter_related","START;END"
-"RELTYPE","icalparameter_reltype","PARENT;CHILD;SIBLING"
-"ROLE","icalparameter_role","CHAIR;REQ-PARTICIPANT;OPT-PARTICIPANT;NON-PARTICIPANT"
-"RSVP","icalparameter_rsvp","TRUE;FALSE"
-"SENT-BY","const char*",
-"TZID","const char*",
-"VALUE","icalparameter_value","BINARY;BOOLEAN;DATE;DURATION;FLOAT;INTEGER;PERIOD;RECUR;TEXT;URI;ERROR;DATE-TIME;UTC-OFFSET;CAL-ADDRESS"
-"X","const char*",
-"X-LIC-ERRORTYPE","icalparameter_xlicerrortype","COMPONENT-PARSE-ERROR;PROPERTY-PARSE-ERROR;PARAMETER-NAME-PARSE-ERROR;PARAMETER-VALUE-PARSE-ERROR;VALUE-PARSE-ERROR;INVALID-ITIP;UNKNOWN-VCAL-PROP-ERROR;MIME-PARSE-ERROR;VCAL-PROP-PARSE-ERROR"
-"X-LIC-COMPARETYPE","icalparameter_xliccomparetype","EQUAL;NOTEQUAL;LESS;GREATER;LESSEQUAL;GREATEREQUAL;REGEX;ISNULL;ISNOTNULL"
-"#CAP Parameters","Draft 8",
-"#this parameter should really be called ACTION, but this conflicts with the ACTION property"
-"ACTIONPARAM","icalparameter_action","ASK;ABORT"
-"ID","const char*",
-"ENABLE","icalparameter_enable","TRUE;FALSE"
-"LATENCY","const char*",
-"LOCAL","icalparameter_local","TRUE;FALSE"
-"LOCALIZE","const char*",
-"OPTIONS","const char*",
diff --git a/libical/design-data/params-in-prop.txt b/libical/design-data/params-in-prop.txt
deleted file mode 100644
index 863366312e..0000000000
--- a/libical/design-data/params-in-prop.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-ACTION VALUE X
-ATTACH FMTTYPE ENCODING VALUE X
-ATTENDEE CN CUTYPE DELEGATED-FROM DELEGATED-TO DIR LANGUAGE MEMBER PARTSTAT ROLE RSVP SENT-BY X
-CALSCALE X
-CATEGORIES LANGUAGE X
-CLASS X
-CMD ACTIONPARAM ID LATENCY LOCALIZE OPTIONS X
-COMMENT ALTREP LANGUAGE X
-COMPLETED X
-CONTACT ALTREP LANGUAGE X
-CREATED X
-DESCRIPTION ALTREP LANGUAGE X
-DTEND VALUE TZID X
-DTSTAMP X
-DTSTART VALUE TZID X
-DUE VALUE TZID X
-DURATION X
-EXDATE VALUE TZID X
-EXRULE X
-FREEBUSY FBTYPE X
-GEO X
-LAST-MODIFIED X
-LOCATION ALTREP LANGUAGE X
-METHOD X
-ORGANIZER CN DIR LANGUAGE SENT-BY X
-PERCENT-COMPLETE X
-PRIORITY X
-PRODID X
-RDATE VALUE TZID X
-RECURRENCE-ID VALUE RANGE TZID X
-RELATED-TO RELTYPE X
-REPEAT X
-REQUEST-STATUS LANGUAGE X
-RESOURCES ALTREP LANGUAGE X
-RRULE X
-SEQUENCE LOCAL X
-STATUS X
-SUMMARY ALTREP LANGUAGE X
-TRANSP X
-TRIGGER ENABLE VALUE RELATED X
-TZID X
-TZNAME LANGUAGE X
-TZOFFSETFROM X
-TZOFFSETTO X
-TZURL X
-UID X
-URL X
-VERSION X
-XPROP LANGUAGE X
-X-LIC-ERROR XLICEERRORTYPE X
-SCOPE X
-MAXRESULTS X
-MAXRESULTSSIZE X
-QUERY X
-QUERYNAME X
-TARGET X
-EXPAND X
diff --git a/libical/design-data/prop-to-value.txt b/libical/design-data/prop-to-value.txt
deleted file mode 100644
index a7d0c1f772..0000000000
--- a/libical/design-data/prop-to-value.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-CALSCALE TEXT
-METHOD METHOD # Non-std. RFC2445 specifies TEXT
-PRODID TEXT
-VERSION TEXT
-CATEGORIES TEXT
-CLASS TEXT
-COMMENT TEXT
-DESCRIPTION TEXT
-LOCATION TEXT
-PERCENT-COMPLETE INTEGER
-PRIORITY INTEGER
-RESOURCES TEXT
-STATUS STATUS
-SUMMARY TEXT
-COMPLETED DATE-TIME
-FREEBUSY PERIOD
-TRANSP TEXT
-TZNAME TEXT
-TZOFFSETFROM UTC-OFFSET
-TZOFFSETTO UTC-OFFSET
-TZURL URI
-TZID TEXT
-ATTENDEE CAL-ADDRESS
-CONTACT TEXT
-ORGANIZER CAL-ADDRESS
-RELATED-TO TEXT
-URL URI
-UID TEXT
-EXRULE RECUR
-RRULE RECUR
-ACTION TEXT
-REPEAT INTEGER
-CREATED DATE-TIME
-DTSTAMP DATE-TIME
-LAST-MODIFIED DATE-TIME
-SEQUENCE INTEGER
-X TEXT
-REQUEST-STATUS STRING
-ATTACH ATTACH # Non-std: URI or BINARY
-GEO GEO # Non-std: Two FLOATS
-DTEND DATE-TIME # Non-std: DATE-TIME or DATE
-DUE DATE-TIME # Non-std: DATE-TIME or DATE
-DTSTART DATE-TIME # Non-std: DATE-TIME or DATE
-RECURRENCE-ID DATE-TIME # Non-std: DATE-TIME or DATE
-EXDATE DATE-TIME # Non-std: DATE-TIME or DATE
-RDATE DATE-TIME-PERIOD # Non-std: DATE-TIME or DATE or PERIOD
-TRIGGER TRIGGER # Non-std: DURATION or DATE-TIME
-DURATION DURATION
-QUERY QUERY
-X-LIC-ERROR TEXT
-X-LIC-CLUSTERCOUNT INTEGER
-X-LIC-MIMECONTENTTYPE STRING
-X-LIC-MIMECHARSET STRING
-X-LIC-MIMEENCODING STRING
-X-LIC-MIMEOPTINFO STRING
-X-LIC-MIMECID STRING
-X-LIC-MIMEFILENAME STRING
diff --git a/libical/design-data/properties.csv b/libical/design-data/properties.csv
deleted file mode 100644
index 11f977ed3d..0000000000
--- a/libical/design-data/properties.csv
+++ /dev/null
@@ -1,108 +0,0 @@
-,,
-"#Property Name","libical Value type","iCalendar default value"
-"ACTION","ACTION","ACTION"
-"ATTACH","ATTACH","URI"
-"ATTENDEE","CAL-ADDRESS","CAL-ADDRESS"
-"CALSCALE","TEXT","TEXT"
-"CATEGORIES","TEXT","TEXT"
-"CLASS","CLASS","CLASS"
-"COMMENT","TEXT","TEXT"
-"COMPLETED","DATE-TIME","DATE-TIME"
-"CONTACT","TEXT","TEXT"
-"CREATED","DATE-TIME","DATE-TIME"
-"DESCRIPTION","TEXT","TEXT"
-"DTEND","DATE-TIME","DATE-TIME"
-"DTSTAMP","DATE-TIME","DATE-TIME"
-"DTSTART","DATE-TIME","DATE-TIME"
-"DUE","DATE-TIME","DATE-TIME"
-"DURATION","DURATION","DURATION"
-"EXDATE","DATE-TIME","DATE-TIME"
-"EXRULE","RECUR","RECUR"
-"FREEBUSY","PERIOD","PERIOD"
-"GEO","GEO","GEO"
-"LAST-MODIFIED","DATE-TIME","DATE-TIME"
-"LOCATION","TEXT","TEXT"
-"METHOD","METHOD","METHOD"
-"ORGANIZER","CAL-ADDRESS","CAL-ADDRESS"
-"PERCENT-COMPLETE","INTEGER","INTEGER"
-"PRIORITY","INTEGER","INTEGER"
-"PRODID","TEXT","TEXT"
-"RDATE","DATE-TIME-PERIOD","DATE-TIME"
-"RECURRENCE-ID","DATE-TIME","DATE-TIME"
-"RELATED-TO","TEXT","TEXT"
-"REPEAT","INTEGER","INTEGER"
-"REQUEST-STATUS","REQUEST-STATUS","REQUEST-STATUS"
-"RESOURCES","TEXT","TEXT"
-"RRULE","RECUR","RECUR"
-"SEQUENCE","INTEGER","INTEGER"
-"STATUS","STATUS","STATUS"
-"SUMMARY","TEXT","TEXT"
-"TRANSP","TRANSP","TRANSP"
-"TRIGGER","TRIGGER","DURATION"
-"TZID","TEXT","TEXT"
-"TZNAME","TEXT","TEXT"
-"TZOFFSETFROM","UTC-OFFSET","UTC-OFFSET"
-"TZOFFSETTO","UTC-OFFSET","UTC-OFFSET"
-"TZURL","URI","URI"
-"UID","TEXT","TEXT"
-"URL","URI","URI"
-"VERSION","TEXT","TEXT"
-"X","X","X"
-"MAXRESULTS","INTEGER","INTEGER"
-"MAXRESULTSSIZE","INTEGER","INTEGER"
-"QUERYNAME","TEXT","TEXT"
-"X-LIC-ERROR","TEXT","TEXT"
-"X-LIC-CLUSTERCOUNT","STRING","STRING"
-"X-LIC-MIMECONTENTTYPE","STRING","STRING"
-"X-LIC-MIMECHARSET","STRING","STRING"
-"X-LIC-MIMEENCODING","STRING","STRING"
-"X-LIC-MIMEOPTINFO","STRING","STRING"
-"X-LIC-MIMECID","STRING","STRING"
-"X-LIC-MIMEFILENAME","STRING","STRING"
-"X-LIC-CLASS","X-LIC-CLASS","X-LIC-CLASS"
-"ANY","NO","NO"
-"NO","NO","NO"
-"#CAP Properties",,
-,"FIXME","Should be BOOLEAN"
-"ALLOW-CONFLICT","TEXT","TEXT"
-"CALID","TEXT","TEXT"
-"CALMASTER","TEXT","TEXT"
-"CARID","TEXT","TEXT"
-"CMD","CMD","CMD"
-"CSID","URI","URI"
-"DECREED","TEXT","TEXT"
-"DEFAULT-CHARSET","TEXT","TEXT"
-"DEFAULT-LOCALE","TEXT","TEXT"
-"DEFAULT-TZID","TEXT","TEXT"
-"DEFAULT-VCARS","TEXT","TEXT"
-,"FIXME","Should be UPN-FILTER"
-"DENY","TEXT","TEXT"
-,"FIXME","Should be BOOLEAN"
-"EXPAND","INTEGER","INTEGER"
-,"FIXME","Should be UPN-FILTER"
-"GRANT","TEXT","TEXT"
-"MAXDATE","DATE-TIME","DATE-TIME"
-"MINDATE","DATE-TIME","DATE-TIME"
-"NAME","TEXT","TEXT"
-"OWNER","TEXT","TEXT"
-"PERMISSION","TEXT","TEXT"
-"QUERY","QUERY","QUERY"
-"QUERYID","TEXT","TEXT"
-"RELCALID","TEXT","TEXT"
-"RESTRICTION","QUERY","QUERY"
-"SCOPE","TEXT","TEXT"
-"TARGET","CAL-ADDRESS","CAL-ADDRESS"
-"#CAP Properties","These are only allowed in VREPLY",
-"CAP-VERSION","TEXT","TEXT"
-"CAR-LEVEL","CAR-LEVEL","CAR-LEVEL"
-"COMPONENTS","TEXT","TEXT"
-"STORES-EXPANDED","TEXT","TEXT"
-"DATE-MAX","DATE-TIME","DATE-TIME"
-"DATE-MIN","DATE-TIME","DATE-TIME"
-"ITIP-VERSION","TEXT","TEXT"
-"MAX-COMPONENT-SIZE","INTEGER","INTEGER"
-"MULTIPART","TEXT","TEXT"
-"QUERY-LEVEL","QUERY-LEVEL","QUERY-LEVEL"
-"RECUR-ACCEPTED","TEXT","TEXT"
-"RECUR-EXPAND","TEXT","TEXT"
-"RECUR-LIMIT","TEXT","TEXT"
diff --git a/libical/design-data/property-tokens.txt b/libical/design-data/property-tokens.txt
deleted file mode 100644
index f8a95861c4..0000000000
--- a/libical/design-data/property-tokens.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-8BIT
-ACCEPTED
-ADD
-AUDIO
-BASE64
-BINARY
-BOOLEAN
-BUSY
-BUSY-TENTATIVE
-BUSY-UNAVAILABLE
-CAL-ADDRESS
-CANCEL
-CANCELLED
-CHAIR
-CHILD
-COMPLETED
-CONFIDENTIAL
-CONFIRMED
-COUNTER
-DATE
-DATE-TIME
-DECLINECOUNTER
-DECLINED
-DELEGATED
-DISPLAY
-DRAFT
-DURATION
-EMAIL
-END
-FINAL
-FLOAT
-FREE
-GREGORIAN
-GROUP
-INDIVIDUAL
-IN-PROCESS
-INTEGER
-NEEDS-ACTION
-NON-PARTICIPANT
-OPAQUE
-OPT-PARTICIPANT
-PARENT
-PERIOD
-PRIVATE
-PROCEDURE
-PUBLIC
-PUBLISH
-RECUR
-REFRESH
-REPLY
-REQ-PARTICIPANT
-REQUEST
-RESOURCE
-ROOM
-SIBLING
-START
-TENTATIVE
-TEXT
-THISANDFUTURE
-THISANDPRIOR
-TIME
-TRANSPAENT
-UNKNOWN
-UTCOFFSET
-XNAME
diff --git a/libical/design-data/restrictions.csv b/libical/design-data/restrictions.csv
deleted file mode 100644
index bded850694..0000000000
--- a/libical/design-data/restrictions.csv
+++ /dev/null
@@ -1,1420 +0,0 @@
-# Method, Target component, Property, Sub-component, Restriction
-PUBLISH,VEVENT,NONE,NONE,ONEPLUS
-PUBLISH,VEVENT,DTSTAMP,NONE,ONE
-PUBLISH,VEVENT,DTSTART,NONE,ONE
-PUBLISH,VEVENT,ORGANIZER,NONE,ONE
-PUBLISH,VEVENT,SUMMARY,NONE,ONE
-PUBLISH,VEVENT,UID,NONE,ONE
-PUBLISH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-PUBLISH,VEVENT,SEQUENCE,NONE,ZEROORONE
-PUBLISH,VEVENT,ATTACH,NONE,ZEROPLUS
-PUBLISH,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-PUBLISH,VEVENT,CLASS,NONE,ZEROORONE
-PUBLISH,VEVENT,COMMENT,NONE,ZEROORONE
-PUBLISH,VEVENT,CONTACT,NONE,ZEROPLUS
-PUBLISH,VEVENT,CREATED,NONE,ZEROORONE
-PUBLISH,VEVENT,DESCRIPTION,NONE,ZEROORONE
-PUBLISH,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-PUBLISH,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-PUBLISH,VEVENT,EXDATE,NONE,ZEROPLUS
-PUBLISH,VEVENT,EXRULE,NONE,ZEROPLUS
-PUBLISH,VEVENT,GEO,NONE,ZEROORONE
-PUBLISH,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-PUBLISH,VEVENT,LOCATION,NONE,ZEROORONE
-PUBLISH,VEVENT,PRIORITY,NONE,ZEROORONE
-PUBLISH,VEVENT,RDATE,NONE,ZEROPLUS
-PUBLISH,VEVENT,RELATEDTO,NONE,ZEROPLUS
-PUBLISH,VEVENT,RESOURCES,NONE,ZEROORONE
-PUBLISH,VEVENT,RRULE,NONE,ZEROPLUS
-PUBLISH,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel
-PUBLISH,VEVENT,TRANSP,NONE,ZEROORONE
-PUBLISH,VEVENT,URL,NONE,ZEROORONE
-PUBLISH,VEVENT,X,NONE,ZEROPLUS
-PUBLISH,VEVENT,ATTENDEE,NONE,ZERO
-PUBLISH,VEVENT,REQUESTSTATUS,NONE,ZERO
-PUBLISH,VEVENT,NONE,VALARM,ZEROPLUS
-PUBLISH,VEVENT,NONE,VFREEBUSY,ZERO
-PUBLISH,VEVENT,NONE,VJOURNAL,ZERO
-PUBLISH,VEVENT,NONE,VTODO,ZERO
-PUBLISH,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref
-PUBLISH,VEVENT,NONE,X,ZEROPLUS
-PUBLISH,VEVENT,RELCALID,NONE,ZEROORONE
-REQUEST,VEVENT,NONE,NONE,ONEPLUS
-REQUEST,VEVENT,ATTENDEE,NONE,ONEPLUS
-REQUEST,VEVENT,DTSTAMP,NONE,ONE
-REQUEST,VEVENT,DTSTART,NONE,ONE
-REQUEST,VEVENT,ORGANIZER,NONE,ONE
-REQUEST,VEVENT,SEQUENCE,NONE,ZEROORONE
-REQUEST,VEVENT,SUMMARY,NONE,ONE
-REQUEST,VEVENT,UID,NONE,ONE
-REQUEST,VEVENT,ATTACH,NONE,ZEROPLUS
-REQUEST,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-REQUEST,VEVENT,CLASS,NONE,ZEROORONE
-REQUEST,VEVENT,COMMENT,NONE,ZEROORONE
-REQUEST,VEVENT,CONTACT,NONE,ZEROPLUS
-REQUEST,VEVENT,CREATED,NONE,ZEROORONE
-REQUEST,VEVENT,DESCRIPTION,NONE,ZEROORONE
-REQUEST,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-REQUEST,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-REQUEST,VEVENT,EXDATE,NONE,ZEROPLUS
-REQUEST,VEVENT,EXRULE,NONE,ZEROPLUS
-REQUEST,VEVENT,GEO,NONE,ZEROORONE
-REQUEST,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-REQUEST,VEVENT,LOCATION,NONE,ZEROORONE
-REQUEST,VEVENT,PRIORITY,NONE,ZEROORONE
-REQUEST,VEVENT,RDATE,NONE,ZEROPLUS
-REQUEST,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REQUEST,VEVENT,RELATEDTO,NONE,ZEROPLUS
-REQUEST,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS
-REQUEST,VEVENT,RESOURCES,NONE,ZEROORONE
-REQUEST,VEVENT,RRULE,NONE,ZEROPLUS
-REQUEST,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf
-REQUEST,VEVENT,TRANSP,NONE,ZEROORONE
-REQUEST,VEVENT,URL,NONE,ZEROORONE
-REQUEST,VEVENT,X,NONE,ZEROPLUS
-REQUEST,VEVENT,NONE,VALARM,ZEROPLUS
-REQUEST,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref
-REQUEST,VEVENT,NONE,X,ZEROPLUS
-REQUEST,VEVENT,NONE,VFREEBUSY,ZERO
-REQUEST,VEVENT,NONE,VJOURNAL,ZERO
-REQUEST,VEVENT,NONE,VTODO,ZERO
-REQUEST,VEVENT,RELCALID,NONE,ZEROORONE
-REPLY,VEVENT,NONE,NONE,ONEPLUS
-REPLY,VEVENT,ATTENDEE,NONE,ONE
-REPLY,VEVENT,DTSTAMP,NONE,ONE
-REPLY,VEVENT,ORGANIZER,NONE,ONE
-REPLY,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REPLY,VEVENT,UID,NONE,ONE
-REPLY,VEVENT,SEQUENCE,NONE,ZEROORONE
-REPLY,VEVENT,ATTACH,NONE,ZEROPLUS
-REPLY,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-REPLY,VEVENT,CLASS,NONE,ZEROORONE
-REPLY,VEVENT,COMMENT,NONE,ZEROORONE
-REPLY,VEVENT,CONTACT,NONE,ZEROPLUS
-REPLY,VEVENT,CREATED,NONE,ZEROORONE
-REPLY,VEVENT,DESCRIPTION,NONE,ZEROORONE
-REPLY,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-REPLY,VEVENT,DTSTART,NONE,ZEROORONE
-REPLY,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-REPLY,VEVENT,EXDATE,NONE,ZEROPLUS
-REPLY,VEVENT,EXRULE,NONE,ZEROPLUS
-REPLY,VEVENT,GEO,NONE,ZEROORONE
-REPLY,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-REPLY,VEVENT,LOCATION,NONE,ZEROORONE
-REPLY,VEVENT,PRIORITY,NONE,ZEROORONE
-REPLY,VEVENT,RDATE,NONE,ZEROPLUS
-REPLY,VEVENT,RELATEDTO,NONE,ZEROPLUS
-REPLY,VEVENT,RESOURCES,NONE,ZEROORONE
-REPLY,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS
-REPLY,VEVENT,RRULE,NONE,ZEROPLUS
-REPLY,VEVENT,STATUS,NONE,ZEROORONE
-REPLY,VEVENT,SUMMARY,NONE,ZEROORONE
-REPLY,VEVENT,TRANSP,NONE,ZEROORONE
-REPLY,VEVENT,URL,NONE,ZEROORONE
-REPLY,VEVENT,X,NONE,ZEROPLUS
-REPLY,VEVENT,NONE,VTIMEZONE,ZEROORONE,must_if_tz_ref
-REPLY,VEVENT,NONE,X,ZEROPLUS
-REPLY,VEVENT,NONE,VALARM,ZERO
-REPLY,VEVENT,NONE,VFREEBUSY,ZERO
-REPLY,VEVENT,NONE,VJOURNAL,ZERO
-REPLY,VEVENT,NONE,VTODO,ZERO
-REPLY,VEVENT,RELCALID,NONE,ZEROORONE
-ADD,VEVENT,NONE,NONE,ONE
-ADD,VEVENT,DTSTAMP,NONE,ONE
-ADD,VEVENT,DTSTART,NONE,ONE
-ADD,VEVENT,ORGANIZER,NONE,ONE
-ADD,VEVENT,SEQUENCE,NONE,ONE
-ADD,VEVENT,SUMMARY,NONE,ONE
-ADD,VEVENT,UID,NONE,ONE
-ADD,VEVENT,ATTACH,NONE,ZEROPLUS
-ADD,VEVENT,ATTENDEE,NONE,ZEROPLUS
-ADD,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-ADD,VEVENT,CLASS,NONE,ZEROORONE
-ADD,VEVENT,COMMENT,NONE,ZEROORONE
-ADD,VEVENT,CONTACT,NONE,ZEROPLUS
-ADD,VEVENT,CREATED,NONE,ZEROORONE
-ADD,VEVENT,DESCRIPTION,NONE,ZEROORONE
-ADD,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-ADD,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-ADD,VEVENT,EXDATE,NONE,ZEROPLUS
-ADD,VEVENT,EXRULE,NONE,ZEROPLUS
-ADD,VEVENT,GEO,NONE,ZEROORONE
-ADD,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-ADD,VEVENT,LOCATION,NONE,ZEROORONE
-ADD,VEVENT,PRIORITY,NONE,ZEROORONE
-ADD,VEVENT,RDATE,NONE,ZEROPLUS
-ADD,VEVENT,RELATEDTO,NONE,ZEROPLUS
-ADD,VEVENT,RESOURCES,NONE,ZEROORONE
-ADD,VEVENT,RRULE,NONE,ZEROPLUS
-ADD,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf
-ADD,VEVENT,TRANSP,NONE,ZEROORONE
-ADD,VEVENT,URL,NONE,ZEROORONE
-ADD,VEVENT,X,NONE,ZEROPLUS
-ADD,VEVENT,RECURRENCEID,NONE,ZERO,must_be_recurring
-ADD,VEVENT,REQUESTSTATUS,NONE,ZERO
-ADD,VEVENT,NONE,VALARM,ZEROPLUS
-ADD,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref
-ADD,VEVENT,NONE,X,ZEROPLUS
-ADD,VEVENT,NONE,VFREEBUSY,ZERO
-ADD,VEVENT,NONE,VTODO,ZERO
-ADD,VEVENT,NONE,VJOURNAL,ZERO
-ADD,VEVENT,RELCALID,NONE,ZEROORONE
-CANCEL,VEVENT,NONE,NONE,ONEPLUS
-CANCEL,VEVENT,ATTENDEE,NONE,ZEROPLUS
-CANCEL,VEVENT,DTSTAMP,NONE,ONE
-CANCEL,VEVENT,ORGANIZER,NONE,ONE
-CANCEL,VEVENT,SEQUENCE,NONE,ONE
-CANCEL,VEVENT,UID,NONE,ONE
-CANCEL,VEVENT,COMMENT,NONE,ZEROORONE
-CANCEL,VEVENT,ATTACH,NONE,ZEROPLUS
-CANCEL,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-CANCEL,VEVENT,CLASS,NONE,ZEROORONE
-CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS
-CANCEL,VEVENT,CREATED,NONE,ZEROORONE
-CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE
-CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE ,no_duration
-CANCEL,VEVENT,DTSTART,NONE,ZEROORONE
-CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS
-CANCEL,VEVENT,EXRULE,NONE,ZEROPLUS
-CANCEL,VEVENT,GEO,NONE,ZEROORONE
-CANCEL,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-CANCEL,VEVENT,LOCATION,NONE,ZEROORONE
-CANCEL,VEVENT,PRIORITY,NONE,ZEROORONE
-CANCEL,VEVENT,RDATE,NONE,ZEROPLUS
-CANCEL,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS
-CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE
-CANCEL,VEVENT,RRULE,NONE,ZEROPLUS
-CANCEL,VEVENT,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee
-CANCEL,VEVENT,SUMMARY,NONE,ZEROORONE
-CANCEL,VEVENT,TRANSP,NONE,ZEROORONE
-CANCEL,VEVENT,URL,NONE,ZEROORONE
-CANCEL,VEVENT,X,NONE,ZEROPLUS
-CANCEL,VEVENT,REQUESTSTATUS,NONE,ZERO
-CANCEL,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref
-CANCEL,VEVENT,NONE,X,ZEROPLUS
-CANCEL,VEVENT,NONE,VTODO,ZERO
-CANCEL,VEVENT,NONE,VJOURNAL,ZERO
-CANCEL,VEVENT,NONE,VFREEBUSY,ZERO
-CANCEL,VEVENT,NONE,VALARM,ZERO
-CANCEL,VEVENT,RELCALID,NONE,ZEROORONE
-REFRESH,VEVENT,NONE,NONE,ONE
-REFRESH,VEVENT,ATTENDEE,NONE,ONE
-REFRESH,VEVENT,DTSTAMP,NONE,ONE
-REFRESH,VEVENT,ORGANIZER,NONE,ONE
-REFRESH,VEVENT,UID,NONE,ONE
-REFRESH,VEVENT,COMMENT,NONE,ZEROORONE
-REFRESH,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REFRESH,VEVENT,X,NONE,ZEROPLUS
-REFRESH,VEVENT,ATTACH,NONE,ZERO
-REFRESH,VEVENT,CATEGORIES,NONE,ZERO
-REFRESH,VEVENT,CLASS,NONE,ZERO
-REFRESH,VEVENT,CONTACT,NONE,ZERO
-REFRESH,VEVENT,CREATED,NONE,ZERO
-REFRESH,VEVENT,DESCRIPTION,NONE,ZERO
-REFRESH,VEVENT,DTEND,NONE,ZERO
-REFRESH,VEVENT,DTSTART,NONE,ZERO
-REFRESH,VEVENT,DURATION,NONE,ZERO
-REFRESH,VEVENT,EXDATE,NONE,ZERO
-REFRESH,VEVENT,EXRULE,NONE,ZERO
-REFRESH,VEVENT,GEO,NONE,ZERO
-REFRESH,VEVENT,LASTMODIFIED,NONE,ZERO
-REFRESH,VEVENT,LOCATION,NONE,ZERO
-REFRESH,VEVENT,PRIORITY,NONE,ZERO
-REFRESH,VEVENT,RDATE,NONE,ZERO
-REFRESH,VEVENT,RELATEDTO,NONE,ZERO
-REFRESH,VEVENT,REQUESTSTATUS,NONE,ZERO
-REFRESH,VEVENT,RESOURCES,NONE,ZERO
-REFRESH,VEVENT,RRULE,NONE,ZERO
-REFRESH,VEVENT,SEQUENCE,NONE,ZERO
-REFRESH,VEVENT,STATUS,NONE,ZERO
-REFRESH,VEVENT,SUMMARY,NONE,ZERO
-REFRESH,VEVENT,TRANSP,NONE,ZERO
-REFRESH,VEVENT,URL,NONE,ZERO
-REFRESH,VEVENT,NONE,X,ZEROPLUS
-REFRESH,VEVENT,NONE,VTODO,ZERO
-REFRESH,VEVENT,NONE,VJOURNAL,ZERO
-REFRESH,VEVENT,NONE,VFREEBUSY,ZERO
-REFRESH,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref
-REFRESH,VEVENT,NONE,VALARM,ZERO
-REFRESH,VEVENT,RELCALID,NONE,ZEROORONE
-COUNTER,VEVENT,NONE,NONE,ONE
-COUNTER,VEVENT,DTSTAMP,NONE,ONE
-COUNTER,VEVENT,DTSTART,NONE,ONE
-COUNTER,VEVENT,ORGANIZER,NONE,ONE
-COUNTER,VEVENT,SEQUENCE,NONE,ONE
-COUNTER,VEVENT,SUMMARY,NONE,ONE
-COUNTER,VEVENT,UID,NONE,ONE
-COUNTER,VEVENT,ATTACH,NONE,ZEROPLUS
-COUNTER,VEVENT,ATTENDEE,NONE,ZEROPLUS
-COUNTER,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard
-COUNTER,VEVENT,CLASS,NONE,ZEROORONE
-COUNTER,VEVENT,COMMENT,NONE,ZEROORONE
-COUNTER,VEVENT,CONTACT,NONE,ZEROPLUS
-COUNTER,VEVENT,CREATED,NONE,ZEROORONE
-COUNTER,VEVENT,DESCRIPTION,NONE,ZEROORONE
-COUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-COUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-COUNTER,VEVENT,EXDATE,NONE,ZEROPLUS
-COUNTER,VEVENT,EXRULE,NONE,ZEROPLUS
-COUNTER,VEVENT,GEO,NONE,ZEROORONE
-COUNTER,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-COUNTER,VEVENT,LOCATION,NONE,ZEROORONE
-COUNTER,VEVENT,PRIORITY,NONE,ZEROORONE
-COUNTER,VEVENT,RDATE,NONE,ZEROPLUS
-COUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-COUNTER,VEVENT,RELATEDTO,NONE,ZEROPLUS
-COUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS
-COUNTER,VEVENT,RESOURCES,NONE,ZEROORONE
-COUNTER,VEVENT,RRULE,NONE,ZEROPLUS
-COUNTER,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel
-COUNTER,VEVENT,TRANSP,NONE,ZEROORONE
-COUNTER,VEVENT,URL,NONE,ZEROORONE
-COUNTER,VEVENT,X,NONE,ZEROPLUS
-COUNTER,VEVENT,NONE,VALARM,ZEROPLUS
-COUNTER,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref
-COUNTER,VEVENT,NONE,X,ZEROPLUS
-COUNTER,VEVENT,NONE,VTODO,ZERO
-COUNTER,VEVENT,NONE,VJOURNAL,ZERO
-COUNTER,VEVENT,NONE,VFREEBUSY,ZERO
-COUNTER,VEVENT,RELCALID,NONE,ZEROORONE
-DECLINECOUNTER,VEVENT,NONE,NONE,ONE
-DECLINECOUNTER,VEVENT,DTSTAMP,NONE,ONE
-DECLINECOUNTER,VEVENT,ORGANIZER,NONE,ONE
-DECLINECOUNTER,VEVENT,UID,NONE,ONE
-DECLINECOUNTER,VEVENT,COMMENT,NONE,ZEROORONE
-DECLINECOUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-DECLINECOUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS
-DECLINECOUNTER,VEVENT,SEQUENCE,NONE,ZERO
-DECLINECOUNTER,VEVENT,X,NONE,ZEROPLUS
-DECLINECOUNTER,VEVENT,ATTACH,NONE,ZERO
-DECLINECOUNTER,VEVENT,ATTENDEE,NONE,ZERO
-DECLINECOUNTER,VEVENT,CATEGORIES,NONE,ZERO
-DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO
-DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO
-DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO
-DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO
-DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO
-DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO
-DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO
-DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO
-DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO
-DECLINECOUNTER,VEVENT,GEO,NONE,ZERO
-DECLINECOUNTER,VEVENT,LASTMODIFIED,NONE,ZERO
-DECLINECOUNTER,VEVENT,LOCATION,NONE,ZERO
-DECLINECOUNTER,VEVENT,PRIORITY,NONE,ZERO
-DECLINECOUNTER,VEVENT,RDATE,NONE,ZERO
-DECLINECOUNTER,VEVENT,RELATEDTO,NONE,ZERO
-DECLINECOUNTER,VEVENT,RESOURCES,NONE,ZERO
-DECLINECOUNTER,VEVENT,RRULE,NONE,ZERO
-DECLINECOUNTER,VEVENT,STATUS,NONE,ZERO
-DECLINECOUNTER,VEVENT,SUMMARY,NONE,ZERO
-DECLINECOUNTER,VEVENT,TRANSP,NONE,ZERO
-DECLINECOUNTER,VEVENT,URL,NONE,ZERO
-DECLINECOUNTER,VEVENT,NONE,X,ZEROPLUS
-DECLINECOUNTER,VEVENT,NONE,VTODO,ZERO
-DECLINECOUNTER,VEVENT,NONE,VJOURNAL,ZERO
-DECLINECOUNTER,VEVENT,NONE,VFREEBUSY,ZERO
-DECLINECOUNTER,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref
-DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO
-DECLINECOUNTER,VEVENT,RELCALID,NONE,ZEROORONE
-PUBLISH,VFREEBUSY,NONE,NONE,ONEPLUS
-PUBLISH,VFREEBUSY,DTSTAMP,NONE,ONE
-PUBLISH,VFREEBUSY,DTSTART,NONE,ONE
-PUBLISH,VFREEBUSY,DTEND,NONE,ONE
-PUBLISH,VFREEBUSY,FREEBUSY,NONE,ONEPLUS
-PUBLISH,VFREEBUSY,ORGANIZER,NONE,ONE
-PUBLISH,VFREEBUSY,COMMENT,NONE,ZEROORONE
-PUBLISH,VFREEBUSY,CONTACT,NONE,ZEROPLUS
-PUBLISH,VFREEBUSY,X,NONE,ZEROPLUS
-PUBLISH,VFREEBUSY,URL,NONE,ZEROORONE
-PUBLISH,VFREEBUSY,ATTENDEE,NONE,ZERO
-PUBLISH,VFREEBUSY,DURATION,NONE,ZERO
-PUBLISH,VFREEBUSY,REQUESTSTATUS,NONE,ZERO
-PUBLISH,VFREEBUSY,UID,NONE,ZERO
-PUBLISH,VFREEBUSY,NONE,X,ZEROPLUS
-PUBLISH,VFREEBUSY,NONE,VEVENT,ZERO
-PUBLISH,VFREEBUSY,NONE,VTODO,ZERO
-PUBLISH,VFREEBUSY,NONE,VJOURNAL,ZERO
-PUBLISH,VFREEBUSY,NONE,VTIMEZONE,ZERO,must_if_tz_ref
-PUBLISH,VFREEBUSY,NONE,VALARM,ZERO
-REQUEST,VFREEBUSY,NONE,NONE,ONE
-REQUEST,VFREEBUSY,ATTENDEE,NONE,ONEPLUS
-REQUEST,VFREEBUSY,DTEND,NONE,ONE
-REQUEST,VFREEBUSY,DTSTAMP,NONE,ONE
-REQUEST,VFREEBUSY,DTSTART,NONE,ONE
-REQUEST,VFREEBUSY,ORGANIZER,NONE,ONE
-REQUEST,VFREEBUSY,UID,NONE,ONE
-REQUEST,VFREEBUSY,COMMENT,NONE,ZEROORONE
-REQUEST,VFREEBUSY,CONTACT,NONE,ZEROPLUS
-REQUEST,VFREEBUSY,X,NONE,ZEROPLUS
-REQUEST,VFREEBUSY,FREEBUSY,NONE,ZERO
-REQUEST,VFREEBUSY,DURATION,NONE,ZERO
-REQUEST,VFREEBUSY,REQUESTSTATUS,NONE,ZERO
-REQUEST,VFREEBUSY,URL,NONE,ZERO
-REQUEST,VFREEBUSY,NONE,X,ZEROPLUS
-REQUEST,VFREEBUSY,NONE,VALARM,ZERO
-REQUEST,VFREEBUSY,NONE,VEVENT,ZERO
-REQUEST,VFREEBUSY,NONE,VTODO,ZERO
-REQUEST,VFREEBUSY,NONE,VJOURNAL,ZERO
-REQUEST,VFREEBUSY,NONE,VTIMEZONE,ZERO
-REPLY,VFREEBUSY,NONE,NONE,ONE
-REPLY,VFREEBUSY,ATTENDEE,NONE,ONE
-REPLY,VFREEBUSY,DTSTAMP,NONE,ONE
-REPLY,VFREEBUSY,DTEND,NONE,ONE
-REPLY,VFREEBUSY,DTSTART,NONE,ONE
-REPLY,VFREEBUSY,FREEBUSY,NONE,ONEPLUS
-REPLY,VFREEBUSY,ORGANIZER,NONE,ONE
-REPLY,VFREEBUSY,UID,NONE,ONE
-REPLY,VFREEBUSY,COMMENT,NONE,ZEROORONE
-REPLY,VFREEBUSY,CONTACT,NONE,ZEROPLUS
-REPLY,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS
-REPLY,VFREEBUSY,URL,NONE,ZEROORONE
-REPLY,VFREEBUSY,X,NONE,ZEROPLUS
-REPLY,VFREEBUSY,DURATION,NONE,ZERO
-REPLY,VFREEBUSY,SEQUENCE,NONE,ZERO
-REPLY,VFREEBUSY,NONE,X,ZEROPLUS
-REPLY,VFREEBUSY,NONE,VALARM,ZERO
-REPLY,VFREEBUSY,NONE,VEVENT,ZERO
-REPLY,VFREEBUSY,NONE,VTODO,ZERO
-REPLY,VFREEBUSY,NONE,VJOURNAL,ZERO
-REPLY,VFREEBUSY,NONE,VTIMEZONE,ZERO
-PUBLISH,VTODO,NONE,NONE,ONEPLUS
-PUBLISH,VTODO,DTSTAMP,NONE,ONE
-PUBLISH,VTODO,DTSTART,NONE,ONE
-PUBLISH,VTODO,ORGANIZER,NONE,ONE
-PUBLISH,VTODO,PRIORITY,NONE,ONE
-PUBLISH,VTODO,SEQUENCE,NONE,ZEROORONE
-PUBLISH,VTODO,SUMMARY,NONE,ONE
-PUBLISH,VTODO,UID,NONE,ONE
-PUBLISH,VTODO,ATTACH,NONE,ZEROPLUS
-PUBLISH,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard
-PUBLISH,VTODO,CLASS,NONE,ZEROORONE
-PUBLISH,VTODO,COMMENT,NONE,ZEROORONE
-PUBLISH,VTODO,CONTACT,NONE,ZEROPLUS
-PUBLISH,VTODO,CREATED,NONE,ZEROORONE
-PUBLISH,VTODO,DESCRIPTION,NONE,ZEROORONE
-PUBLISH,VTODO,DUE,NONE,ZEROORONE
-PUBLISH,VTODO,DURATION,NONE,ZEROORONE
-PUBLISH,VTODO,EXDATE,NONE,ZEROPLUS
-PUBLISH,VTODO,EXRULE,NONE,ZEROPLUS
-PUBLISH,VTODO,GEO,NONE,ZEROORONE
-PUBLISH,VTODO,LASTMODIFIED,NONE,ZEROORONE
-PUBLISH,VTODO,LOCATION,NONE,ZEROORONE
-PUBLISH,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-PUBLISH,VTODO,RDATE,NONE,ZEROPLUS
-PUBLISH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-PUBLISH,VTODO,RELATEDTO,NONE,ZEROPLUS
-PUBLISH,VTODO,RESOURCES,NONE,ZEROORONE
-PUBLISH,VTODO,RRULE,NONE,ZEROPLUS
-PUBLISH,VTODO,STATUS,NONE,ZEROORONE
-PUBLISH,VTODO,URL,NONE,ZEROORONE
-PUBLISH,VTODO,X,NONE,ZEROPLUS
-PUBLISH,VTODO,ATTENDEE,NONE,ZERO
-PUBLISH,VTODO,REQUESTSTATUS,NONE,ZERO
-PUBLISH,VTODO,NONE,VTIMEZONE,ZEROPLUS
-PUBLISH,VTODO,NONE,VALARM,ZEROPLUS
-PUBLISH,VTODO,NONE,X,ZEROPLUS
-PUBLISH,VTODO,NONE,VFREEBUSY,ZERO
-PUBLISH,VTODO,NONE,VEVENT,ZERO
-PUBLISH,VTODO,NONE,VJOURNAL,ZERO
-PUBLISH,VTODO,RELCALID,NONE,ZEROORONE
-REQUEST,VTODO,NONE,NONE,ONEPLUS
-REQUEST,VTODO,ATTENDEE,NONE,ONEPLUS
-REQUEST,VTODO,DTSTAMP,NONE,ONE
-REQUEST,VTODO,DTSTART,NONE,ONE
-REQUEST,VTODO,ORGANIZER,NONE,ONE
-REQUEST,VTODO,PRIORITY,NONE,ONE
-REQUEST,VTODO,SEQUENCE,NONE,ZEROORONE
-REQUEST,VTODO,SUMMARY,NONE,ONE
-REQUEST,VTODO,UID,NONE,ONE
-REQUEST,VTODO,ATTACH,NONE,ZEROPLUS
-REQUEST,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard
-REQUEST,VTODO,CLASS,NONE,ZEROORONE
-REQUEST,VTODO,COMMENT,NONE,ZEROORONE
-REQUEST,VTODO,CONTACT,NONE,ZEROPLUS
-REQUEST,VTODO,CREATED,NONE,ZEROORONE
-REQUEST,VTODO,DESCRIPTION,NONE,ZEROORONE
-REQUEST,VTODO,DUE,NONE,ZEROORONE
-REQUEST,VTODO,DURATION,NONE,ZEROORONE
-REQUEST,VTODO,EXDATE,NONE,ZEROPLUS
-REQUEST,VTODO,EXRULE,NONE,ZEROPLUS
-REQUEST,VTODO,GEO,NONE,ZEROORONE
-REQUEST,VTODO,LASTMODIFIED,NONE,ZEROORONE
-REQUEST,VTODO,LOCATION,NONE,ZEROORONE
-REQUEST,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-REQUEST,VTODO,RDATE,NONE,ZEROPLUS
-REQUEST,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS
-REQUEST,VTODO,RESOURCES,NONE,ZEROORONE
-REQUEST,VTODO,RRULE,NONE,ZEROPLUS
-REQUEST,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process
-REQUEST,VTODO,URL,NONE,ZEROORONE
-REQUEST,VTODO,X,NONE,ZEROPLUS
-REQUEST,VTODO,REQUESTSTATUS,NONE,ZERO
-REQUEST,VTODO,NONE,VALARM,ZEROPLUS
-REQUEST,VTODO,NONE,VTIMEZONE,ZEROPLUS
-REQUEST,VTODO,NONE,X,ZEROPLUS
-REQUEST,VTODO,NONE,VEVENT,ZERO
-REQUEST,VTODO,NONE,VFREEBUSY,ZERO
-REQUEST,VTODO,NONE,VJOURNAL,ZERO
-REQUEST,VTODO,RELCALID,NONE,ZEROORONE
-REPLY,VTODO,NONE,NONE,ONEPLUS
-REPLY,VTODO,ATTENDEE,NONE,ONEPLUS
-REPLY,VTODO,DTSTAMP,NONE,ONE
-REPLY,VTODO,ORGANIZER,NONE,ONE
-REPLY,VTODO,REQUESTSTATUS,NONE,ONEPLUS
-REPLY,VTODO,UID,NONE,ONE
-REPLY,VTODO,ATTACH,NONE,ZEROPLUS
-REPLY,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard
-REPLY,VTODO,CLASS,NONE,ZEROORONE
-REPLY,VTODO,COMMENT,NONE,ZEROORONE
-REPLY,VTODO,CONTACT,NONE,ZEROPLUS
-REPLY,VTODO,CREATED,NONE,ZEROORONE
-REPLY,VTODO,DESCRIPTION,NONE,ZEROORONE
-REPLY,VTODO,DTSTART,NONE,ZEROORONE
-REPLY,VTODO,DUE,NONE,ZEROORONE
-REPLY,VTODO,DURATION,NONE,ZEROORONE
-REPLY,VTODO,EXDATE,NONE,ZEROPLUS
-REPLY,VTODO,EXRULE,NONE,ZEROPLUS
-REPLY,VTODO,GEO,NONE,ZEROORONE
-REPLY,VTODO,LASTMODIFIED,NONE,ZEROORONE
-REPLY,VTODO,LOCATION,NONE,ZEROORONE
-REPLY,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-REPLY,VTODO,PRIORITY,NONE,ZEROORONE
-REPLY,VTODO,RDATE,NONE,ZEROPLUS
-REPLY,VTODO,RELATEDTO,NONE,ZEROPLUS
-REPLY,VTODO,RESOURCES,NONE,ZEROORONE
-REPLY,VTODO,RRULE,NONE,ZEROPLUS
-REPLY,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REPLY,VTODO,SEQUENCE,NONE,ZEROORONE
-REPLY,VTODO,STATUS,NONE,ZEROORONE
-REPLY,VTODO,SUMMARY,NONE,ZEROORONE
-REPLY,VTODO,URL,NONE,ZEROORONE
-REPLY,VTODO,X,NONE,ZEROPLUS
-REPLY,VTODO,NONE,VTIMEZONE,ZEROORONE
-REPLY,VTODO,NONE,X,ZEROPLUS
-REPLY,VTODO,NONE,VALARM,ZERO
-REPLY,VTODO,NONE,VEVENT,ZERO
-REPLY,VTODO,NONE,VFREEBUSY,ZERO
-REPLY,VTODO,RELCALID,NONE,ZEROORONE
-ADD,VTODO,NONE,NONE,ONE
-ADD,VTODO,DTSTAMP,NONE,ONE
-ADD,VTODO,ORGANIZER,NONE,ONE
-ADD,VTODO,PRIORITY,NONE,ONE
-ADD,VTODO,SEQUENCE,NONE,ONE
-ADD,VTODO,SUMMARY,NONE,ONE
-ADD,VTODO,UID,NONE,ONE
-ADD,VTODO,ATTACH,NONE,ZEROPLUS
-ADD,VTODO,ATTENDEE,NONE,ZEROPLUS
-ADD,VTODO,CATEGORIES,NONE,ZEROPLUS
-ADD,VTODO,CLASS,NONE,ZEROORONE
-ADD,VTODO,COMMENT,NONE,ZEROORONE
-ADD,VTODO,CONTACT,NONE,ZEROPLUS
-ADD,VTODO,CREATED,NONE,ZEROORONE
-ADD,VTODO,DESCRIPTION,NONE,ZEROORONE
-ADD,VTODO,DTSTART,NONE,ZEROORONE
-ADD,VTODO,DUE,NONE,ZEROORONE
-ADD,VTODO,DURATION,NONE,ZEROORONE
-ADD,VTODO,EXDATE,NONE,ZEROPLUS
-ADD,VTODO,EXRULE,NONE,ZEROPLUS
-ADD,VTODO,GEO,NONE,ZEROORONE
-ADD,VTODO,LASTMODIFIED,NONE,ZEROORONE
-ADD,VTODO,LOCATION,NONE,ZEROORONE
-ADD,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-ADD,VTODO,RDATE,NONE,ZEROPLUS
-ADD,VTODO,RELATEDTO,NONE,ZEROPLUS
-ADD,VTODO,RESOURCES,NONE,ZEROORONE
-ADD,VTODO,RRULE,NONE,ZEROPLUS
-ADD,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process
-ADD,VTODO,URL,NONE,ZEROORONE
-ADD,VTODO,X,NONE,ZEROPLUS
-ADD,VTODO,RECURRENCEID,NONE,ZERO,must_be_recurring
-ADD,VTODO,REQUESTSTATUS,NONE,ZERO
-ADD,VTODO,NONE,VALARM,ZEROPLUS
-ADD,VTODO,NONE,VTIMEZONE,ZEROPLUS
-ADD,VTODO,NONE,X,ZEROPLUS
-ADD,VTODO,NONE,VEVENT,ZERO
-ADD,VTODO,NONE,VJOURNAL,ZERO
-ADD,VTODO,NONE,VFREEBUSY,ZERO
-ADD,VTODO,RELCALID,NONE,ZEROORONE
-CANCEL,VTODO,NONE,NONE,ONE
-CANCEL,VTODO,ATTENDEE,NONE,ZEROPLUS
-CANCEL,VTODO,UID,NONE,ONE
-CANCEL,VTODO,DTSTAMP,NONE,ONE
-CANCEL,VTODO,ORGANIZER,NONE,ONE
-CANCEL,VTODO,SEQUENCE,NONE,ONE
-CANCEL,VTODO,ATTACH,NONE,ZEROPLUS
-CANCEL,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard
-CANCEL,VTODO,CLASS,NONE,ZEROORONE
-CANCEL,VTODO,COMMENT,NONE,ZEROORONE
-CANCEL,VTODO,CONTACT,NONE,ZEROPLUS
-CANCEL,VTODO,CREATED,NONE,ZEROORONE
-CANCEL,VTODO,DESCRIPTION,NONE,ZEROORONE
-CANCEL,VTODO,DTSTART,NONE,ZEROORONE
-CANCEL,VTODO,DUE,NONE,ZEROORONE
-CANCEL,VTODO,DURATION,NONE,ZEROORONE
-CANCEL,VTODO,EXDATE,NONE,ZEROPLUS
-CANCEL,VTODO,EXRULE,NONE,ZEROPLUS
-CANCEL,VTODO,GEO,NONE,ZEROORONE
-CANCEL,VTODO,LASTMODIFIED,NONE,ZEROORONE
-CANCEL,VTODO,LOCATION,NONE,ZEROORONE
-CANCEL,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-CANCEL,VTODO,RDATE,NONE,ZEROPLUS
-CANCEL,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-CANCEL,VTODO,RELATEDTO,NONE,ZEROPLUS
-CANCEL,VTODO,RESOURCES,NONE,ZEROORONE
-CANCEL,VTODO,RRULE,NONE,ZEROPLUS
-CANCEL,VTODO,PRIORITY,NONE,ZEROORONE
-CANCEL,VTODO,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee
-CANCEL,VTODO,URL,NONE,ZEROORONE
-CANCEL,VTODO,X,NONE,ZEROPLUS
-CANCEL,VTODO,REQUESTSTATUS,NONE,ZERO
-CANCEL,VTODO,NONE,VTIMEZONE,ZEROORONE
-CANCEL,VTODO,NONE,X,ZEROPLUS
-CANCEL,VTODO,NONE,VALARM,ZERO
-CANCEL,VTODO,NONE,VEVENT,ZERO
-CANCEL,VTODO,NONE,VFREEBUSY,ZERO
-CANCEL,VTODO,RELCALID,NONE,ZEROORONE
-REFRESH,VTODO,NONE,NONE,ONE
-REFRESH,VTODO,ATTENDEE,NONE,ONE
-REFRESH,VTODO,DTSTAMP,NONE,ONE
-REFRESH,VTODO,UID,NONE,ONE
-REFRESH,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-REFRESH,VTODO,X,NONE,ZEROPLUS
-REFRESH,VTODO,ATTACH,NONE,ZERO
-REFRESH,VTODO,CATEGORIES,NONE,ZERO
-REFRESH,VTODO,CLASS,NONE,ZERO
-REFRESH,VTODO,COMMENT,NONE,ZERO
-REFRESH,VTODO,CONTACT,NONE,ZERO
-REFRESH,VTODO,CREATED,NONE,ZERO
-REFRESH,VTODO,DESCRIPTION,NONE,ZERO
-REFRESH,VTODO,DTSTART,NONE,ZERO
-REFRESH,VTODO,DUE,NONE,ZERO
-REFRESH,VTODO,DURATION,NONE,ZERO
-REFRESH,VTODO,EXDATE,NONE,ZERO
-REFRESH,VTODO,EXRULE,NONE,ZERO
-REFRESH,VTODO,GEO,NONE,ZERO
-REFRESH,VTODO,LASTMODIFIED,NONE,ZERO
-REFRESH,VTODO,LOCATION,NONE,ZERO
-REFRESH,VTODO,ORGANIZER,NONE,ZERO
-REFRESH,VTODO,PERCENTCOMPLETE,NONE,ZERO
-REFRESH,VTODO,PRIORITY,NONE,ZERO
-REFRESH,VTODO,RDATE,NONE,ZERO
-REFRESH,VTODO,RELATEDTO,NONE,ZERO
-REFRESH,VTODO,REQUESTSTATUS,NONE,ZERO
-REFRESH,VTODO,RESOURCES,NONE,ZERO
-REFRESH,VTODO,RRULE,NONE,ZERO
-REFRESH,VTODO,SEQUENCE,NONE,ZERO
-REFRESH,VTODO,STATUS,NONE,ZERO
-REFRESH,VTODO,URL,NONE,ZERO
-REFRESH,VTODO,NONE,X,ZEROPLUS
-REFRESH,VTODO,NONE,VALARM,ZERO
-REFRESH,VTODO,NONE,VEVENT,ZERO
-REFRESH,VTODO,NONE,VFREEBUSY,ZERO
-REFRESH,VTODO,NONE,VTIMEZONE,ZERO
-REFRESH,VTODO,RELCALID,NONE,ZEROORONE
-COUNTER,VTODO,NONE,NONE,ONE
-COUNTER,VTODO,ATTENDEE,NONE,ONEPLUS
-COUNTER,VTODO,DTSTAMP,NONE,ONE
-COUNTER,VTODO,ORGANIZER,NONE,ONE
-COUNTER,VTODO,PRIORITY,NONE,ONE
-COUNTER,VTODO,SUMMARY,NONE,ONE
-COUNTER,VTODO,UID,NONE,ONE
-COUNTER,VTODO,ATTACH,NONE,ZEROPLUS
-COUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard
-COUNTER,VTODO,CLASS,NONE,ZEROORONE
-COUNTER,VTODO,COMMENT,NONE,ZEROORONE
-COUNTER,VTODO,CONTACT,NONE,ZEROPLUS
-COUNTER,VTODO,CREATED,NONE,ZEROORONE
-COUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE
-COUNTER,VTODO,DTSTART,NONE,ZEROORONE
-COUNTER,VTODO,DUE,NONE,ZEROORONE
-COUNTER,VTODO,DURATION,NONE,ZEROORONE
-COUNTER,VTODO,EXDATE,NONE,ZEROPLUS
-COUNTER,VTODO,EXRULE,NONE,ZEROPLUS
-COUNTER,VTODO,GEO,NONE,ZEROORONE
-COUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE
-COUNTER,VTODO,LOCATION,NONE,ZEROORONE
-COUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-COUNTER,VTODO,RDATE,NONE,ZEROPLUS
-COUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-COUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS
-COUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS
-COUNTER,VTODO,RESOURCES,NONE,ZEROORONE
-COUNTER,VTODO,RRULE,NONE,ZEROORONE
-COUNTER,VTODO,SEQUENCE,NONE,ZEROORONE
-COUNTER,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process
-COUNTER,VTODO,URL,NONE,ZEROORONE
-COUNTER,VTODO,X,NONE,ZEROPLUS
-COUNTER,VTODO,NONE,VALARM,ZEROPLUS
-COUNTER,VTODO,NONE,VTIMEZONE,ZEROORONE
-COUNTER,VTODO,NONE,X,ZEROPLUS
-COUNTER,VTODO,NONE,VEVENT,ZERO
-COUNTER,VTODO,NONE,VFREEBUSY,ZERO
-COUNTER,VTODO,RELCALID,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,NONE,NONE,ONE
-DECLINECOUNTER,VTODO,ATTENDEE,NONE,ONEPLUS
-DECLINECOUNTER,VTODO,DTSTAMP,NONE,ONE
-DECLINECOUNTER,VTODO,ORGANIZER,NONE,ONE
-DECLINECOUNTER,VTODO,SEQUENCE,NONE,ONE
-DECLINECOUNTER,VTODO,UID,NONE,ONE
-DECLINECOUNTER,VTODO,ATTACH,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard
-DECLINECOUNTER,VTODO,CLASS,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,COMMENT,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,CONTACT,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,CREATED,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,DTSTART,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,DUE,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,DURATION,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,EXDATE,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,EXRULE,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,GEO,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,LOCATION,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,PRIORITY,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,RDATE,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-DECLINECOUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,RESOURCES,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,RRULE,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,STATUS,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,URL,NONE,ZEROORONE
-DECLINECOUNTER,VTODO,X,NONE,ZEROPLUS
-DECLINECOUNTER,VTODO,NONE,VTIMEZONE,ZEROPLUS
-DECLINECOUNTER,VTODO,NONE,X,ZEROPLUS
-DECLINECOUNTER,VTODO,NONE,VALARM,ZERO
-DECLINECOUNTER,VTODO,NONE,VEVENT,ZERO
-DECLINECOUNTER,VTODO,NONE,VFREEBUSY,ZERO
-DECLINECOUNTER,VTODO,RELCALID,NONE,ZEROORONE
-PUBLISH,VJOURNAL,NONE,NONE,ONEPLUS
-PUBLISH,VJOURNAL,DESCRIPTION,NONE,ONE
-PUBLISH,VJOURNAL,DTSTAMP,NONE,ONE
-PUBLISH,VJOURNAL,DTSTART,NONE,ONE
-PUBLISH,VJOURNAL,ORGANIZER,NONE,ONE
-PUBLISH,VJOURNAL,UID,NONE,ONE
-PUBLISH,VJOURNAL,ATTACH,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard
-PUBLISH,VJOURNAL,CLASS,NONE,ZEROORONE
-PUBLISH,VJOURNAL,COMMENT,NONE,ZEROORONE
-PUBLISH,VJOURNAL,CONTACT,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,CREATED,NONE,ZEROORONE
-PUBLISH,VJOURNAL,EXDATE,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,EXRULE,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE
-PUBLISH,VJOURNAL,RDATE,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE
-PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE,may_be_draft_final_canceled
-PUBLISH,VJOURNAL,SUMMARY,NONE,ZEROORONE
-PUBLISH,VJOURNAL,URL,NONE,ZEROORONE
-PUBLISH,VJOURNAL,X,NONE,ZEROPLUS
-PUBLISH,VJOURNAL,ATTENDEE,NONE,ZERO
-PUBLISH,VJOURNAL,NONE,VALARM,ZEROPLUS
-PUBLISH,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS
-PUBLISH,VJOURNAL,NONE,X,ZEROPLUS
-PUBLISH,VJOURNAL,NONE,VEVENT,ZERO
-PUBLISH,VJOURNAL,NONE,VFREEBUSY,ZERO
-PUBLISH,VJOURNAL,NONE,VTODO,ZERO
-ADD,VJOURNAL,NONE,NONE,ONE
-ADD,VJOURNAL,DESCRIPTION,NONE,ONE
-ADD,VJOURNAL,DTSTAMP,NONE,ONE
-ADD,VJOURNAL,DTSTART,NONE,ONE
-ADD,VJOURNAL,ORGANIZER,NONE,ONE
-ADD,VJOURNAL,SEQUENCE,NONE,ONE
-ADD,VJOURNAL,UID,NONE,ONE
-ADD,VJOURNAL,ATTACH,NONE,ZEROPLUS
-ADD,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard
-ADD,VJOURNAL,CLASS,NONE,ZEROORONE
-ADD,VJOURNAL,COMMENT,NONE,ZEROORONE
-ADD,VJOURNAL,CONTACT,NONE,ZEROPLUS
-ADD,VJOURNAL,CREATED,NONE,ZEROORONE
-ADD,VJOURNAL,EXDATE,NONE,ZEROPLUS
-ADD,VJOURNAL,EXRULE,NONE,ZEROPLUS
-ADD,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE
-ADD,VJOURNAL,RDATE,NONE,ZEROPLUS
-ADD,VJOURNAL,RELATEDTO,NONE,ZEROPLUS
-ADD,VJOURNAL,RRULE,NONE,ZEROPLUS
-ADD,VJOURNAL,STATUS,NONE,ZEROORONE
-ADD,VJOURNAL,SUMMARY,NONE,ZEROORONE
-ADD,VJOURNAL,URL,NONE,ZEROORONE
-ADD,VJOURNAL,X,NONE,ZEROPLUS
-ADD,VJOURNAL,ATTENDEE,NONE,ZERO
-ADD,VJOURNAL,RECURRENCEID,NONE,ZERO
-ADD,VJOURNAL,NONE,VALARM,ZEROPLUS
-ADD,VJOURNAL,NONE,VTIMEZONE,ZEROORONE
-ADD,VJOURNAL,NONE,X,ZEROPLUS
-ADD,VJOURNAL,NONE,VEVENT,ZERO
-ADD,VJOURNAL,NONE,VFREEBUSY,ZERO
-ADD,VJOURNAL,NONE,VTODO,ZERO
-CANCEL,VJOURNAL,NONE,NONE,ONEPLUS
-CANCEL,VJOURNAL,DTSTAMP,NONE,ONE
-CANCEL,VJOURNAL,ORGANIZER,NONE,ONE
-CANCEL,VJOURNAL,SEQUENCE,NONE,ONE
-CANCEL,VJOURNAL,UID,NONE,ONE
-CANCEL,VJOURNAL,ATTACH,NONE,ZEROPLUS
-CANCEL,VJOURNAL,ATTENDEE,NONE,ZEROPLUS
-CANCEL,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard
-CANCEL,VJOURNAL,CLASS,NONE,ZEROORONE
-CANCEL,VJOURNAL,COMMENT,NONE,ZEROORONE
-CANCEL,VJOURNAL,CONTACT,NONE,ZEROPLUS
-CANCEL,VJOURNAL,CREATED,NONE,ZEROORONE
-CANCEL,VJOURNAL,DESCRIPTION,NONE,ZEROORONE
-CANCEL,VJOURNAL,DTSTART,NONE,ZEROORONE
-CANCEL,VJOURNAL,EXDATE,NONE,ZEROPLUS
-CANCEL,VJOURNAL,EXRULE,NONE,ZEROPLUS
-CANCEL,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE
-CANCEL,VJOURNAL,RDATE,NONE,ZEROPLUS
-CANCEL,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS
-CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS
-CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present
-CANCEL,VJOURNAL,SUMMARY,NONE,ZEROORONE
-CANCEL,VJOURNAL,URL,NONE,ZEROORONE
-CANCEL,VJOURNAL,X,NONE,ZEROPLUS
-CANCEL,VJOURNAL,REQUESTSTATUS,NONE,ZERO
-CANCEL,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS
-CANCEL,VJOURNAL,NONE,X,ZEROPLUS
-CANCEL,VJOURNAL,NONE,VALARM,ZERO
-CANCEL,VJOURNAL,NONE,VEVENT,ZERO
-CANCEL,VJOURNAL,NONE,VFREEBUSY,ZERO
-CANCEL,VJOURNAL,NONE,VTODO,ZERO
-PUBLISH,VAGENDA,NONE,NONE,ONEPLUS
-PUBLISH,VAGENDA,CALMASTER,NONE,ONE
-PUBLISH,VAGENDA,OWNER,NONE,ZEROORONE
-PUBLISH,VAGENDA,RELCALID,NONE,ZEROORONE
-PUBLISH,VAGENDA,TZID,NONE,ONE
-REQUEST,VAGENDA,NONE,NONE,ONEPLUS
-REQUEST,VAGENDA,CALMASTER,NONE,ONE
-REQUEST,VAGENDA,OWNER,NONE,ZEROORONE
-REQUEST,VAGENDA,RELCALID,NONE,ZEROORONE
-REQUEST,VAGENDA,TZID,NONE,ONE
-REPLY,VAGENDA,NONE,NONE,ONEPLUS
-REPLY,VAGENDA,CALMASTER,NONE,ONE
-REPLY,VAGENDA,OWNER,NONE,ZEROORONE
-REPLY,VAGENDA,RELCALID,NONE,ZEROORONE
-REPLY,VAGENDA,TZID,NONE,ONE
-ADD,VAGENDA,NONE,NONE,ONEPLUS
-ADD,VAGENDA,CALMASTER,NONE,ONE
-ADD,VAGENDA,OWNER,NONE,ZEROORONE
-ADD,VAGENDA,RELCALID,NONE,ZEROORONE
-ADD,VAGENDA,TZID,NONE,ONE
-CANCEL,VAGENDA,NONE,NONE,ONEPLUS
-CANCEL,VAGENDA,CALMASTER,NONE,ONE
-CANCEL,VAGENDA,OWNER,NONE,ZEROORONE
-CANCEL,VAGENDA,RELCALID,NONE,ZEROORONE
-CANCEL,VAGENDA,TZID,NONE,ONE
-REFRESH,VAGENDA,NONE,NONE,ONEPLUS
-REFRESH,VAGENDA,CALMASTER,NONE,ONE
-REFRESH,VAGENDA,OWNER,NONE,ZEROORONE
-REFRESH,VAGENDA,RELCALID,NONE,ZEROORONE
-REFRESH,VAGENDA,TZID,NONE,ONE
-COUNTER,VAGENDA,NONE,NONE,ONEPLUS
-COUNTER,VAGENDA,CALMASTER,NONE,ONE
-COUNTER,VAGENDA,OWNER,NONE,ZEROORONE
-COUNTER,VAGENDA,RELCALID,NONE,ZEROORONE
-COUNTER,VAGENDA,TZID,NONE,ONE
-DECLINECOUNTER,VAGENDA,NONE,NONE,ONEPLUS
-DECLINECOUNTER,VAGENDA,CALMASTER,NONE,ONE
-DECLINECOUNTER,VAGENDA,OWNER,NONE,ZEROORONE
-DECLINECOUNTER,VAGENDA,RELCALID,NONE,ZEROORONE
-DECLINECOUNTER,VAGENDA,TZID,NONE,ONE
-NONE,VAGENDA,ALLOWCONFLICT,NONE,ONE
-NONE,VAGENDA,CALMASTER,NONE,ONE
-NONE,VAGENDA,OWNER,NONE,ZEROORONE
-NONE,VAGENDA,RELCALID,NONE,ZEROORONE
-NONE,VAGENDA,TZID,NONE,ONE
-NONE,VAGENDA,DEFAULTCHARSET,NONE,ONE
-NONE,VAGENDA,DEFAULTLOCALE,NONE,ONE
-NONE,VAGENDA,DEFAULTTZID,NONE,ONE
-NONE,VCALENDAR,ACTION,NONE,ZERO
-NONE,VCALENDAR,ATTACH,NONE,ZERO
-NONE,VCALENDAR,ATTENDEE,NONE,ZERO
-NONE,VCALENDAR,RELCALID,NONE,ZEROORONE
-NONE,VCALENDAR,CALSCALE,NONE,ZEROORONE
-NONE,VCALENDAR,CATEGORIES,NONE,ZERO
-NONE,VCALENDAR,CLASS,NONE,ZERO
-NONE,VCALENDAR,COMMENT,NONE,ZERO
-NONE,VCALENDAR,COMPLETED,NONE,ZERO
-NONE,VCALENDAR,CONTACT,NONE,ZERO
-NONE,VCALENDAR,CREATED,NONE,ZERO
-NONE,VCALENDAR,DESCRIPTION,NONE,ZERO
-NONE,VCALENDAR,DTEND,NONE,ZERO
-NONE,VCALENDAR,DTSTAMP,NONE,ZERO
-NONE,VCALENDAR,DTSTART,NONE,ZERO
-NONE,VCALENDAR,DUE,NONE,ZERO
-NONE,VCALENDAR,DURATION,NONE,ZERO
-NONE,VCALENDAR,EXDATE,NONE,ZERO
-NONE,VCALENDAR,EXRULE,NONE,ZERO
-NONE,VCALENDAR,FREEBUSY,NONE,ZERO
-NONE,VCALENDAR,GEO,NONE,ZERO
-NONE,VCALENDAR,LASTMODIFIED,NONE,ZERO
-NONE,VCALENDAR,LOCATION,NONE,ZERO
-NONE,VCALENDAR,METHOD,NONE,ZEROORONE
-NONE,VCALENDAR,ORGANIZER,NONE,ZERO
-NONE,VCALENDAR,PERCENTCOMPLETE,NONE,ZERO
-NONE,VCALENDAR,PRIORITY,NONE,ZERO
-NONE,VCALENDAR,PRODID,NONE,ONE
-NONE,VCALENDAR,RDATE,NONE,ZERO
-NONE,VCALENDAR,RECURRENCEID,NONE,ZERO
-NONE,VCALENDAR,RELATEDTO,NONE,ZERO
-NONE,VCALENDAR,REPEAT,NONE,ZERO
-NONE,VCALENDAR,REQUESTSTATUS,NONE,ZERO
-NONE,VCALENDAR,RESOURCES,NONE,ZERO
-NONE,VCALENDAR,RRULE,NONE,ZERO
-NONE,VCALENDAR,SEQUENCE,NONE,ZERO
-NONE,VCALENDAR,STATUS,NONE,ZERO
-NONE,VCALENDAR,SUMMARY,NONE,ZERO
-NONE,VCALENDAR,TRANSP,NONE,ZERO
-NONE,VCALENDAR,TRIGGER,NONE,ZERO
-NONE,VCALENDAR,TZID,NONE,ZERO
-NONE,VCALENDAR,TZNAME,NONE,ZERO
-NONE,VCALENDAR,TZOFFSETFROM,NONE,ZERO
-NONE,VCALENDAR,TZOFFSETTO,NONE,ZERO
-NONE,VCALENDAR,TZURL,NONE,ZERO
-NONE,VCALENDAR,UID,NONE,ZERO
-NONE,VCALENDAR,URL,NONE,ZERO
-NONE,VCALENDAR,VERSION,NONE,ONE
-NONE,VCALENDAR,X,NONE,ZEROPLUS
-NONE,VEVENT,ACTION,NONE,ZERO
-NONE,VEVENT,ATTACH,NONE,ZEROPLUS
-NONE,VEVENT,ATTENDEE,NONE,ZEROPLUS
-NONE,VEVENT,CALSCALE,NONE,ZERO
-NONE,VEVENT,CATEGORIES,NONE,ZEROPLUS
-NONE,VEVENT,CLASS,NONE,ZEROORONE
-NONE,VEVENT,COMMENT,NONE,ZEROPLUS
-NONE,VEVENT,COMPLETED,NONE,ZERO
-NONE,VEVENT,CONTACT,NONE,ZEROPLUS
-NONE,VEVENT,CREATED,NONE,ZEROORONE
-NONE,VEVENT,DESCRIPTION,NONE,ZEROORONE
-NONE,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration
-NONE,VEVENT,DTSTAMP,NONE,ZEROORONE
-NONE,VEVENT,DTSTART,NONE,ZEROORONE
-NONE,VEVENT,DUE,NONE,ZERO
-NONE,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend
-NONE,VEVENT,EXDATE,NONE,ZEROPLUS
-NONE,VEVENT,EXRULE,NONE,ZEROPLUS
-NONE,VEVENT,FREEBUSY,NONE,ZERO
-NONE,VEVENT,GEO,NONE,ZEROORONE
-NONE,VEVENT,LASTMODIFIED,NONE,ZEROORONE
-NONE,VEVENT,LOCATION,NONE,ZEROORONE
-NONE,VEVENT,METHOD,NONE,ZERO
-NONE,VEVENT,ORGANIZER,NONE,ZEROORONE
-NONE,VEVENT,PERCENTCOMPLETE,NONE,ZERO
-NONE,VEVENT,PRIORITY,NONE,ZEROORONE
-NONE,VEVENT,PRODID,NONE,ZERO
-NONE,VEVENT,RDATE,NONE,ZEROPLUS
-NONE,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-NONE,VEVENT,RELATEDTO,NONE,ZEROPLUS
-NONE,VEVENT,REPEAT,NONE,ZERO
-NONE,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS
-NONE,VEVENT,RESOURCES,NONE,ZEROPLUS
-NONE,VEVENT,RRULE,NONE,ZEROPLUS
-NONE,VEVENT,SEQUENCE,NONE,ZEROORONE
-NONE,VEVENT,STATUS,NONE,ZEROORONE
-NONE,VEVENT,SUMMARY,NONE,ZEROORONE
-NONE,VEVENT,TRANSP,NONE,ZEROORONE
-NONE,VEVENT,TRIGGER,NONE,ZERO
-NONE,VEVENT,TZID,NONE,ZERO
-NONE,VEVENT,TZNAME,NONE,ZERO
-NONE,VEVENT,TZOFFSETFROM,NONE,ZERO
-NONE,VEVENT,TZOFFSETTO,NONE,ZERO
-NONE,VEVENT,TZURL,NONE,ZERO
-NONE,VEVENT,UID,NONE,ZEROORONE
-NONE,VEVENT,URL,NONE,ZEROORONE
-NONE,VEVENT,VERSION,NONE,ZERO
-NONE,VEVENT,X,NONE,ZEROPLUS
-NONE,VEVENT,RELCALID,NONE,ZEROORONE
-NONE,VTODO,ACTION,NONE,ZERO
-NONE,VTODO,ATTACH,NONE,ZEROPLUS
-NONE,VTODO,ATTENDEE,NONE,ZEROPLUS
-NONE,VTODO,CALSCALE,NONE,ZERO
-NONE,VTODO,CATEGORIES,NONE,ZEROPLUS
-NONE,VTODO,CLASS,NONE,ZEROORONE
-NONE,VTODO,COMMENT,NONE,ZEROPLUS
-NONE,VTODO,COMPLETED,NONE,ZEROORONE
-NONE,VTODO,CONTACT,NONE,ZEROPLUS
-NONE,VTODO,CREATED,NONE,ZEROORONE
-NONE,VTODO,DESCRIPTION,NONE,ZEROORONE
-NONE,VTODO,DTEND,NONE,ZERO
-NONE,VTODO,DTSTAMP,NONE,ZEROORONE
-NONE,VTODO,DTSTART,NONE,ZEROORONE
-NONE,VTODO,DUE,NONE,ONEEXCLUSIVE
-NONE,VTODO,DURATION,NONE,ONEEXCLUSIVE
-NONE,VTODO,EXDATE,NONE,ZEROPLUS
-NONE,VTODO,EXRULE,NONE,ZEROPLUS
-NONE,VTODO,FREEBUSY,NONE,ZERO
-NONE,VTODO,GEO,NONE,ZEROORONE
-NONE,VTODO,LASTMODIFIED,NONE,ZEROORONE
-NONE,VTODO,LOCATION,NONE,ZEROORONE
-NONE,VTODO,METHOD,NONE,ZERO
-NONE,VTODO,ORGANIZER,NONE,ZEROORONE
-NONE,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE
-NONE,VTODO,PRIORITY,NONE,ZEROORONE
-NONE,VTODO,PRODID,NONE,ZERO
-NONE,VTODO,RDATE,NONE,ZEROPLUS
-NONE,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-NONE,VTODO,RELATEDTO,NONE,ZEROPLUS
-NONE,VTODO,REPEAT,NONE,ZERO
-NONE,VTODO,REQUESTSTATUS,NONE,ZEROPLUS
-NONE,VTODO,RESOURCES,NONE,ZEROPLUS
-NONE,VTODO,RRULE,NONE,ZEROPLUS
-NONE,VTODO,SEQUENCE,NONE,ZEROORONE
-NONE,VTODO,STATUS,NONE,ZEROORONE
-NONE,VTODO,SUMMARY,NONE,ZEROORONE
-NONE,VTODO,TRANSP,NONE,ZERO
-NONE,VTODO,TRIGGER,NONE,ZERO
-NONE,VTODO,TZID,NONE,ZERO
-NONE,VTODO,TZNAME,NONE,ZERO
-NONE,VTODO,TZOFFSETFROM,NONE,ZERO
-NONE,VTODO,TZOFFSETTO,NONE,ZERO
-NONE,VTODO,TZURL,NONE,ZERO
-NONE,VTODO,UID,NONE,ZEROORONE
-NONE,VTODO,URL,NONE,ZEROORONE
-NONE,VTODO,VERSION,NONE,ZERO
-NONE,VTODO,X,NONE,ZEROPLUS
-NONE,VTODO,RELCALID,NONE,ZEROORONE
-NONE,VJOURNAL,ACTION,NONE,ZERO
-NONE,VJOURNAL,ATTACH,NONE,ZEROPLUS
-NONE,VJOURNAL,ATTENDEE,NONE,ZEROPLUS
-NONE,VJOURNAL,CALSCALE,NONE,ZERO
-NONE,VJOURNAL,CATEGORIES,NONE,ZEROPLUS
-NONE,VJOURNAL,CLASS,NONE,ZEROORONE
-NONE,VJOURNAL,COMMENT,NONE,ZEROPLUS
-NONE,VJOURNAL,COMPLETED,NONE,ZERO
-NONE,VJOURNAL,CONTACT,NONE,ZEROPLUS
-NONE,VJOURNAL,CREATED,NONE,ZEROORONE
-NONE,VJOURNAL,DESCRIPTION,NONE,ZEROORONE
-NONE,VJOURNAL,DTEND,NONE,ZERO
-NONE,VJOURNAL,DTSTAMP,NONE,ZEROORONE
-NONE,VJOURNAL,DTSTART,NONE,ZEROORONE
-NONE,VJOURNAL,DUE,NONE,ONEEXCLUSIVE
-NONE,VJOURNAL,DURATION,NONE,ONEEXCLUSIVE
-NONE,VJOURNAL,EXDATE,NONE,ZEROPLUS
-NONE,VJOURNAL,EXRULE,NONE,ZEROPLUS
-NONE,VJOURNAL,FREEBUSY,NONE,ZERO
-NONE,VJOURNAL,GEO,NONE,ZERO
-NONE,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE
-NONE,VJOURNAL,LOCATION,NONE,ZERO
-NONE,VJOURNAL,METHOD,NONE,ZERO
-NONE,VJOURNAL,ORGANIZER,NONE,ZEROORONE
-NONE,VJOURNAL,PERCENTCOMPLETE,NONE,ZERO
-NONE,VJOURNAL,PRIORITY,NONE,ZERO
-NONE,VJOURNAL,PRODID,NONE,ZERO
-NONE,VJOURNAL,RDATE,NONE,ZEROPLUS
-NONE,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring
-NONE,VJOURNAL,RELATEDTO,NONE,ZEROPLUS
-NONE,VJOURNAL,REPEAT,NONE,ZERO
-NONE,VJOURNAL,REQUESTSTATUS,NONE,ZEROPLUS
-NONE,VJOURNAL,RESOURCES,NONE,ZERO
-NONE,VJOURNAL,RRULE,NONE,ZEROPLUS
-NONE,VJOURNAL,SEQUENCE,NONE,ZEROORONE
-NONE,VJOURNAL,STATUS,NONE,ZEROORONE
-NONE,VJOURNAL,SUMMARY,NONE,ZEROORONE
-NONE,VJOURNAL,TRANSP,NONE,ZERO
-NONE,VJOURNAL,TRIGGER,NONE,ZERO
-NONE,VJOURNAL,TZID,NONE,ZERO
-NONE,VJOURNAL,TZNAME,NONE,ZERO
-NONE,VJOURNAL,TZOFFSETFROM,NONE,ZERO
-NONE,VJOURNAL,TZOFFSETTO,NONE,ZERO
-NONE,VJOURNAL,TZURL,NONE,ZERO
-NONE,VJOURNAL,UID,NONE,ZEROORONE
-NONE,VJOURNAL,URL,NONE,ZEROORONE
-NONE,VJOURNAL,VERSION,NONE,ZERO
-NONE,VJOURNAL,X,NONE,ZEROPLUS
-NONE,VFREEBUSY,ACTION,NONE,ZERO
-NONE,VFREEBUSY,ATTACH,NONE,ZERO
-NONE,VFREEBUSY,ATTENDEE,NONE,ZEROPLUS
-NONE,VFREEBUSY,CALSCALE,NONE,ZERO
-NONE,VFREEBUSY,CATEGORIES,NONE,ZERO
-NONE,VFREEBUSY,CLASS,NONE,ZERO
-NONE,VFREEBUSY,COMMENT,NONE,ZEROPLUS
-NONE,VFREEBUSY,COMPLETED,NONE,ZERO
-NONE,VFREEBUSY,CONTACT,NONE,ZEROORONE
-NONE,VFREEBUSY,CREATED,NONE,ZERO
-NONE,VFREEBUSY,DESCRIPTION,NONE,ZERO
-NONE,VFREEBUSY,DTEND,NONE,ZEROORONE
-NONE,VFREEBUSY,DTSTAMP,NONE,ZERO
-NONE,VFREEBUSY,DTSTART,NONE,ZEROORONE
-NONE,VFREEBUSY,DUE,NONE,ZERO
-NONE,VFREEBUSY,DURATION,NONE,ZEROORONE
-NONE,VFREEBUSY,EXDATE,NONE,ZERO
-NONE,VFREEBUSY,EXRULE,NONE,ZERO
-NONE,VFREEBUSY,FREEBUSY,NONE,ZEROPLUS
-NONE,VFREEBUSY,GEO,NONE,ZERO
-NONE,VFREEBUSY,LASTMODIFIED,NONE,ZERO
-NONE,VFREEBUSY,LOCATION,NONE,ZERO
-NONE,VFREEBUSY,METHOD,NONE,ZERO
-NONE,VFREEBUSY,ORGANIZER,NONE,ZEROORONE
-NONE,VFREEBUSY,PERCENTCOMPLETE,NONE,ZERO
-NONE,VFREEBUSY,PRIORITY,NONE,ZERO
-NONE,VFREEBUSY,PRODID,NONE,ZERO
-NONE,VFREEBUSY,RDATE,NONE,ZERO
-NONE,VFREEBUSY,RECURRENCEID,NONE,ZERO
-NONE,VFREEBUSY,RELATEDTO,NONE,ZERO
-NONE,VFREEBUSY,REPEAT,NONE,ZERO
-NONE,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS
-NONE,VFREEBUSY,RESOURCES,NONE,ZERO
-NONE,VFREEBUSY,RRULE,NONE,ZERO
-NONE,VFREEBUSY,SEQUENCE,NONE,ZERO
-NONE,VFREEBUSY,STATUS,NONE,ZERO
-NONE,VFREEBUSY,SUMMARY,NONE,ZERO
-NONE,VFREEBUSY,TRANSP,NONE,ZERO
-NONE,VFREEBUSY,TRIGGER,NONE,ZERO
-NONE,VFREEBUSY,TZID,NONE,ZERO
-NONE,VFREEBUSY,TZNAME,NONE,ZERO
-NONE,VFREEBUSY,TZOFFSETFROM,NONE,ZERO
-NONE,VFREEBUSY,TZOFFSETTO,NONE,ZERO
-NONE,VFREEBUSY,TZURL,NONE,ZERO
-NONE,VFREEBUSY,UID,NONE,ZEROORONE
-NONE,VFREEBUSY,URL,NONE,ZEROORONE
-NONE,VFREEBUSY,VERSION,NONE,ZERO
-NONE,VFREEBUSY,X,NONE,ZEROPLUS
-NONE,VTIMEZONE,ACTION,NONE,ZERO
-NONE,VTIMEZONE,ATTACH,NONE,ZERO
-NONE,VTIMEZONE,ATTENDEE,NONE,ZERO
-NONE,VTIMEZONE,CALSCALE,NONE,ZERO
-NONE,VTIMEZONE,CATEGORIES,NONE,ZERO
-NONE,VTIMEZONE,CLASS,NONE,ZERO
-NONE,VTIMEZONE,COMMENT,NONE,ZERO
-NONE,VTIMEZONE,COMPLETED,NONE,ZERO
-NONE,VTIMEZONE,CONTACT,NONE,ZERO
-NONE,VTIMEZONE,CREATED,NONE,ZERO
-NONE,VTIMEZONE,DESCRIPTION,NONE,ZERO
-NONE,VTIMEZONE,DTEND,NONE,ZERO
-NONE,VTIMEZONE,DTSTAMP,NONE,ZERO
-NONE,VTIMEZONE,DTSTART,NONE,ZERO
-NONE,VTIMEZONE,DUE,NONE,ZERO
-NONE,VTIMEZONE,DURATION,NONE,ZERO
-NONE,VTIMEZONE,EXDATE,NONE,ZERO
-NONE,VTIMEZONE,EXRULE,NONE,ZERO
-NONE,VTIMEZONE,FREEBUSY,NONE,ZERO
-NONE,VTIMEZONE,GEO,NONE,ZERO
-NONE,VTIMEZONE,LASTMODIFIED,NONE,ZEROORONE
-NONE,VTIMEZONE,LOCATION,NONE,ZERO
-NONE,VTIMEZONE,METHOD,NONE,ZERO
-NONE,VTIMEZONE,ORGANIZER,NONE,ZERO
-NONE,VTIMEZONE,PERCENTCOMPLETE,NONE,ZERO
-NONE,VTIMEZONE,PRIORITY,NONE,ZERO
-NONE,VTIMEZONE,PRODID,NONE,ZERO
-NONE,VTIMEZONE,RDATE,NONE,ZERO
-NONE,VTIMEZONE,RECURRENCEID,NONE,ZERO
-NONE,VTIMEZONE,RELATEDTO,NONE,ZERO
-NONE,VTIMEZONE,REPEAT,NONE,ZERO
-NONE,VTIMEZONE,REQUESTSTATUS,NONE,ZERO
-NONE,VTIMEZONE,RESOURCES,NONE,ZERO
-NONE,VTIMEZONE,RRULE,NONE,ZERO
-NONE,VTIMEZONE,SEQUENCE,NONE,ZERO
-NONE,VTIMEZONE,STATUS,NONE,ZERO
-NONE,VTIMEZONE,SUMMARY,NONE,ZERO
-NONE,VTIMEZONE,TRANSP,NONE,ZERO
-NONE,VTIMEZONE,TRIGGER,NONE,ZERO
-NONE,VTIMEZONE,TZID,NONE,ONE
-NONE,VTIMEZONE,TZNAME,NONE,ZERO
-NONE,VTIMEZONE,TZOFFSETFROM,NONE,ZERO
-NONE,VTIMEZONE,TZOFFSETTO,NONE,ZERO
-NONE,VTIMEZONE,TZURL,NONE,ZEROPLUS
-NONE,VTIMEZONE,UID,NONE,ZERO
-NONE,VTIMEZONE,URL,NONE,ZERO
-NONE,VTIMEZONE,VERSION,NONE,ZERO
-NONE,VTIMEZONE,X,NONE,ZEROORONE
-NONE,VTIMEZONE,NONE,XSTANDARD,ZEROPLUS
-NONE,VTIMEZONE,NONE,XDAYLIGHT,ZEROPLUS
-NONE,XSTANDARD,ACTION,NONE,ZERO
-NONE,XSTANDARD,ATTACH,NONE,ZERO
-NONE,XSTANDARD,ATTENDEE,NONE,ZERO
-NONE,XSTANDARD,CALSCALE,NONE,ZERO
-NONE,XSTANDARD,CATEGORIES,NONE,ZERO
-NONE,XSTANDARD,CLASS,NONE,ZERO
-NONE,XSTANDARD,COMMENT,NONE,ZEROPLUS
-NONE,XSTANDARD,COMPLETED,NONE,ZERO
-NONE,XSTANDARD,CONTACT,NONE,ZERO
-NONE,XSTANDARD,CREATED,NONE,ZERO
-NONE,XSTANDARD,DESCRIPTION,NONE,ZERO
-NONE,XSTANDARD,DTEND,NONE,ZERO
-NONE,XSTANDARD,DTSTAMP,NONE,ZERO
-NONE,XSTANDARD,DTSTART,NONE,ONE
-NONE,XSTANDARD,DUE,NONE,ZERO
-NONE,XSTANDARD,DURATION,NONE,ZERO
-NONE,XSTANDARD,EXDATE,NONE,ZERO
-NONE,XSTANDARD,EXRULE,NONE,ZERO
-NONE,XSTANDARD,FREEBUSY,NONE,ZERO
-NONE,XSTANDARD,GEO,NONE,ZERO
-NONE,XSTANDARD,LASTMODIFIED,NONE,ZERO
-NONE,XSTANDARD,LOCATION,NONE,ZERO
-NONE,XSTANDARD,METHOD,NONE,ZERO
-NONE,XSTANDARD,ORGANIZER,NONE,ZERO
-NONE,XSTANDARD,PERCENTCOMPLETE,NONE,ZERO
-NONE,XSTANDARD,PRIORITY,NONE,ZERO
-NONE,XSTANDARD,PRODID,NONE,ZERO
-NONE,XSTANDARD,RDATE,NONE,ZEROPLUS
-NONE,XSTANDARD,RECURRENCEID,NONE,ZERO
-NONE,XSTANDARD,RELATEDTO,NONE,ZERO
-NONE,XSTANDARD,REPEAT,NONE,ZERO
-NONE,XSTANDARD,REQUESTSTATUS,NONE,ZERO
-NONE,XSTANDARD,RESOURCES,NONE,ZERO
-NONE,XSTANDARD,RRULE,NONE,ZEROPLUS
-NONE,XSTANDARD,SEQUENCE,NONE,ZERO
-NONE,XSTANDARD,STATUS,NONE,ZERO
-NONE,XSTANDARD,SUMMARY,NONE,ZERO
-NONE,XSTANDARD,TRANSP,NONE,ZERO
-NONE,XSTANDARD,TRIGGER,NONE,ZERO
-NONE,XSTANDARD,TZID,NONE,ZERO
-NONE,XSTANDARD,TZNAME,NONE,ZEROPLUS
-NONE,XSTANDARD,TZOFFSETFROM,NONE,ONE
-NONE,XSTANDARD,TZOFFSETTO,NONE,ONE
-NONE,XSTANDARD,TZURL,NONE,ZERO
-NONE,XSTANDARD,UID,NONE,ZERO
-NONE,XSTANDARD,URL,NONE,ZERO
-NONE,XSTANDARD,VERSION,NONE,ZERO
-NONE,XSTANDARD,X,NONE,ZEROPLUS
-NONE,XDAYLIGHT,ACTION,NONE,ZERO
-NONE,XDAYLIGHT,ATTACH,NONE,ZERO
-NONE,XDAYLIGHT,ATTENDEE,NONE,ZERO
-NONE,XDAYLIGHT,CALSCALE,NONE,ZERO
-NONE,XDAYLIGHT,CATEGORIES,NONE,ZERO
-NONE,XDAYLIGHT,CLASS,NONE,ZERO
-NONE,XDAYLIGHT,COMMENT,NONE,ZEROPLUS
-NONE,XDAYLIGHT,COMPLETED,NONE,ZERO
-NONE,XDAYLIGHT,CONTACT,NONE,ZERO
-NONE,XDAYLIGHT,CREATED,NONE,ZERO
-NONE,XDAYLIGHT,DESCRIPTION,NONE,ZERO
-NONE,XDAYLIGHT,DTEND,NONE,ZERO
-NONE,XDAYLIGHT,DTSTAMP,NONE,ZERO
-NONE,XDAYLIGHT,DTSTART,NONE,ONE
-NONE,XDAYLIGHT,DUE,NONE,ZERO
-NONE,XDAYLIGHT,DURATION,NONE,ZERO
-NONE,XDAYLIGHT,EXDATE,NONE,ZERO
-NONE,XDAYLIGHT,EXRULE,NONE,ZERO
-NONE,XDAYLIGHT,FREEBUSY,NONE,ZERO
-NONE,XDAYLIGHT,GEO,NONE,ZERO
-NONE,XDAYLIGHT,LASTMODIFIED,NONE,ZERO
-NONE,XDAYLIGHT,LOCATION,NONE,ZERO
-NONE,XDAYLIGHT,METHOD,NONE,ZERO
-NONE,XDAYLIGHT,ORGANIZER,NONE,ZERO
-NONE,XDAYLIGHT,PERCENTCOMPLETE,NONE,ZERO
-NONE,XDAYLIGHT,PRIORITY,NONE,ZERO
-NONE,XDAYLIGHT,PRODID,NONE,ZERO
-NONE,XDAYLIGHT,RDATE,NONE,ZEROPLUS
-NONE,XDAYLIGHT,RECURRENCEID,NONE,ZERO
-NONE,XDAYLIGHT,RELATEDTO,NONE,ZERO
-NONE,XDAYLIGHT,REPEAT,NONE,ZERO
-NONE,XDAYLIGHT,REQUESTSTATUS,NONE,ZERO
-NONE,XDAYLIGHT,RESOURCES,NONE,ZERO
-NONE,XDAYLIGHT,RRULE,NONE,ZEROPLUS
-NONE,XDAYLIGHT,SEQUENCE,NONE,ZERO
-NONE,XDAYLIGHT,STATUS,NONE,ZERO
-NONE,XDAYLIGHT,SUMMARY,NONE,ZERO
-NONE,XDAYLIGHT,TRANSP,NONE,ZERO
-NONE,XDAYLIGHT,TRIGGER,NONE,ZERO
-NONE,XDAYLIGHT,TZID,NONE,ZERO
-NONE,XDAYLIGHT,TZNAME,NONE,ZEROPLUS
-NONE,XDAYLIGHT,TZOFFSETFROM,NONE,ONE
-NONE,XDAYLIGHT,TZOFFSETTO,NONE,ONE
-NONE,XDAYLIGHT,TZURL,NONE,ZERO
-NONE,XDAYLIGHT,UID,NONE,ZERO
-NONE,XDAYLIGHT,URL,NONE,ZERO
-NONE,XDAYLIGHT,VERSION,NONE,ZERO
-NONE,XDAYLIGHT,X,NONE,ZEROPLUS
-NONE,XAUDIOALARM,ACTION,NONE,ONE
-NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE
-NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO
-NONE,XAUDIOALARM,CALSCALE,NONE,ZERO
-NONE,XAUDIOALARM,CATEGORIES,NONE,ZERO
-NONE,XAUDIOALARM,CLASS,NONE,ZERO
-NONE,XAUDIOALARM,COMMENT,NONE,ZERO
-NONE,XAUDIOALARM,COMPLETED,NONE,ZERO
-NONE,XAUDIOALARM,CONTACT,NONE,ZERO
-NONE,XAUDIOALARM,CREATED,NONE,ZERO
-NONE,XAUDIOALARM,DESCRIPTION,NONE,ZERO
-NONE,XAUDIOALARM,DTEND,NONE,ZERO
-NONE,XAUDIOALARM,DTSTAMP,NONE,ZERO
-NONE,XAUDIOALARM,DTSTART,NONE,ZERO
-NONE,XAUDIOALARM,DUE,NONE,ZERO
-NONE,XAUDIOALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat
-NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration
-NONE,XAUDIOALARM,EXDATE,NONE,ZERO
-NONE,XAUDIOALARM,EXRULE,NONE,ZERO
-NONE,XAUDIOALARM,FREEBUSY,NONE,ZERO
-NONE,XAUDIOALARM,GEO,NONE,ZERO
-NONE,XAUDIOALARM,LASTMODIFIED,NONE,ZERO
-NONE,XAUDIOALARM,LOCATION,NONE,ZERO
-NONE,XAUDIOALARM,METHOD,NONE,ZERO
-NONE,XAUDIOALARM,ORGANIZER,NONE,ZERO
-NONE,XAUDIOALARM,PERCENTCOMPLETE,NONE,ZERO
-NONE,XAUDIOALARM,PRIORITY,NONE,ZERO
-NONE,XAUDIOALARM,PRODID,NONE,ZERO
-NONE,XAUDIOALARM,RDATE,NONE,ZERO
-NONE,XAUDIOALARM,RECURRENCEID,NONE,ZERO
-NONE,XAUDIOALARM,RELATEDTO,NONE,ZERO
-NONE,XAUDIOALARM,REQUESTSTATUS,NONE,ZERO
-NONE,XAUDIOALARM,RESOURCES,NONE,ZERO
-NONE,XAUDIOALARM,RRULE,NONE,ZERO
-NONE,XAUDIOALARM,SEQUENCE,NONE,ZERO
-NONE,XAUDIOALARM,STATUS,NONE,ZERO
-NONE,XAUDIOALARM,SUMMARY,NONE,ZERO
-NONE,XAUDIOALARM,TRANSP,NONE,ZERO
-NONE,XAUDIOALARM,TRIGGER,NONE,ONE
-NONE,XAUDIOALARM,TZID,NONE,ZERO
-NONE,XAUDIOALARM,TZNAME,NONE,ZERO
-NONE,XAUDIOALARM,TZOFFSETFROM,NONE,ZERO
-NONE,XAUDIOALARM,TZOFFSETTO,NONE,ZERO
-NONE,XAUDIOALARM,TZURL,NONE,ZERO
-NONE,XAUDIOALARM,UID,NONE,ZERO
-NONE,XAUDIOALARM,URL,NONE,ZERO
-NONE,XAUDIOALARM,VERSION,NONE,ZERO
-NONE,XAUDIOALARM,X,NONE,ZEROPLUS
-NONE,XDISPLAYALARM,ACTION,NONE,ONE
-NONE,XDISPLAYALARM,ATTACH,NONE,ZERO
-NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO
-NONE,XDISPLAYALARM,CALSCALE,NONE,ZERO
-NONE,XDISPLAYALARM,CATEGORIES,NONE,ZERO
-NONE,XDISPLAYALARM,CLASS,NONE,ZERO
-NONE,XDISPLAYALARM,COMMENT,NONE,ZERO
-NONE,XDISPLAYALARM,COMPLETED,NONE,ZERO
-NONE,XDISPLAYALARM,CONTACT,NONE,ZERO
-NONE,XDISPLAYALARM,CREATED,NONE,ZERO
-NONE,XDISPLAYALARM,DESCRIPTION,NONE,ONE
-NONE,XDISPLAYALARM,DTEND,NONE,ZERO
-NONE,XDISPLAYALARM,DTSTAMP,NONE,ZERO
-NONE,XDISPLAYALARM,DTSTART,NONE,ZERO
-NONE,XDISPLAYALARM,DUE,NONE,ZERO
-NONE,XDISPLAYALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat
-NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration
-NONE,XDISPLAYALARM,EXDATE,NONE,ZERO
-NONE,XDISPLAYALARM,EXRULE,NONE,ZERO
-NONE,XDISPLAYALARM,FREEBUSY,NONE,ZERO
-NONE,XDISPLAYALARM,GEO,NONE,ZERO
-NONE,XDISPLAYALARM,LASTMODIFIED,NONE,ZERO
-NONE,XDISPLAYALARM,LOCATION,NONE,ZERO
-NONE,XDISPLAYALARM,METHOD,NONE,ZERO
-NONE,XDISPLAYALARM,ORGANIZER,NONE,ZERO
-NONE,XDISPLAYALARM,PERCENTCOMPLETE,NONE,ZERO
-NONE,XDISPLAYALARM,PRIORITY,NONE,ZERO
-NONE,XDISPLAYALARM,PRODID,NONE,ZERO
-NONE,XDISPLAYALARM,RDATE,NONE,ZERO
-NONE,XDISPLAYALARM,RECURRENCEID,NONE,ZERO
-NONE,XDISPLAYALARM,RELATEDTO,NONE,ZERO
-NONE,XDISPLAYALARM,REQUESTSTATUS,NONE,ZERO
-NONE,XDISPLAYALARM,RESOURCES,NONE,ZERO
-NONE,XDISPLAYALARM,RRULE,NONE,ZERO
-NONE,XDISPLAYALARM,SEQUENCE,NONE,ZERO
-NONE,XDISPLAYALARM,STATUS,NONE,ZERO
-NONE,XDISPLAYALARM,SUMMARY,NONE,ZERO
-NONE,XDISPLAYALARM,TRANSP,NONE,ZERO
-NONE,XDISPLAYALARM,TRIGGER,NONE,ONE
-NONE,XDISPLAYALARM,TZID,NONE,ZERO
-NONE,XDISPLAYALARM,TZNAME,NONE,ZERO
-NONE,XDISPLAYALARM,TZOFFSETFROM,NONE,ZERO
-NONE,XDISPLAYALARM,TZOFFSETTO,NONE,ZERO
-NONE,XDISPLAYALARM,TZURL,NONE,ZERO
-NONE,XDISPLAYALARM,UID,NONE,ZERO
-NONE,XDISPLAYALARM,URL,NONE,ZERO
-NONE,XDISPLAYALARM,VERSION,NONE,ZERO
-NONE,XDISPLAYALARM,X,NONE,ZEROPLUS
-NONE,XEMAILALARM,ACTION,NONE,ONE,must_be_email
-NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS
-NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS
-NONE,XEMAILALARM,CALSCALE,NONE,ZERO
-NONE,XEMAILALARM,CATEGORIES,NONE,ZERO
-NONE,XEMAILALARM,CLASS,NONE,ZERO
-NONE,XEMAILALARM,COMMENT,NONE,ZERO
-NONE,XEMAILALARM,COMPLETED,NONE,ZERO
-NONE,XEMAILALARM,CONTACT,NONE,ZERO
-NONE,XEMAILALARM,CREATED,NONE,ZERO
-NONE,XEMAILALARM,DESCRIPTION,NONE,ONE
-NONE,XEMAILALARM,DTEND,NONE,ZERO
-NONE,XEMAILALARM,DTSTAMP,NONE,ZERO
-NONE,XEMAILALARM,DTSTART,NONE,ZERO
-NONE,XEMAILALARM,DUE,NONE,ZERO
-NONE,XEMAILALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat
-NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration
-NONE,XEMAILALARM,EXDATE,NONE,ZERO
-NONE,XEMAILALARM,EXRULE,NONE,ZERO
-NONE,XEMAILALARM,FREEBUSY,NONE,ZERO
-NONE,XEMAILALARM,GEO,NONE,ZERO
-NONE,XEMAILALARM,LASTMODIFIED,NONE,ZERO
-NONE,XEMAILALARM,LOCATION,NONE,ZERO
-NONE,XEMAILALARM,METHOD,NONE,ZERO
-NONE,XEMAILALARM,ORGANIZER,NONE,ZERO
-NONE,XEMAILALARM,PERCENTCOMPLETE,NONE,ZERO
-NONE,XEMAILALARM,PRIORITY,NONE,ZERO
-NONE,XEMAILALARM,PRODID,NONE,ZERO
-NONE,XEMAILALARM,RDATE,NONE,ZERO
-NONE,XEMAILALARM,RECURRENCEID,NONE,ZERO
-NONE,XEMAILALARM,RELATEDTO,NONE,ZERO
-NONE,XEMAILALARM,REQUESTSTATUS,NONE,ZERO
-NONE,XEMAILALARM,RESOURCES,NONE,ZERO
-NONE,XEMAILALARM,RRULE,NONE,ZERO
-NONE,XEMAILALARM,SEQUENCE,NONE,ZERO
-NONE,XEMAILALARM,STATUS,NONE,ZERO
-NONE,XEMAILALARM,SUMMARY,NONE,ONE
-NONE,XEMAILALARM,TRANSP,NONE,ZERO
-NONE,XEMAILALARM,TRIGGER,NONE,ONE
-NONE,XEMAILALARM,TZID,NONE,ZERO
-NONE,XEMAILALARM,TZNAME,NONE,ZERO
-NONE,XEMAILALARM,TZOFFSETFROM,NONE,ZERO
-NONE,XEMAILALARM,TZOFFSETTO,NONE,ZERO
-NONE,XEMAILALARM,TZURL,NONE,ZERO
-NONE,XEMAILALARM,UID,NONE,ZERO
-NONE,XEMAILALARM,URL,NONE,ZERO
-NONE,XEMAILALARM,VERSION,NONE,ZERO
-NONE,XEMAILALARM,X,NONE,ZEROPLUS
-NONE,XPROCEDUREALARM,ACTION,NONE,ONE
-NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE
-NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO
-NONE,XPROCEDUREALARM,CALSCALE,NONE,ZERO
-NONE,XPROCEDUREALARM,CATEGORIES,NONE,ZERO
-NONE,XPROCEDUREALARM,CLASS,NONE,ZERO
-NONE,XPROCEDUREALARM,COMMENT,NONE,ZERO
-NONE,XPROCEDUREALARM,COMPLETED,NONE,ZERO
-NONE,XPROCEDUREALARM,CONTACT,NONE,ZERO
-NONE,XPROCEDUREALARM,CREATED,NONE,ZERO
-NONE,XPROCEDUREALARM,DESCRIPTION,NONE,ZEROORONE
-NONE,XPROCEDUREALARM,DTEND,NONE,ZERO
-NONE,XPROCEDUREALARM,DTSTAMP,NONE,ZERO
-NONE,XPROCEDUREALARM,DTSTART,NONE,ZERO
-NONE,XPROCEDUREALARM,DUE,NONE,ZERO
-NONE,XPROCEDUREALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat
-NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration
-NONE,XPROCEDUREALARM,EXDATE,NONE,ZERO
-NONE,XPROCEDUREALARM,EXRULE,NONE,ZERO
-NONE,XPROCEDUREALARM,FREEBUSY,NONE,ZERO
-NONE,XPROCEDUREALARM,GEO,NONE,ZERO
-NONE,XPROCEDUREALARM,LASTMODIFIED,NONE,ZERO
-NONE,XPROCEDUREALARM,LOCATION,NONE,ZERO
-NONE,XPROCEDUREALARM,METHOD,NONE,ZERO
-NONE,XPROCEDUREALARM,ORGANIZER,NONE,ZERO
-NONE,XPROCEDUREALARM,PERCENTCOMPLETE,NONE,ZERO
-NONE,XPROCEDUREALARM,PRIORITY,NONE,ZERO
-NONE,XPROCEDUREALARM,PRODID,NONE,ZERO
-NONE,XPROCEDUREALARM,RDATE,NONE,ZERO
-NONE,XPROCEDUREALARM,RECURRENCEID,NONE,ZERO
-NONE,XPROCEDUREALARM,RELATEDTO,NONE,ZERO
-NONE,XPROCEDUREALARM,REQUESTSTATUS,NONE,ZERO
-NONE,XPROCEDUREALARM,RESOURCES,NONE,ZERO
-NONE,XPROCEDUREALARM,RRULE,NONE,ZERO
-NONE,XPROCEDUREALARM,SEQUENCE,NONE,ZERO
-NONE,XPROCEDUREALARM,STATUS,NONE,ZERO
-NONE,XPROCEDUREALARM,SUMMARY,NONE,ZERO
-NONE,XPROCEDUREALARM,TRANSP,NONE,ZERO
-NONE,XPROCEDUREALARM,TRIGGER,NONE,ONE
-NONE,XPROCEDUREALARM,TZID,NONE,ZERO
-NONE,XPROCEDUREALARM,TZNAME,NONE,ZERO
-NONE,XPROCEDUREALARM,TZOFFSETFROM,NONE,ZERO
-NONE,XPROCEDUREALARM,TZOFFSETTO,NONE,ZERO
-NONE,XPROCEDUREALARM,TZURL,NONE,ZERO
-NONE,XPROCEDUREALARM,UID,NONE,ZERO
-NONE,XPROCEDUREALARM,URL,NONE,ZERO
-NONE,XPROCEDUREALARM,VERSION,NONE,ZERO
-NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS
-NONE,VQUERY,QUERY,NONE,ZEROORONE
-NONE,VQUERY,QUERYNAME,NONE,ONE
-NONE,VQUERY,EXPAND,NONE,ONE
diff --git a/libical/design-data/status.txt b/libical/design-data/status.txt
deleted file mode 100644
index 9e7bbf83a7..0000000000
--- a/libical/design-data/status.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-2.0 STATOK Operation was successfully performed.
-2.0.1 STARTSENDATA Start ICAL input; end with <CRLF>.<CRLF>
-2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with <CRLF>.<CRLF>
-2.0.2 REPLYPENDING A timeout has occurred. The server is still working on the reply. Use CONTINUE to continue waiting for the reply or ABORT to terminate the command.
-2.0.3 ABORTED The command currently underway was successsfully aborted.
-2.0.4 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway.
-2.0.5 TRUSTEDWILLQUEUE The request or reply will be queued and delivered to the target calendar when its iRIP server contacts this server and issues the SWITCH command.
-2.0.6 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway.
-2.0.7 QUEUED The message has been queued for delivery.
-2.0.8 QUEUEEMPTY There are no more queued messages.
-2.1 FALLBACK Success. Fallback taken on one or more property values.
-2.2 NOCOMMANDINPROGRESS An ABORT or CONTINUE was received when no command was in progress
-2.2 IGPROP Success. Invalid property ignored.
-2.3 IGPARAM Success. invalid property parameter ignored.
-2.4 IGXPROP Success. Unknown non-standard property ignored.
-2.5 IGXPARAM Success. Unknown non standard property value ignored.
-2.6 IGCOMP Success. Invalid calendar component ignored.
-2.7 FORWARD Success. Request forwarded to Calendar User.
-2.8 ONEEVENT Success. Repeating event ignored. Scheduled as a single component.
-2.9 TRUNC Success. Truncated end date time to date boundary.
-2.10 ONETODO Success. Repeating VTODO ignored. Scheduled as a single VTODO.
-2.11 TRUNCRRULE Success. Unbounded RRULE clipped at some finite number of instances
-3.0 INVPROPNAME Invalid property name.
-3.1 INVPROPVAL Invalid property value.
-3.2 INVPARAM Invalid property parameter.
-3.3 INVPARAMVAL Invalid property parameter value.
-3.4 INVCOMP Invalid calendar component sequence.
-3.5 INVTIME Invalid date or time.
-3.6 INVRULE Invalid rule.
-3.7 INVCU Invalid Calendar User.
-3.8 NOAUTH No authority.
-3.9 BADVERSION Unsupported version.
-3.10 TOOBIG Request entity too large.
-3.11 MISSREQCOMP Required component or property missing.
-3.12 UNKCOMP Unknown component or property found.
-3.13 BADCOMP Unsupported component or property found
-3.14 NOCAP Unsupported capability.
-4.0 BUSY Event conflict. Date/time is busy.
-5.0 MAYBE Request MAY supported.
-5.1 UNAVAIL Service unavailable.
-5.2 NOSERVICE Invalid calendar service.
-5.3 NOSCHED No scheduling support for user.
-6.1 AUTHENTICATEFAILURE Unsupported authentication mechanism, credentials rejected
-6.2 AUTHENTICATIONABORTED Sender aborted authentication, authentication exchange cancelled
-8.0 GENERALFAILURE A failure has occurred in the Receiver that prevents the operation from succeeding.
-8.1 SERVERTOOBUSY The iRIP Receiver is too busy.
-8.2 ICALOBJECTTOOBIG Object has exceeded the server's size limit.
-8.3 DATETOOLARGE A DATETIME value was too far in the future to be represented on this Calendar.
-8.4 DATETOOSMALL A DATETIME value was too far in the past to be represented on this Calendar.
-9.0 INVALIDIRIPCOMMAND An unrecongnized command was received.
-9.1 UNEXPECTEDCOMMAND The command is not allowed for the server's current state.
-10.1 REFERRAL Accompanied by an alternate address.
-10.2 SERVERSHUTDOWN The server is shutting down.
-10.3 SERVERSTOPPING FLOOD 2
-10.4 EXCEEDEDQUOTAS The operation would cause a resource to exceed the allocated quota
-10.5 QUEUEDTOOLONG The ITIP message has been queued too long. Delivery has been aborted.
diff --git a/libical/design-data/value-c-types.txt b/libical/design-data/value-c-types.txt
deleted file mode 100644
index 9b445655d9..0000000000
--- a/libical/design-data/value-c-types.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-ATTACH nogen icalattach *
-BINARY autogen const char*
-BOOLEAN autogen int
-CAL-ADDRESS autogen const char*
-DATE autogen struct icaltimetype
-DATE-TIME autogen struct icaltimetype
-DATE-TIME-DATE autogen struct icaltimetype # Non-std
-DATE-TIME-PERIOD nogen struct icaldatetimeperiodtype # Non-std
-DURATION autogen struct icaldurationtype
-FLOAT autogen float
-GEO autogen struct icalgeotype # Non-std
-INTEGER autogen int
-METHOD autogen icalproperty_method # Non-std
-PERIOD autogen struct icalperiodtype
-RECUR nogen struct icalrecurrencetype
-STRING autogen const char* # Non-std
-TEXT autogen const char*
-TIME autogen struct icaltimetype
-TRIGGER nogen struct icaltriggertype # Non-std
-URI autogen const char*
-UTC-OFFSET autogen int
-QUERY autogen const char*
-STATUS autogen icalproperty_status #Non-std
diff --git a/libical/design-data/value-mem-semantics.txt b/libical/design-data/value-mem-semantics.txt
deleted file mode 100644
index ce085ede80..0000000000
--- a/libical/design-data/value-mem-semantics.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-ATTACH icalattach *
-BINARY char*
-BOOLEAN int
-CAL-ADDRESS char*
-DATE time_t
-DATE-TIME time_t
-DATE-TIME-DATE time_t
-DATE-TIME-PERIOD struct icalperiodtype
-DURATION struct icaldurationtype
-FLOAT float
-GEO struct icalgeotype
-INTEGER int
-PERIOD struct icalperiodtype
-RECUR struct icalrecurrencetype
-TEXT char*
-TIME time_t
-TRIGGER struct icaltriggertimetype
-URI char*
-UTC-OFFSET int
diff --git a/libical/design-data/value-types.csv b/libical/design-data/value-types.csv
deleted file mode 100644
index 1e6b88b3c5..0000000000
--- a/libical/design-data/value-types.csv
+++ /dev/null
@@ -1,35 +0,0 @@
-"#Name","C type& gen flag","Python","Component Values","Enum Values"
-"BINARY","(a)const char*","file","unitary",
-"BOOLEAN","(a)int","integer","unitary",
-"CAL-ADDRESS","(a)const char*","string","unitary",
-"DATE","(a)struct icaltimetype","Time","unitary",
-"DATE-TIME","(a)struct icaltimetype","Time","unitary",
-"DURATION","(a)struct icaldurationtype","Duration","unitary",
-"FLOAT","(a)float","float","unitary",
-"INTEGER","(a)int","integer","unitary",
-"PERIOD","(a)struct icalperiodtype","Period","unitary",
-"RECUR","(m)struct icalrecurrencetype","RecurrenceSet","unitary",
-"TEXT","(a)const char*","string","unitary",
-"URI","(a)const char*","string","unitary",
-"UTC-OFFSET","(a)int","integer","unitary",
-"QUERY","(a)const char*","string","unitary",
-"#Non-standard multi-valued types",,,,
-"ATTACH","(m)icalattach *","none","URI;BINARY",
-"DATE-TIME-PERIOD","(m)struct icaldatetimeperiodtype","none","DATE-TIME;PERIOD",
-"TRIGGER","(m)struct icaltriggertype","string","DURATION;DATE-TIME",
-"#Non-standard property enumeration types",,,,
-"METHOD","(a)enum icalproperty_method","string","unitary","PUBLISH;REQUEST;REPLY;ADD;CANCEL;REFRESH;COUNTER;DECLINECOUNTER;CREATE;READ;RESPONSE;MOVE;MODIFY;GENERATEUID;DELETE"
-"X-LIC-CLASS","(a)enum icalproperty_xlicclass","string","unitary","PUBLISH-NEW;PUBLISH-UPDATE;PUBLISH-FREEBUSY;REQUEST-NEW;REQUEST-UPDATE;REQUEST-RESCHEDULE;REQUEST-DELEGATE;REQUEST-NEW-ORGANIZER;REQUEST-FORWARD;REQUEST-STATUS;REQUEST-FREEBUSY;REPLY-ACCEPT;REPLY-DECLINE;REPLY-DELEGATE;REPLY-CRASHER-ACCEPT;REPLY-CRASHER-DECLINE;ADD-INSTANCE;CANCEL-EVENT;CANCEL-INSTANCE;CANCEL-ALL;REFRESH;COUNTER;DECLINECOUNTER;MALFORMED;OBSOLETE;MISSEQUENCED;UNKNOWN"
-"ACTION","(a)enum icalproperty_action","string","unitary","AUDIO;DISPLAY;EMAIL;PROCEDURE"
-"STATUS","(a)enum icalproperty_status","string","unitary","TENTATIVE;CONFIRMED;COMPLETED;NEEDS-ACTION;CANCELLED;IN-PROCESS;DRAFT;FINAL"
-"TRANSP","(a)enum icalproperty_transp","string","unitary","OPAQUE;OPAQUE-NOCONFLICT;TRANSPARENT;TRANSPARENT-NOCONFLICT"
-"CLASS","(a)enum icalproperty_class","string","unitary","PUBLIC;PRIVATE;CONFIDENTIAL"
-"#Other non-standard",,,,
-"REQUEST-STATUS","(a)struct icalreqstattype","string","unitary"
-"GEO","(a)struct icalgeotype","tuple","unitary",
-"STRING","(a)const char*","string","unitary",
-"X","(m)const char*","string","unitary",
-"#CAP enumeration types",,,,
-"CMD","(a)enum icalproperty_cmd","string","unitary","ABORT;CONTINUE;CREATE;DELETE;GENERATE-UID;GET-CAPABILITY;IDENTIFY;MODIFY;MOVE;REPLY;SEARCH;SET-LOCALE"
-"QUERY-LEVEL","(a)enum icalproperty_querylevel","string","unitary","CAL-QL-1;CAL-QL-NONE"
-"CAR-LEVEL","(a)enum icalproperty_carlevel","string","unitary","CAR-NONE;CAR-MIN;CAR-FULL-1"
diff --git a/libical/doc/.cvsignore b/libical/doc/.cvsignore
deleted file mode 100644
index dc4caac801..0000000000
--- a/libical/doc/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/doc/AddingOrModifyingComponents.txt b/libical/doc/AddingOrModifyingComponents.txt
deleted file mode 100644
index e9f46c2759..0000000000
--- a/libical/doc/AddingOrModifyingComponents.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-
-How to add or change Components, Properties, Values or Parameters
-
-
-Adding or modifying values
----------------------------
-
-You may have to modify these files or data structures
-
-file design-data/value-c-types.txt
-file design-data/prop-to-val.txt
-table parameter_map[] in icalenums.c
-enum icalvalue_kind in icalenum.h
-table value_map[] in icalenums.c
-enum icalparameter_value in icalenum.h
-table propval_map[] in icalenums.c
-function icalvalue_as_ical_string() in icalvalue.c
-function icalvalue_new_from_string_with_error() in icalvalue.c
-
-When you are done, if you changed any files in the design-data
-directory, regnerate derived datatypes in src/libical with "make
-derived" or "make icalvalue"
-
diff --git a/libical/doc/Makefile.am b/libical/doc/Makefile.am
deleted file mode 100644
index 70b008a369..0000000000
--- a/libical/doc/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = UsingLibical.lyx UsingLibical.ps UsingLibical.txt
diff --git a/libical/doc/UsingLibical.lyx b/libical/doc/UsingLibical.lyx
deleted file mode 100644
index 02655a3121..0000000000
--- a/libical/doc/UsingLibical.lyx
+++ /dev/null
@@ -1,2584 +0,0 @@
-#LyX 1.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 2.16
-\textclass article
-\language default
-\inputencoding latin1
-\fontscheme default
-\graphics default
-\paperfontsize default
-\spacing single
-\papersize Default
-\paperpackage a4
-\use_geometry 0
-\use_amsmath 0
-\paperorientation portrait
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\quotes_times 2
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-
-\layout Title
-
-Using Libical
-\layout Author
-
-Eric Busboom (eric@softwarestudio.org)
-\layout Date
-
-January 2001
-\layout Standard
-
-
-\begin_inset LatexCommand \tableofcontents{}
-
-\end_inset
-
-
-\layout Section
-
-Introduction
-\layout Standard
-
-Libical is an Open Source implementation of the iCalendar protocols and
- protocol data units.
- The iCalendar specification describes how calendar clients can communicate
- with calendar servers so users can store their calendar data and arrange
- meetings with other users.
-
-\layout Standard
-
-Libical implements RFC2445, RFC2446 and some of RFC2447 and the CAP draft.
-
-\layout Standard
-
-This documentation assumes that you are familiar with the iCalendar standards
- RFC2445 and RFC2446.
- these specifications are online on the CALSCH webpage at:
-\layout LyX-Code
-
-http://www.imc.org/ietf-calendar/
-\layout Subsection
-
-The libical project
-\layout Standard
-
-This code is under active development.
- If you would like to contribute to the project, you can contact me, Eric
- Busboom, at eric@softwarestudio.org.
- The project has a webpage at
-\layout LyX-Code
-
-http://softwarestudio.org/libical/index.html
-\layout Standard
-
-and a mailing list that you can join by sending the following mail:
-\layout LyX-Code
-
-To: minimalist@softwarestudio.org
-\layout LyX-Code
-
-Subject: subscribe libical
-\layout Subsection
-
-License
-\layout Standard
-
-The code and datafiles in this distribution are licensed under the Mozilla
- Public License.
- See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the license.
- Alternately, you may use libical under the terms of the GNU Library General
- Public License.
- See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL.
-\layout Standard
-
-This dual license ensures that the library can be incorporated into both
- proprietary code and GPL'd programs, and will benefit from improvements
- made by programmers in both realms.
- I will only accept changes into my version of the library if they are similarly
- dual-licensed.
-\layout Subsection
-
-Example Code
-\layout Standard
-
-A lot of the documentation for this library is in the form of example code.
- These examples are in the
-\begin_inset Quotes eld
-\end_inset
-
-examples
-\begin_inset Quotes erd
-\end_inset
-
- directory of the distribution.
- Also look in
-\begin_inset Quotes eld
-\end_inset
-
-src/test
-\begin_inset Quotes erd
-\end_inset
-
- for additional annotated examples.
-
-\layout Section
-
-Building and Installing the Library
-\layout Standard
-
-Libical uses autoconf to generate makefiles.
- It should built with no adjustments on Linux, FreeBSD and Solaris under
- gcc.
- Some version have been successfully been build on MacOS, Solaris, UnixWare,
- And Tru64 UNIX without gcc, but you may run into problems with a particular
- later version.
-
-\layout Standard
-
-For a more complete guide to building the library, see the README file in
- the distribution.
-
-\layout Standard
-
-
-\begin_inset Quotes eld
-\end_inset
-
-make install
-\begin_inset Quotes erd
-\end_inset
-
- will install the libraries and header files for three modules: libical,
- libicalss.
- and libicalvcal.
- If you build shared objects, then these files will be installed:
-\layout Itemize
-
-ical.h
-\layout Itemize
-
-libical.a
-\layout Itemize
-
-libical.so
-\layout Itemize
-
-icalss.h
-\layout Itemize
-
-libicalss.a
-\layout Itemize
-
-libicalss.so
-\layout Itemize
-
-icalvcal.h
-\layout Itemize
-
-libicalvcal.a
-\layout Itemize
-
-libicalvcal.so
-\layout Standard
-
-The header files ical.h and icalss.h are combined header files, generated
- by concatenating together all of the header files in src/libical and src/libica
-lss respectively.
-
-\layout Section
-
-Structure
-\layout Standard
-
-The iCal calendar model is based on four types of objects: components, propertie
-s, values and parameters.
-
-\layout Standard
-
-Properties are the fundamental unit of information in iCal, and they work
- a bit like a hash entry, with a constant key and a variable value.
- Properties may also have modifiers, called parameters.
- In the iCal content line
-\layout LyX-Code
-
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
-\layout Standard
-
-The property name is
-\begin_inset Quotes eld
-\end_inset
-
-ORGANIZER,
-\begin_inset Quotes erd
-\end_inset
-
- the value of the property is
-\begin_inset Quotes eld
-\end_inset
-
-mrbig@host.com
-\begin_inset Quotes erd
-\end_inset
-
- and the
-\begin_inset Quotes eld
-\end_inset
-
-ROLE
-\begin_inset Quotes erd
-\end_inset
-
- parameter specifies that Mr Big is the chair of the meetings associated
- with this property.
-
-\layout Standard
-
-Components are groups of properties that represent the core objects of a
- calendar system, such as events or timezones.
- Components are delimited by
-\begin_inset Quotes eld
-\end_inset
-
-BEGIN
-\begin_inset Quotes erd
-\end_inset
-
- and
-\begin_inset Quotes eld
-\end_inset
-
-END
-\begin_inset Quotes erd
-\end_inset
-
- tags.
-
-\layout Standard
-\added_space_bottom 0.3cm
-When a component is sent across a network, if it is un-encrypted, it will
- look something like:
-\layout LyX-Code
-
-BEGIN:VCALENDAR
-\layout LyX-Code
-
-METHOD:REQUEST
-\layout LyX-Code
-
-PRODID: -//hacksw/handcal//NONSGML v1.0//EN
-\layout LyX-Code
-
-BEGIN:VEVENT
-\layout LyX-Code
-
-DTSTAMP:19980309T231000Z
-\layout LyX-Code
-
-UID:guid-1.host1.com
-\layout LyX-Code
-
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
-\layout LyX-Code
-
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:
-\layout LyX-Code
-
- MAILTO:employee-A@host.com
-\layout LyX-Code
-
-DESCRIPTION:Project XYZ Review Meeting
-\layout LyX-Code
-
-CATEGORIES:MEETING
-\layout LyX-Code
-
-CLASS:PUBLIC
-\layout LyX-Code
-
-CREATED:19980309T130000Z
-\layout LyX-Code
-
-SUMMARY:XYZ Project Review
-\layout LyX-Code
-
-DTSTART;TZID=US-Eastern:19980312T083000
-\layout LyX-Code
-
-DTEND;TZID=US-Eastern:19980312T093000
-\layout LyX-Code
-
-LOCATION:1CP Conference Room 4350
-\layout LyX-Code
-
-END:VEVENT
-\layout LyX-Code
-
-END:VCALENDAR
-\layout Standard
-
-Note that components can be nested; this example has both a VCALENDAR and
- a VEVENT component, one nested inside the other.
-
-\layout Standard
-
-The main goal of Libical is to offer a structured, type-safe to create,
- access and manipulate components and their properties, values and parameters.
-
-\layout Subsection
-
-Core iCal classes
-\layout Standard
-
-Libical is an object-based, data-oriented library.
- There are no real-objects, but the way the routines are named and organized
- results in the same sort of encapsulations and abstraction that are major
- features of Object-Orieted languages.
- Nearly all of the routines in the library are associated with an opaque
- data types and perform some operation on that data type.
- For instnace, a Property is declared as:
-\layout LyX-Code
-
-icalproperty *prop;
-\layout Standard
-
-Icalproperty is typedef'd to void, so the only way to manipulate it is through
- the accessor routines, all of which have a form similar to:
-\layout LyX-Code
-
-char* icalproperty_as_ical_string(icalproperty* prop);
-\layout Standard
-
-That is, the name of the 'class' is the first word in the routine name,
- and the first parameter is a pointer to the 'object.'
-\layout Standard
-
-Although the library does not actually have classes, we will use those terms
- since the behavior of these associations of data and routines is very similar
- to a class.
-
-\layout Subsubsection
-
-Properties
-\layout LyX-Code
-
-icalproperty *prop;
-\layout Standard
-
-Properties are represented with the icalproperty class and its many
-\begin_inset Quotes eld
-\end_inset
-
-derived
-\begin_inset Quotes erd
-\end_inset
-
- classes with on
-\begin_inset Quotes eld
-\end_inset
-
-derived
-\begin_inset Quotes erd
-\end_inset
-
- class per property type in RFC2445.
- Again, there is no actual inheritance relations, but there are clusters
- of routines that make this term useful.
- A property is a container for a single value and a set of parameters.
-
-\layout Subsubsection
-
-Components
-\layout LyX-Code
-
-icalcomponent *comp;
-\layout Standard
-
-In libical, components are represented with the icalcomponent class.
- Icalcomponent is a container for a set of other components and properties.
-\layout Subsubsection
-
-Values
-\layout LyX-Code
-
-icalvalue *value;
-\layout Standard
-
-Values are represented in a similar way to properties; a base class and
- many
-\begin_inset Quotes eld
-\end_inset
-
-derived
-\begin_inset Quotes eld
-\end_inset
-
- classes.
- A value is essentially a abstract handle on a single fundamental type,
- a structure or a union.
- You probably will never use a value directly, since for most operations
- you can get to its data through the property that holds it.
-
-\layout Subsubsection
-
-Parameters
-\layout LyX-Code
-
-icalparameter *param;
-\layout Standard
-
-Parameters are represetned in a similar way to properties, except that they
- contain only one value
-\layout Subsection
-
-Other elements of libical
-\layout Standard
-
-In addition to the core iCal classes, libical has many other types, structures,
- classes that aid in creating and using iCal components.
-
-\layout Subsubsection
-
-Enumerations and types
-\layout Standard
-
-Libical is strongly typed, so every component, property, parameter, and
- value type has an enumeration, and some have an associated structure or
- union.
-
-\layout Subsubsection
-
-The parser
-\layout Standard
-
-The libical parser offers a variety of ways to convert RFC2445 text into
- a libical iinsteral component structure.
- the parser can parse blocks of text as a string, or it can parse lin-by-line.
-\layout Subsubsection
-
-Error objects
-\layout Standard
-
-Libical has a substantial error reporting system for both programming errors
- and component usage errors.
-
-\layout Subsubsection
-
-Memory Management
-\layout Standard
-
-Since many of libicals interfaces return strings, the library has its own
- memory management system to elimiate the need to free every string returned
- from the libraru.
-
-\layout Subsubsection
-
-Storage classes
-\layout Standard
-
-The library also offers several classes to store components to flies, memory
- or databases.
-
-\layout Section
-
-Differences From RFCs
-\layout Standard
-
-Libical has been designed to follow the standards as closely as possible,
- so that the key objects in the standards are also key objects in the library.
- However, there are a few areas where the specifications are (arguably)
- irregular, and following them exactly would result in an unfriendly interface.
- These deviations make libical easier to use by maintaining a self-similar
- interface.
-
-\layout Subsection
-
-Pseudo Components
-\layout Standard
-
-Libical defines components for groups of properties that look and act like
- components, but are not defined as components in the specification.
- XDAYLIGHT and XSTANDARD are notable examples.
- These pseudo components group properties within the VTIMEZONE components.
- For instanace, the timezone properties associated with daylight savings
- time starts with
-\begin_inset Quotes eld
-\end_inset
-
-BEGIN:DAYLIGHT
-\begin_inset Quotes erd
-\end_inset
-
- and ends with
-\begin_inset Quotes eld
-\end_inset
-
-END:DAYLIGHT, just like other components, but is not defined as a component
- in RFC2445.
- ( See RFC2445, page 61 ) In Libical,this grouping is represented by the
- XDAYLIGHT component.
- Standard iCAL components all start with the letter
-\begin_inset Quotes eld
-\end_inset
-
-V,
-\begin_inset Quotes erd
-\end_inset
-
- while pseudo components start with
-\begin_inset Quotes erd
-\end_inset
-
-X.
-\begin_inset Quotes erd
-\end_inset
-
-
-\layout Standard
-
-There are also pseudo components that are conceptually derived classes of
- VALARM.
- RFC2446 defines what properties may be included in each component, and
- for VALARM, the set of properties it may have depends on the value of the
- ACTION property.
-
-\layout Standard
-
-For instance, if a VALARM component has an ACTION property with the value
- of
-\begin_inset Quotes eld
-\end_inset
-
-AUDIO,
-\begin_inset Quotes erd
-\end_inset
-
- the component must also have an
-\begin_inset Quotes eld
-\end_inset
-
-ATTACH
-\begin_inset Quotes erd
-\end_inset
-
- property.
- However, if the ACTION value is
-\begin_inset Quotes eld
-\end_inset
-
-DISPLAY,
-\begin_inset Quotes erd
-\end_inset
-
- the component must have a DESCRIPTION property.
-
-\layout Standard
-
-To handle these various, complex restrictions, libical has pseudo components
- for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREA
-LARM.
-
-\layout Subsection
-
-Combined Values
-\layout Standard
-
-Many values can take more than one type.
- TRIGGER, for instance, can have a value type of with DURATION or of DATE-TIME.
- These multiple types make it difficult to create routines to return the
- value associated with a property.
-
-\layout Standard
-
-It is natural to have interfaces that would return the value of a property,
- but it is cumbersome for a single routine to return multiple types.
- So, in libical, properties that can have multiple types are given a single
- type that is the union of their RFC2445 types.
- For instance, in libical, the value of the TRIGGER property resolves to
- struct icaltriggertype.
- This type is a union of a DURATION and a DATE-TIME.
-
-\layout Subsection
-
-Multi-Valued Properties
-\layout Standard
-
-Some properties, such as CATEGORIES have only one value type, but each CATEGORIE
-S property can have multiple value instances.
- This also results in a cumbersome interface -- CATEGORIES accessors would
- have to return a list while all other accessors returned a single value.
- In libical, all properties have a single value, and multi-valued properties
- are broken down into multiple single valued properties during parsing.
- That is, an input line like,
-\layout LyX-Code
-
-CATEGORIES: work, home
-\layout Standard
-
-becomes in libical's internal representation
-\layout LyX-Code
-
-CATEGORIES: work
-\layout LyX-Code
-
-CATEGORIES: home
-\layout Standard
-
-Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY ) to
- exist as both a multi-values property and as multiple single value properties,
- while others ( like CATEGORIES ) can only exist as single multi-valued
- properties.
- This makes the internal representation for CATEGORIES illegal.
- However when you convert a component to a string, the library will collect
- all of the CATEGORIES properties into one.
-
-\layout Section
-
-Using libical
-\layout Subsection
-
-Creating Components
-\layout Standard
-
-There are three ways to create components in Libical:
-\layout Itemize
-
-Create individual components, properties and parameters and assemble them
- into structures
-\layout Itemize
-
-Build complete components with nested vaargs calls
-\layout Itemize
-
-Parse bits of text
-\layout Itemize
-
-Parse entire files
-\layout Subsubsection
-
-Constructor Interfaces
-\layout Standard
-
-Using constructor interfaces, you create each of the objects separately
- and then assemble them in to components:
-\layout LyX-Code
-
-icalcomponent *event;
-\layout LyX-Code
-
-icalproperty *prop;
-\layout LyX-Code
-
-icalparameter *param;
-\layout LyX-Code
-
-struct icaltimetype atime;
-\layout LyX-Code
-
-\layout LyX-Code
-
-event = icalcomponent_new(ICAL_VEVENT_COMPONENT);
-\layout LyX-Code
-
-prop = icalproperty_new_dtstamp(atime);
-\layout LyX-Code
-
-icalcomponent_add_property(event, prop);
-\layout LyX-Code
-
-\layout LyX-Code
-
-prop = icalproperty_new_uid(''guid-1.host1.com'') );
-\layout LyX-Code
-
-icalcomponent_add_property(event,prop);
-\layout LyX-Code
-
-\layout LyX-Code
-
-prop=icalproperty_new_organizer(''mrbig@host.com'');
-\layout LyX-Code
-
-param = icalparameter_new_role(ICAL_ROLE_CHAIR)
-\layout LyX-Code
-
-icalproperty_add_parameter(prop, param);
-\layout LyX-Code
-
-\layout LyX-Code
-
-icalcomponent_add_property(event,prop);
-\layout Standard
-
-Notice that libical uses a semi-object-oriented style of interface.
- Most things you work with are objects, that are instantiated with a constructor
- that has
-\begin_inset Quotes eld
-\end_inset
-
-new
-\begin_inset Quotes erd
-\end_inset
-
- in the name.
- Also note that, other than the object reference, most structure data is
- passed in to libical routines by value.
- Libical has some complex but very regular memory handling rules.
- These are detailed in section
-\begin_inset LatexCommand \ref{sec:memory}
-
-\end_inset
-
-.
-\layout Standard
-
-If any of the constructors fail, they will return 0.
- If you try to insert 0 into a property or component, or use a zero-valued
- object reference, libical will either silently ignore the error or will
- abort with an error message.
- This behavior is controlled by a compile time flag (ICAL_ERRORS_ARE_FATAL),
- and will abort by default.
-
-\layout Subsubsection
-
-vaargs Constructors
-\layout Standard
-
-There is another way to create complex components, which is arguably more
- elegant, if you are not horrified by varargs.
- The varargs constructor interface allows you to create intricate components
- in a single block of code.
- Here is the previous examples in the vaargs style.
-
-\layout LyX-Code
-
- calendar =
-\layout LyX-Code
-
- icalcomponent_vanew(
-\layout LyX-Code
-
- ICAL_VCALENDAR_COMPONENT,
-\layout LyX-Code
-
- icalproperty_new_version(''2.0''),
-\layout LyX-Code
-
- icalproperty_new_prodid(
-\layout LyX-Code
-
- ''-//RDU Software//NONSGML HandCal//EN''),
-\layout LyX-Code
-
- icalcomponent_vanew(
-\layout LyX-Code
-
- ICAL_VEVENT_COMPONENT,
-\layout LyX-Code
-
- icalproperty_new_dtstamp(atime),
-\layout LyX-Code
-
- icalproperty_new_uid(''guid-1.host1.com''),
-\layout LyX-Code
-
- icalproperty_vanew_organizer(
-\layout LyX-Code
-
- ''mrbig@host.com''),
-\layout LyX-Code
-
- icalparameter_new_role(ICAL_ROLE_CHAIR),
-\layout LyX-Code
-
- 0
-\layout LyX-Code
-
- ),
-\layout LyX-Code
-
- icalproperty_vanew_attendee(
-\layout LyX-Code
-
- ''employee-A@host.com'',
-\layout LyX-Code
-
- icalparameter_new_role(
-\layout LyX-Code
-
- ICAL_ROLE_REQPARTICIPANT),
-\layout LyX-Code
-
- icalparameter_new_rsvp(1),
-\layout LyX-Code
-
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP),
-\layout LyX-Code
-
- 0
-\layout LyX-Code
-
- ),
-\layout LyX-Code
-
- icalproperty_new_location(
-\layout LyX-Code
-
- "1CP Conference Room 4350"),
-\layout LyX-Code
-
- 0
-\layout LyX-Code
-
- ),
-\layout LyX-Code
-
- 0
-\layout LyX-Code
-
- );
-\layout Standard
-
-This form is similar to the constructor form , except that the constructors
- have
-\begin_inset Quotes eld
-\end_inset
-
-vanew
-\begin_inset Quotes erd
-\end_inset
-
- instead of
-\begin_inset Quotes eld
-\end_inset
-
-new
-\begin_inset Quotes erd
-\end_inset
-
- in the name.
- The arguments are similar too, except that the component constructor can
- have a list of properties, and the property constructor can have a list
- of parameters.
- Be sure to terminate every list with a '0', or your code will crash, if
- you are lucky.
-
-\layout Subsubsection
-
-Parsing Text
-\layout Standard
-
-Several routines are available for generating objects from text.
- For properties, use:
-\layout LyX-Code
-
-icalproperty* p;
-\layout LyX-Code
-
-p = icalproperty_new_from_string("DTSTART:19970101T120000Z
-\backslash
-n");
-\layout Standard
-
-For parameters, use:
-\layout LyX-Code
-
-icalparameter *param
-\layout LyX-Code
-
-param = icalparameter_new_from_string("PARTSTAT=ACCEPTED");
-\layout Standard
-
-The final way to create components will probably be the most common; you
- can create components from RFC2445 compliant text.
- If you have the string in memory, use
-\layout LyX-Code
-
-icalcomponent* icalcomponent_new_from_string(char* str);
-\layout Standard
-
-If the string contains only one component, the routine will return the component
- in libical form.
- If the string contains multiple components, the multiple components will
- be returned as the children of an ICAL_XROOT_COMPONENT component.
- This routine is identical to ( and actually uses ) icalparser_parse_string(char
-* str).
-\layout Standard
-
-Parsing a whole string may seem wasteful if you want to pull a large component
- off of the network or from a file; you may prefer to parse the component
- line by line.
- This is possible too by using:
-\layout LyX-Code
-
-icalparser* icalparser_new();
-\layout LyX-Code
-
-void icalparser_free(icalparser* parser);
-\layout LyX-Code
-
-icalparser_get_line(parser,read_stream);
-\layout LyX-Code
-
-icalparser_add_line(parser,line);
-\layout LyX-Code
-
-icalparser_set_gen_data(parser,stream)
-\layout Standard
-
-These routines will construct a parser object to which you can add lines
- of input and retrieve any components that the parser creates from the input.
- These routines work by specifing an adaptor routine to get string data
- from a source.
- For an example:
-\layout LyX-Code
-
-char* read_stream(char *s, size_t size, void *d)
-\layout LyX-Code
-
-{
-\layout LyX-Code
-
- char *c = fgets(s,size, (FILE*)d);
-\layout LyX-Code
-
- return c;
-\layout LyX-Code
-
-}
-\layout LyX-Code
-
-main() {
-\layout LyX-Code
-
- char* line;
-\layout LyX-Code
-
- icalcomponent *c;
-\layout LyX-Code
-
- icalparser *parser = icalparser_new();
-\layout LyX-Code
-
- FILE* stream = fopen(argv[1],"r");
-\layout LyX-Code
-
- icalparser_set_gen_data(parser,stream);
-\layout LyX-Code
-
- do{
-\layout LyX-Code
-
- line = icalparser_get_line(parser,read_stream);
-\layout LyX-Code
-
- c = icalparser_add_line(parser,line);
-\layout LyX-Code
-
- if (c != 0){
-\layout LyX-Code
-
- printf("%s",icalcomponent_as_ical_string(c));
-\layout LyX-Code
-
- icalparser_claim(parser);
-\layout LyX-Code
-
- printf("
-\backslash
-n---------------
-\backslash
-n");
-\layout LyX-Code
-
- icalcomponent_free(c);
-\layout LyX-Code
-
- }
-\layout LyX-Code
-
- if (line != 0)
-\layout LyX-Code
-
- icalmemory_free_buffer(line);
-\layout LyX-Code
-
- } while ( line != 0);
-\layout LyX-Code
-
-}
-\layout Standard
-
-The parser object parameterizes the routine used to get input lines with
- icalparser_set_gen_data() and
-\emph on
-
-\emph default
-icalparser_get_line().
- In this example, the routine read_stream() will fetch the next line from
- a stream, with the stream passed in as the void* parameter d.
- The parser calls read_stream() from icalparser_get_line(), but it also
- needs to know what stream to use.
- This is set by the call to icalparser_set_gen_data().
- By using a different routine for read_stream or passing in different data
- with icalparser_set_gen_data, you can connect to any data source.
-
-\layout Standard
-
-Using the same mechanism, other implementations could read from memory buffers,
- sockets or other interfaces.
-
-\layout Standard
-
-Since the example code is a very common way to use the parser, there is
- a convenience routine;
-\layout LyX-Code
-
-icalcomponent* icalparser_parse(icalparser *parser,
-\layout LyX-Code
-
- char* (*line_gen_func)(char *s, size_t size, void* d))
-\layout Standard
-
-To use this routine, you still must construct the parser object and pass
- in a reference to a line reading routine.
- If the parser can create a single component from the input, it will return
- a pointer to the newly constructed component.
- If the parser can construct multiple components from the input, it will
- return a reference to an XROOT component ( of type ICAL_XROOT_COMPONENT.)
- This XROOT component will hold all of the components constructed from the
- input as children.
-
-\layout Subsection
-
-Accessing Components
-\layout Standard
-
-Given a reference to a component, you probably will want to access the propertie
-s, parameters and values inside.
- Libical interfaces let you find sub-components, add and remove sub-components,
- and do the same three operations on properties.
-
-\layout Subsubsection
-
-Finding Components
-\layout Standard
-
-To find a sub-component of a component, use:
-\layout LyX-Code
-
-icalcomponent* icalcomponent_get_first_component(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalcomponent_kind kind);
-\layout Standard
-
-This routine will return a reference to the first component of the type
- 'kind.' The key kind values, listed in icalenums.h are:
-\layout LyX-Code
-
-ICAL_ANY_COMPONENT
-\layout LyX-Code
-
-ICAL_VEVENT_COMPONENT
-\layout LyX-Code
-
-ICAL_VTODO_COMPONENT
-\layout LyX-Code
-
-ICAL_VJOURNAL_COMPONENT
-\layout LyX-Code
-
-ICAL_VCALENDAR_COMPONENT
-\layout LyX-Code
-
-ICAL_VFREEBUSY_COMPONENT
-\layout LyX-Code
-
-ICAL_VALARM_COMPONENT
-\layout Standard
-
-These are only the most common components; there are many more listed in
- icalenums.h.
-\layout Standard
-
-As you might guess, if there is more than one subcomponent of the type you
- have chosen, this routine will return only the first.
- to get at the others, you need to iterate through the component.
-
-\layout Subsubsection
-
-Iterating Through Components
-\layout Standard
-
-Iteration requires a second routine to get the next subcomponent after the
- first:
-\layout LyX-Code
-
-icalcomponent* icalcomponent_get_next_component(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalcomponent_kind kind);
-\layout Standard
-
-With the 'first' and 'next' routines, you can create a for loop to iterate
- through all of a components subcomponents
-\layout LyX-Code
-
- for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
-\layout LyX-Code
-
- c != 0;
-\layout LyX-Code
-
- c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT))
-\layout LyX-Code
-
-{
-\layout LyX-Code
-
- do_something(c);
-\layout LyX-Code
-
-}
-\layout Standard
-
-This code bit wil iterate through all of the subcomponents in 'comp' but
- you can select a specific type of component by changing ICAL_ANY_COMPONENT
- to another component type.
-\layout Subsubsection
-
-Using Component Iterators
-\layout Standard
-
-The iteration model in the previous section requires the component to keep
- the state of the iteration.
- So, you could not use this model to perform a sorting operations, since
- you'd need two iterators and there is only space for one.
- If you ever call icalcomponent_get_first_component() when an iteration
- is in progress, the pointer will be reset to the beginning.
-
-\layout Standard
-
-To solve this problem, there are also external iterators for components.
- The routines associated with these external iterators are:
-\layout LyX-Code
-
-icalcompiter icalcomponent_begin_component(icalcomponent* component, icalcompone
-nt_kind kind);
-\layout LyX-Code
-
-icalcompiter icalcomponent_end_component(icalcomponent* component, icalcomponent
-_kind kind);
-\layout LyX-Code
-
-icalcomponent* icalcompiter_next(icalcompiter* i);
-\layout LyX-Code
-
-icalcomponent* icalcompiter_prior(icalcompiter* i);
-\layout LyX-Code
-
-icalcomponent* icalcompiter_deref(icalcompiter* i);
-\layout Standard
-
-The _begin_() and _end_() routines return a new iterator that points to
- the beginning and ending of the list of subcomponent for the given component,
- and the kind argument works like the kind argument for internal iterators.
-
-\layout Standard
-
-After creating an iterators, use _next_() and _prior_() to step forward
- and backward through the list and get the component that the iterator points
- to, and use _deref() to return the component that the iterator points to
- without moving the iterator.
- All routines will return 0 when they move to point off the end of the list.
-
-\layout Standard
-
-Here is an example of a loop using these routines:
-\layout LyX-Code
-
-for(
-\layout LyX-Code
-
- i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT);
-
-\layout LyX-Code
-
- icalcompiter_deref(&i)!= 0;
-\layout LyX-Code
-
- icalcompiter_next(&i)
-\layout LyX-Code
-
-) {
-\layout LyX-Code
-
- icalcomponent *this = icalcompiter_deref(&i);
-\layout LyX-Code
-
-}
-\layout Subsubsection
-
-Removing Components
-\layout Standard
-
-Removing an element from a list while iterating through the list with the
- internal iterators can cause problems, since you will probably be removing
- the element that the internal iterator points to.
- The _remove() routine will keep the iterator valid by moving it to the
- next component, but in a normal loop, this will result in two advances
- per iteration, and you will remove only every other component.
- To avoid the problem, you will need to step the iterator ahead of the
- element you are going to remove, like this:
-\layout LyX-Code
-
-for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT);
-
-\layout LyX-Code
-
- c != 0;
-\layout LyX-Code
-
- c = next
-\layout LyX-Code
-
-{
-\layout LyX-Code
-
- next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT);
-\layout LyX-Code
-
- icalcomponent_remove_component(parent_comp,c);
-\layout LyX-Code
-
-}
-\layout Standard
-
-Another way to remove components is to rely on the side effect of icalcomponent_
-remove_component: if component iterator in the parent component is pointing
- to the child that will be removed, it will move the iterator to the component
- after the child.
- The following code will exploit this behavior:
-\layout LyX-Code
-
-icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT);
-\layout LyX-Code
-
-while((c=icalcomponent_get_current_component(c)) != 0 ){
-\layout LyX-Code
-
- if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){
-\layout LyX-Code
-
- icalcomponent_remove_component(parent_comp,inner);
-\layout LyX-Code
-
- } else {
-\layout LyX-Code
-
- icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT);
-
-\layout LyX-Code
-
- }
-\layout LyX-Code
-
-}
-\layout Subsubsection
-
-Working with properties and parameters
-\layout Standard
-
-Finding, iterating and removing properties works the same as it does for
- components, using the property-specific or parameter-specific interfaces:
-
-\layout LyX-Code
-
-icalproperty* icalcomponent_get_first_property(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalproperty_kind kind);
-\layout LyX-Code
-
-icalproperty* icalcomponent_get_next_property(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalproperty_kind kind);
-\layout LyX-Code
-
-void icalcomponent_add_property(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalproperty* property);
-\layout LyX-Code
-
-void icalcomponent_remove_property(
-\layout LyX-Code
-
- icalcomponent* component,
-\layout LyX-Code
-
- icalproperty* property);
-\layout Standard
-
-For parameters:
-\layout LyX-Code
-
-icalparameter* icalproperty_get_first_parameter(
-\layout LyX-Code
-
- icalproperty* prop,
-\layout LyX-Code
-
- icalparameter_kind kind);
-\layout LyX-Code
-
-icalparameter* icalproperty_get_next_parameter(
-\layout LyX-Code
-
- icalproperty* prop,
-\layout LyX-Code
-
- icalparameter_kind kind);
-\layout LyX-Code
-
-void icalproperty_add_parameter(
-\layout LyX-Code
-
- icalproperty* prop,
-\layout LyX-Code
-
- icalparameter* parameter);
-\layout LyX-Code
-
-void icalproperty_remove_parameter(
-\layout LyX-Code
-
- icalproperty* prop,
-\layout LyX-Code
-
- icalparameter_kind kind);
-\layout Standard
-
-Note that since there should be only one parameter of each type in a property,
- you will rarely need to use icalparameter_get_nect_paameter.
-\layout Subsubsection
-
-Working with values
-\layout Standard
-
-Values are typically part of a property, although they can exist on their
- own.
- You can manipulate them either as part of the property or independently.
-\layout Standard
-
-The most common way to work with values to is to manipulate them from they
- properties that contain them.
- This involves fewer routine calls and intermediate variables than working
- with them independently, and it is type-safe.
-
-\layout Standard
-
-For each property, there are a _get_ and a _set_ routine that access the
- internal value.
- For instanace, for the UID property, the routines are:
-\layout LyX-Code
-
-void icalproperty_set_uid(icalproperty* prop, const char* v)
-\layout LyX-Code
-
-const char* icalproperty_get_uid(icalproperty* prop)
-\layout Standard
-
-For multi-valued properties, like ATTACH, the value type is usually a struct
- or union that holds both possible types.
-
-\layout Standard
-
-If you want to work with the underlying value object, you can get and set
- it with:
-\layout LyX-Code
-
-icalvalue* icalproperty_get_value (icalproperty* prop)
-\layout LyX-Code
-
-void icalproperty_set_value(icalproperty* prop, icalvalue* value);
-\layout Standard
-
-Icalproperty_get_value() will return a reference that you can manipulate
- with other icalvalue routines.
- Most of the time, you will have to know what the type of the value is.
- For instance, if you know that the value is a DATETIME type, you can manipulate
- it with:
-\layout LyX-Code
-
-struct icaltimetype icalvalue_get_datetime(icalvalue* value);
-\layout LyX-Code
-
-void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v);
-\layout Standard
-
-When working with an extension property or value (and X-PROPERTY or a property
- that has the parameter VALUE=x-name ) the value type is always a string.
- To get and set the value, use:
-\layout LyX-Code
-
-void icalproperty_set_x(icalproperty* prop, char* v);
-\layout LyX-Code
-
-char* icalproperty_get_x(icalproperty* prop);
-\layout Standard
-
-All X properties have the type of ICAL_X_PROPERTY, so you will need these
- routines to get and set the name of the property:
-\layout LyX-Code
-
-char* icalproperty_get_x_name(icalproperty* prop)
-\layout LyX-Code
-
-void icalproperty_set_x_name(icalproperty* prop, char* name);
-\layout Subsubsection
-
-Checking Component Validity
-\layout Standard
-
-RFC 2446 defines rules for what properties must exist in a component to
- be used for transferring scheduling data.
- Most of these rules relate to the existence of properties relative to the
- METHOD property, which declares what operation a remote receiver should
- use to process a component.
- For instance, if the METHOD is REQUEST and the component is a VEVENT, the
- sender is probably asking the receiver to join in a meeting.
- In this case, RFC2446 says that the component must specify a start time
- (DTSTART) and list the receiver as an attendee (ATTENDEE).
-
-\layout Standard
-
-Libical can check these restrictions with the routine:
-\layout LyX-Code
-
-int icalrestriction_check(icalcomponent* comp);
-\layout Standard
-
-This routine returns 0 if the component does not pass RFC2446 restrictions,
- or if the component is malformed.
- The component you pass in
-\emph on
-must
-\emph default
- be a VCALENDAR, with one or more children, like the examples in RFC2446.
-
-\layout Standard
-
-When this routine runs, it will insert new properties into the component
- to indicate any errors it finds.
- See section 6.5.3, X-LIC-ERROR for more information about these error properties.
-
-\layout Subsubsection
-
-Converting Components to Text
-\layout Standard
-
-To create an RFC2445 compliant text representation of an object, use one
- of the *_as_ical_string() routines:
-\layout LyX-Code
-
-char* icalcomponent_as_ical_string (icalcomponent* component)
-\layout LyX-Code
-
-char* icalproperty_as_ical_string (icalproperty* property)
-\layout LyX-Code
-
-char* icalparameter_as_ical_string (icalparameter* parameter)
-\layout LyX-Code
-
-char* icalvalue_as_ical_string (icalvalue* value)
-\layout Standard
-
-In most cases, you will only use icalcomponent_as_ical_string (), since
- it will cascade and convert all of the parameters, properties and values
- that are attached to the root component.
-\layout Standard
-
-Icalproperty_as_ical_string() will terminate each line with the RFC2445
- specified line terminator
-\begin_inset Quotes eld
-\end_inset
-
-
-\backslash
-
-\backslash
-n
-\begin_inset Quotes erd
-\end_inset
-
- However, if you compile with the symbol ICAL_UNIX_NEWLINE undefined, (
- it is defined by default) it will terminate lines with
-\begin_inset Quotes eld
-\end_inset
-
-
-\backslash
-
-\backslash
-n
-\backslash
-
-\backslash
-r
-\begin_inset Quotes erd
-\end_inset
-
-
-\layout Standard
-
-Remember that the string returned by these routines is owned by the library,
- and will eventually be re-written.
- You should copy it if you want to preserve it.
-
-\layout Subsection
-
-Time
-\layout Subsubsection
-
-Time structure
-\layout Standard
-
-LIbical defines it's own time structure for storing all dates and times.
- It would have been nice to re-use the C library's
-\emph on
-struct tm,
-\emph default
-but that structure does not differentiate between dates and times, and between
- local time and UTC.
- The libical structure is:
-\layout LyX-Code
-
-struct icaltimetype {
-\layout LyX-Code
-
- int year;
-\layout LyX-Code
-
- int month;
-\layout LyX-Code
-
- int day;
-\layout LyX-Code
-
- int hour;
-\layout LyX-Code
-
- int minute;
-\layout LyX-Code
-
- int second;
-\layout LyX-Code
-
- int is_utc; /* 1-> time is in UTC timezone */
-\layout LyX-Code
-
- int is_date; /* 1 -> interpret this as date.
- */ };
-\layout Standard
-
-The year, month, day, hour, minute and second fields hold the broken-out
- time values.
- The is_utc field distinguishes between times in UTC and a local time zone.
- The is_date field indicates if the time should be interpreted only as a
- date.
- If it is a date, the hour, minute and second fields are assumed to be zero,
- regardless of their actual vaules.
-
-\layout Subsubsection
-
-Creating time structures
-\layout Standard
-
-There are several ways to create a new icaltimetype structure:
-\layout LyX-Code
-
-struct icaltimetype icaltime_from_string(const char* str);
-\layout LyX-Code
-
-struct icaltimetype icaltime_from_timet(time_t v, int is_date);
-\layout LyX-Code
-
-\layout Standard
-
-Icaltime_from_string takes any RFC2445 compliant time string:
-\layout LyX-Code
-
-struct icaltimetype tt = icaltime_from_string("19970101T103000");
-\layout Standard
-
-Icaltime_from_timet takes a timet value, representing seconds past the POSIX
- epoch, and a flag to indicate if the time is a date.
- Dates have an identical structure to a time, but the time portion ( hours,
- minuts and seconds ) is always 00:00:00.
- Dates act differently in sorting an comparision, and they have a different
- string representation in RFC2445.
-
-\layout Subsubsection
-
-Time manipulating routines
-\layout Standard
-
-The null time value is used to indicate that the data in the structure is
- not a valid time.
-\layout LyX-Code
-
-struct icaltimetype icaltime_null_time(void);
-\layout LyX-Code
-
-int icaltime_is_null_time(struct icaltimetype t);
-\layout Standard
-
-It is sensible for the broken-out time fields to contain values that are
- not permitted in an ISO compliant time string.
- For instance, the seconds field can hold values greater than 59, and the
- hours field can hold values larger than 24.
- The excessive values will be rolled over into the next larger field when
- the structure is normalized.
-
-\layout LyX-Code
-
-struct icaltimetype icaltime_normalize(struct icaltimetype t);
-\layout Standard
-
-Normalizing allows you to do arithmetic operations on time values.
-
-\layout LyX-Code
-
-struct icaltimetype tt = icaltime_from_string(
-\begin_inset Quotes eld
-\end_inset
-
-19970101T103000
-\begin_inset Quotes erd
-\end_inset
-
-);
-\layout LyX-Code
-
-tt.days +=3
-\layout LyX-Code
-
-tt.second += 70;
-\layout LyX-Code
-
-tt = icaltime_normalize(tt);
-\layout Standard
-
-There are several routines to get the day of the week or month, etc, from
- a time structure.
-\layout LyX-Code
-
-short icaltime_day_of_year(struct icaltimetype t);
-\layout LyX-Code
-
-struct icaltimetype icaltime_from_day_of_year(short doy, short year);
-\layout LyX-Code
-
-short icaltime_day_of_week(struct icaltimetype t);
-\layout LyX-Code
-
-short icaltime_start_doy_of_week(struct icaltimetype t);
-\layout LyX-Code
-
-short icaltime_week_number(short day_of_month, short month, short year);
-\layout LyX-Code
-
-struct icaltimetype icaltime_from_week_number(short week_number, short year);
-\layout LyX-Code
-
-short icaltime_days_in_month(short month,short year);
-\layout Standard
-
-Two routines convert time structures to and from the number of seconds since
- the POSIX epoch.
- The is_date field indicates whether or not the hour, minute and second
- fields should be used in the conversion.
-\layout LyX-Code
-
-struct icaltimetype icaltime_from_timet(time_t v, int is_date);
-\layout LyX-Code
-
-time_t icaltime_as_timet(struct icaltimetype);
-\layout Standard
-
-The compare routine works exactly like strcmp, but on time structures.
-
-\layout LyX-Code
-
-int icaltime_compare(struct icaltimetype a,struct icaltimetype b);
-\layout Standard
-
-The following routines convert between UTC and a named timezone.
- The tzid field must be a timezone name from the Olsen database, such as
-
-\begin_inset Quotes eld
-\end_inset
-
-America/Los_Angeles.
-\begin_inset Quotes erd
-\end_inset
-
-
-\layout Standard
-
-The utc_offset routine returns the offset of the named time zone from UTC,
- in seconds.
-
-\layout Standard
-
-The tt parameter in the following routines indicates the date on which the
- conversion should be made.
- The tt parameter is necessary because timezones have many different rules
- for when daylight savings time is used, and these rules can change over
- time.
- So, for a single timezone one year may have daylight savings time on March
- 15, but for other years March 15 may be standard time, and some years may
- have standard time all year.
-
-\layout LyX-Code
-
-int icaltime_utc_offset(struct icaltimetype tt, char* tzid);
-\layout LyX-Code
-
-int icaltime_local_utc_offset();
-\layout LyX-Code
-
-struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid);
-\layout LyX-Code
-
-struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid);
-\layout LyX-Code
-
-struct icaltimetype icaltime_as_local(struct icaltimetype tt);
-\layout Subsection
-
-Storing Objects
-\layout Standard
-
-The libical distribution includes a separate library, libicalss, that allows
- you to store iCal component data to disk in a variety of ways.
- This library also includes code to implement the CSTP protocol of CAP and
- has some routines for deciphering incomming messages.
-
-\layout Standard
-
-The file storage routines are organized in an inheritance heirarchy that
- is rooted in icalset, with the derived class icalfileset and icaldirset.
- Icalfileset stores components to a file, while icaldirset stores components
- to multiple files, one per month based on DTSTAMP.
- Other storages classess, for storage to a heap or a mysql database are
- planned for the future.
-
-\layout Standard
-
-All of the icalset derived classes have the same interface:
-\layout LyX-Code
-
-\layout LyX-Code
-
-icaldirset* icaldirset_new(const char* path);
-\layout LyX-Code
-
-void icaldirset_free(icaldirset* store);
-\layout LyX-Code
-
-const char* icaldirset_path(icaldirset* store);
-\layout LyX-Code
-
-void icaldirset_mark(icaldirset* store);
-\layout LyX-Code
-
-icalerrorenum icaldirset_commit(icaldirset* store);
-\layout LyX-Code
-
-icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent*
- comp);
-\layout LyX-Code
-
-icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent*
- comp);
-\layout LyX-Code
-
-int icaldirset_count_components(icaldirset* store, icalcomponent_kind kind);
-\layout LyX-Code
-
-icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge);
-\layout LyX-Code
-
-void icaldirset_clear(icaldirset* store);
-\layout LyX-Code
-
-icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid);
-\layout LyX-Code
-
-int icaldirset_has_uid(icaldirset* store, const char* uid);
-\layout LyX-Code
-
-icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent *c);
-\layout LyX-Code
-
-icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc,
- icalcomponent *newc);
-\layout LyX-Code
-
-icalcomponent* icaldirset_get_current_component(icaldirset* store);
-\layout LyX-Code
-
-icalcomponent* icaldirset_get_first_component(icaldirset* store);
-\layout LyX-Code
-
-icalcomponent* icaldirset_get_next_component(icaldirset* store);
-\layout Subsubsection
-
-Creating a new set
-\layout Standard
-
-You can create a new set from either the base class or the direved class.
- From the base class use one of:
-\layout LyX-Code
-
-icalset* icalset_new_file(const char* path);
-\layout LyX-Code
-
-icalset* icalset_new_dir(const char* path);
-\layout LyX-Code
-
-icalset* icalset_new_heap(void);
-\layout LyX-Code
-
-icalset* icalset_new_mysql(const char* path);
-\layout Standard
-
-You can also create a new set based on the derived class, For instance,
- with icalfileset:
-\layout LyX-Code
-
-icalfileset* icalfileset_new(const char* path);
-\layout LyX-Code
-
-icalfileset* icalfileset_new_open(const char* path, int flags, mode_t mode);
-\layout Standard
-
-Icaset_new_file is identical to icalfileset_new.
- BOth routines will open an existing file for readinga and writing, or create
- a new file if it does not exist.
- Icalfilset_new_open takes the same arguments as the open() system routine
- and behaves in the same way.
-
-\layout Standard
-
-The icalset and icalfilset objects are somewhat interchangable -- you can
- use an icalfileset* as an argument to any of the icalset routines.
-\layout Standard
-
-The following examples will all use icalfileset routines; using the other
- icalset derived classess will be similar.
-
-\layout Subsubsection
-
-Adding, Finding and Removing Components
-\layout Standard
-
-To add components to a set, use:
-\layout LyX-Code
-
-icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent*
- child);
-\layout Standard
-
-The fileset keeps an inmemory copy of the components, and this set must
- be written back to the file ocassionally.
- There are two routines to manage this:
-\layout LyX-Code
-
-void icalfileset_mark(icalfileset* cluster);
-\layout LyX-Code
-
-icalerrorenum icalfileset_commit(icalfileset* cluster);
-\layout Standard
-
-Icalfileset_mark indicates that the in-memory components have changed.
- Calling the _add_component routine will call _mark automatically, but you
- may need to call it yourself if you have made a change to an existing component.
- The _commit routine writes the data base to disk, but only if it is marked.
- The _commit routine is called automatically when the icalfileset is freed.
-
-\layout Standard
-
-To iterate through the components in a set, use:
-\layout LyX-Code
-
-icalcomponent* icalfileset_get_first_component(icalfileset* cluster);
-\layout LyX-Code
-
-icalcomponent* icalfileset_get_next_component(icalfileset* cluster);
-\layout LyX-Code
-
-icalcomponent* icalfileset_get_current_component (icalfileset* cluster);
-
-\layout Standard
-
-These routines work like the corresponding routines from icalcomponent,
- except that their output is filtered through a gauge.
- A gauge is a test for the properties within a components; only components
- that pass the test are returned.
- A gauge can be constructed from a MINSQL string with:
-\layout LyX-Code
-
-icalgauge* icalgauge_new_from_sql(char* sql);
-\layout Standard
-
-Then, you can add the gauge to the set with :
-\layout LyX-Code
-
-icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge);
-\layout Standard
-
-Here is an example that puts all of these routines together:
-\layout LyX-Code
-
-
-\latex no_latex
-void test_fileset()
-\layout LyX-Code
-
-
-\latex no_latex
-{
-\layout LyX-Code
-
-
-\latex no_latex
- icalfileset *fs;
-\layout LyX-Code
-
-
-\latex no_latex
- icalcomponent *c;
-\layout LyX-Code
-
-
-\latex no_latex
- int i;
-\layout LyX-Code
-
-
-\latex no_latex
- char *path = "test_fileset.ics";
-\layout LyX-Code
-
-
-\latex no_latex
- icalgauge *g = icalgauge_new_from_sql(
-\layout LyX-Code
-
-
-\latex no_latex
- "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND DTSTART
- <= '20000106T120000Z'");
-\layout LyX-Code
-
-
-\latex no_latex
-
-\layout LyX-Code
-
-
-\latex no_latex
-fs = icalfileset_new(path);
-\layout LyX-Code
-
-
-\layout LyX-Code
-
-
-\latex no_latex
-for (i = 0; i!= 10; i++){
-\layout LyX-Code
-
-
-\latex no_latex
- c = make_component(i);
-\latex default
- /* Make a new component where DTSTART has month of i */
-\layout LyX-Code
-
-
-\latex no_latex
- icalfileset_add_component(fs,c);
-\layout LyX-Code
-
-
-\latex no_latex
- }
-\layout LyX-Code
-
-\layout LyX-Code
-
-
-\latex no_latex
- icalfileset_commit(fs);
-\latex default
- /* Write to disk */
-\layout LyX-Code
-
-\layout LyX-Code
-
-
-\latex no_latex
- icalfileset_select(fs,g);
-\latex default
- /* Set the gauge to filter components */
-\layout LyX-Code
-
-
-\latex no_latex
-
-\layout LyX-Code
-
-
-\latex no_latex
- for (c = icalfileset_get_first_component(fs);
-\layout LyX-Code
-
-
-\latex no_latex
- c != 0;
-\layout LyX-Code
-
-
-\latex no_latex
- c = icalfileset_get_next_component(fs)){
-\layout LyX-Code
-
-
-\latex no_latex
- struct icaltimetype t = icalcomponent_get_dtstart(c);
-\layout LyX-Code
-
-
-\latex no_latex
-
-\layout LyX-Code
-
-
-\latex no_latex
- printf("%s
-\backslash
-n",icaltime_as_ctime(t));
-\layout LyX-Code
-
-
-\latex no_latex
- }
-\layout LyX-Code
-
-
-\latex no_latex
-icalfileset_free(fs);
-\layout LyX-Code
-
-
-\latex no_latex
-}
-\layout Subsubsection
-
-Other routines
-\layout Standard
-
-There are several other routines in the icalset interface, but they not
- fully implemented yet.
-
-\layout Subsection
-
-
-\begin_inset LatexCommand \label{sec:memory}
-
-\end_inset
-
-Memory Management
-\layout Standard
-
-Libical relies heavily on dynamic allocation for both the core objects and
- for the strings used to hold values.
- Some of this memory the library caller owns and must free, and some of
- the memory is managed by the library.
- Here is a summary of the memory rules.
-
-\layout Description
-
-1) If the function name has "new" in it, the caller gets control of the
- memory.
- ( such as icalcomponent_new(), or icalproperty_new_clone() )
-\layout Description
-
-2) If you got the memory from a routine with new in it, you must call the
- corresponding *_free routine to free the memory.
- ( Use icalcomponent_free() to free objects created with icalcomponent_new())
-
-\layout Description
-
-3) If the function name has "add" in it, the caller is transferring control
- of the memory to the routine.
- ( icalproperty_add_parameter() )
-\layout Description
-
-4) If the function name has "remove" in it, the caller passes in a pointer
- to an object and after the call returns, the caller owns the object.
- So, before you call icalcomponent_remove_property(comp,foo), you do not
- own "foo" and after the call returns, you do.
-
-\layout Description
-
-5) If the routine returns a string, libical owns the memory and will put
- it on a ring buffer to reclaim later.
- For example, icalcomponent_as_ical_string().
- You'd better strdup() it if you want to keep it, and you don't have to
- delete it.
-
-\layout Subsection
-
-Error Handling
-\layout Standard
-
-Libical has several error handling mechanisms for the various types of programmi
-ng, semantic and syntactic errors you may encounter.
-\layout Subsubsection
-
-Return values
-\layout Standard
-
-Many library routines signal errors through their return values.
- All routines that return a pointer, such as icalcomponent_new(), will return
- 0 ( zero ) on a fatal error.
- Some routines will return a value of enum icalerrorenum.
-
-\layout Subsubsection
-
-icalerrno
-\layout Standard
-
-Most routines will set the global error value icalerrno on errors.
- This variable is an enumeration; permissible values can be found in libical/ica
-lerror.h.
- If the routine returns an enum icalerrorenum, then the return value will
- be the same as icalerrno.
- You can use icalerror_strerror() to get a string that describes the error.
- The enumerations are:
-\layout Standard
-\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
-multicol5
-12 2 0 0 -1 -1 -1 -1
-1 1 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 0 0 0
-1 1 0 0
-2 1 0 "" ""
-2 1 1 "" ""
-0 8 1 0 0 0 0 "" ""
-0 8 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-
-
-\newline
-
-\newline
-ICAL_BADARG_ERROR
-\newline
-One of the argument to a routine was bad.
- Typically for a null pointer.
-\newline
-ICAL_NEWFAILED_ERROR
-\newline
-A new() or malloc() failed
-\newline
-ICAL_MALFORMEDDATA_ERROR
-\newline
-An input string was not in the correct format
-\newline
-ICAL_PARSE_ERROR
-\newline
-the parser failed to parse an incomming component
-\newline
-ICAL_INTERNAL_ERROR
-\newline
-Largely equivalent to an assert; it indicates a bug in the libical code
-\newline
-ICAL_FILE_ERROR
-\newline
-A file operation failed.
- Check errno for more detai
-\newline
-ICAL_ALLOCATION_ERROR
-\newline
-
-\newline
-ICAL_NO_ERROR
-\newline
-No error has occured
-\newline
-ICAL_TIMEDOUT_ERROR
-\newline
-Failed to acquire a lock on a file, or the CSTP protocol timed out.
-
-\newline
-ICAL_MULTIPLEINCLUSION_ERROR
-\newline
-
-\newline
-ICAL_UNKNOWN_ERROR
-\newline
-
-\layout Subsubsection
-
-X-LIC-ERROR and X-LIC-INVALID-COMPONENT
-\layout Standard
-
-The library handles semantic and syntactic errors in components by inserting
- errors properties into the components.
- If the parser cannot parse incoming text ( a syntactic error ) or if the
- icalrestriction_check() routine indicates that the component does not meet
- the requirements of RFC2446 ( a semantic error) the library will insert
- properties of the type X-LIC-ERROR to describe the error.
- Here is an example of the error property:
-\layout LyX-Code
-
-X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions for property
- DTSTART.
-
-\layout LyX-Code
-
-Expected 1 instances of the property and got 0
-\layout Standard
-
-This error resulted from a call to icalrestriction_check(), which discovered
- that the component does not have a DTSTART property, as required by RFC2445.
-
-\layout Standard
-
-There are a few routines to manipulate error properties:
-\layout Standard
-\LyXTable
-multicol5
-10 2 0 0 -1 -1 -1 -1
-1 1 0 0
-0 0 0 0
-0 1 1 0
-0 0 0 0
-0 1 1 0
-0 1 0 0
-0 1 1 0
-0 1 0 0
-0 1 1 0
-0 1 1 0
-2 1 1 "" ""
-2 1 1 "3in" ""
-0 2 1 1 0 0 0 "" ""
-0 8 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 1 0 1 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 1 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 1 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 1 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 1 1 0 1 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 1 1 0 1 "" ""
-0 2 1 0 0 0 0 "" ""
-0 2 1 1 0 0 1 "" ""
-
-Routine
-\newline
-Purpose
-\newline
-void icalrestriction_check()
-\newline
-Check a component against RFC2446 and insert
-\newline
-
-\newline
-error properties to indicate non compliance
-\newline
-int icalcomponent_count_errors()
-\newline
-Return the number of error properties
-\newline
-
-\newline
-in a component
-\newline
-void icalcomponent_strip_errors()
-\newline
-Remove all error properties in as
-\newline
-
-\newline
-component
-\newline
-void icalcomponent_convert_errors()
-\newline
-Convert some error properties into
-\newline
-
-\newline
-REQUESTS-STATUS proprties to indicate the inability to
-\newline
-
-\newline
-process the component as an iTIP request.
-
-\layout Standard
-
-The types of errors are listed in icalerror.h.
- They are:
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_COMPONENTPARSEERROR
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_PROPERTYPARSEERROR
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_VALUEPARSEERROR
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_UNKVCALPROP
-\layout LyX-Code
-
-ICAL_XLICERRORTYPE_INVALIDITIP
-\layout Standard
-
-The libical parser will generate the error that end in PARSEERROR when it
- encounters garbage in the input steam.
- ICAL_XLICERRORTYPE_INVALIDITIP is inserted by icalrestriction_check(),
- and ICAL_XLICERRORTYPE_UNKVCALPROP is generated by icalvcal_convert() when
- it encounters a vCal property that it cannot convert or does not know about.
-
-\layout Standard
-
-Icalcomponent_convert_errors() converts some of the error properties in
- a component into REQUEST-STATUS properties that indicate a failure.
- As of libical version0.18, this routine only convert *PARSEERROR errors
- and it always generates a 3.x ( failure ) code.
- This makes it more of a good idea than a really useful bit of code.
-
-\layout Subsubsection
-
-ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal
-\layout Standard
-
-If the global variable icalerror_errors_are_fatal is set to 1, then any
- error condition will cause the program to abort.
- The abort occurs in icalerror_set_errno(), and is done with an assert(0)
- if NDEBUG is undefined, and with icalerror_crash_here if NDEBUG is defined.
- The default value of icalerror_errors_are_fatal is 1 when ICAL_ERRORS_ARE_FATAL
- is defined, and 0 otherwise.
- Since ICAL_ERRORS_ARE_FATAL is defined by default, icalerror_errors_are_fatal
- is also defined by default.
-
-\layout Subsection
-
-Naming Standard
-\layout Standard
-
-Structures that you access with the
-\begin_inset Quotes eld
-\end_inset
-
-struct
-\begin_inset Quotes erd
-\end_inset
-
- keyword, such as
-\begin_inset Quotes eld
-\end_inset
-
-struct icaltimetype
-\begin_inset Quotes erd
-\end_inset
-
- are things that you are allowed to see inside and poke at.
-
-\layout Standard
-
-Structures that you access though a typedef, such as
-\begin_inset Quotes eld
-\end_inset
-
-icalcomponent
-\begin_inset Quotes erd
-\end_inset
-
- are things where all of the data is hidden.
-
-\layout Standard
-
-Component names that start with
-\begin_inset Quotes eld
-\end_inset
-
-V
-\begin_inset Quotes erd
-\end_inset
-
- are part of RFC 2445 or another iCal standard.
- Component names that start with
-\begin_inset Quotes eld
-\end_inset
-
-X
-\begin_inset Quotes erd
-\end_inset
-
- are also part of the spec, but they are not actually components in the
- spec.
- However, they look and act like components, so they are components in libical.
- Names that start with
-\begin_inset Quotes eld
-\end_inset
-
-XLIC
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-X-LIC
-\begin_inset Quotes erd
-\end_inset
-
- are not part of any iCal spec.
- They are used internally by libical.
-
-\layout Standard
-
-Enums that identify a component, property, value or parameter end with
-\begin_inset Quotes eld
-\end_inset
-
-_COMPONENT,
-\begin_inset Quotes erd
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-_PROPERTY,
-\begin_inset Quotes erd
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-_VALUE,
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-_PARAMETER
-\begin_inset Quotes erd
-\end_inset
-
-s
-\layout Standard
-
-Enums that identify a parameter value have the name of the parameter as
- the second word.
- For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED.
-\layout Standard
-
-The enums for the parts of a recurarance rule and request statuses are irregular.
-
-\layout Section
-
-Hacks and Bugs
-\layout Standard
-
-There are a lot of hacks in the library -- bits of code that I am not proud
- of and should probably be changed.
- These are marked with the comment string
-\begin_inset Quotes eld
-\end_inset
-
-HACK.
-\begin_inset Quotes erd
-\end_inset
-
-
-\the_end
diff --git a/libical/doc/UsingLibical.ps b/libical/doc/UsingLibical.ps
deleted file mode 100644
index 6223144e3a..0000000000
--- a/libical/doc/UsingLibical.ps
+++ /dev/null
@@ -1,2327 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
-%%Title: UsingLibical.dvi
-%%Pages: 22
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter -o
-%+ /usr/local/home/eric/proj/FreeAssociation/libical/doc/UsingLibical.ps
-%+ UsingLibical.dvi
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource: TeX output 2001.01.09:0928
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-TeXDict begin 40258431 52099146 1000 600 600 (UsingLibical.dvi)
-@start
-%DVIPSBitmapFont: Fa ecti1000 10 7
-/Fa 7 118 df<EA03C0EA07F0120F121F13F8A313F0EA07B0EA003013701360A213E013
-C01201EA038013005A120E5A5A5A5A5A0D197A8819>44 D<147F903803FFC090380FC1E0
-90381F0070017E13784913383901F801F83803F003120713E0120FD81FC013F091C7FC48
-5AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB03C0EC0F80
-6CEB3E00380F81F83803FFE0C690C7FC1D2677A426>99 D<D801E001FEEB07F03C07F803
-FF801FFC3C0E3C0F07C0783E3C1E3E3C03E1E01F261C1F78D9F3C013803C383FF001F780
-0F02E01400007801C013FE007018C002805B4A4848EB1F80EAF07FD8E07E5CA200000207
-143F01FE1700495CA2030F5C0001177E495C18FE031F5C120349DA8001131C18F8033F15
-3C00070403133849020013F0A24B1570000F17E049017E15F019E003FEECE1C0001FEE01
-E34949903800FF000007C70038143C3E2679A444>109 D<3903C003F0390FF01FFC391E
-783C0F381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FC
-EAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E2126
-79A423>114 D<14FE903807FF8090380F83C090383E00E04913F00178137001F813F000
-01130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C013
-00143F141F140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB4
-5AD801FEC7FC1C267AA422>I<EB0380EB07C0130FA4131F1480A3133F1400A35B137E00
-7FB5FCA2B6FC3800FC00A312015BA312035BA312075BA3120F5BA3121FEB801CA2143C00
-3F1338EB0078147014F014E0EB01C0EA3E03381F0780380F0F00EA07FCEA01F0183579B3
-1C>I<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C0
-1270013F131F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE12
-0349EBFC0EA20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A
-00F83C78E090393FF03FC090390FC00F00272679A42D>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb ecbx1200 12 42
-/Fb 42 122 df<B612F8A91D097F9A25>45 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA
-7FFCEA3FF8EA1FF0EA07C00F0F788E1F>I<EC03C01407141F147FEB03FF133FB6FCA413
-C3EA0003B3B3ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E00003
-15F82607FC0313FE3A0FE0007FFFD81F806D138048C7000F13C0488001C015E001F07F00
-FF6E13F07F17F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC
-4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D9
-07E014F0495A495A49C8FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D41
-7BC038>I<ECFFF0010713FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81
-D80FF86D138013FE001F16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B
-020F1380902607FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0
-A26F13F0A217F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80
-491380D81FF0491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D
-427BC038>I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87
-EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A
-485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>
-I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9
-FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13
-804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C
-4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB6
-12F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F13FC
-49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFFE048495A5A1400
-485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF8000FF
-017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F13E0
-A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913806C
-018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC9038003FF02D42
-7BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8EA3F
-00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14035D
-14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A2F44
-7AC238>I<EE1F80A24C7EA24C7EA34C7EA24B7FA34B7FA24B7FA34B7F169F031F80161F
-82033F80ED3E07037E80157C8203FC804B7E02018115F0820203814B137F0207815D173F
-020F814B7F021F8292C77EA24A82023E80027E82027FB7FCA291B87EA2498302F0C8FCA2
-0103834A157F0107834A153FA249488284011F8491C97E4984133E017E82B6020FB612F0
-A54C457CC455>65 D<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791
-B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E494881494881494816
-7F4849163F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C7FC12
-FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C6D17C06E16077E6C6DEE0F806C6D
-EE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC07F0010101FEEC1FE06D903AFFF0
-01FF80023F90B6C7FC020715FC020115F0DA001F1480030001F8C8FC44467AC451>67
-D<BA12F8A485D8001F90C71201EF003F180F180318011800A2197E193EA3191EA21778A2
-85A405F890C7FCA316011603161F92B5FCA5ED001F160316011600A2F101E01778A2F103
-C0A494C7FC1907A21A80A2190FA2191FA2193FF17F0061601807181F4DB5FCBBFC61A443
-447DC34A>69 D<B7D88003B612FEA526003FFEC9EBF800B3A791B9FCA54AC9FCB3AAB7D8
-8003B612FEA54F447CC358>72 D<B712F0A526003FFECAFCB3B1F00780A4180F1900A460
-A360A2187EA218FE170117031707171F177FEE03FFB95AA539447CC343>76
-D<B500FE067FB512806E95B6FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6DEE079F
-A26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A26E6DEC
-03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F6D485A
-A26F6D485AA26F6D485AA3706C48C7FCA293383FF81EA2706C5AA2706C5AA3706C5AA270
-5BA2705BA2705BA2B6057FB6128071C7FCA2173E171C61447CC36A>I<B64BB512FE8181
-A281D8003F6D91C7EA780081013D7F81133C6E7E6E7F6E7F6E7F6E7F82806E7F6E7F6F7E
-6F7F83816F7F6F7F6F7F6F7F6F7F8382707F707F707F707F8482707F707F717E71138071
-13C019E0837113F07113F87113FC7113FE19FF847213F884848484A28484197F193F191F
-A2190F1907B61603190119001A78A24F447CC358>I<923807FFC092B512FE0207ECFFC0
-021F15F091267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E
-6C7E49486F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13E0A2
-4819F04982003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A2
-6D5E6C19F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D
-6C4B5A6D6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F802
-0715C002004AC8FC030713C047467AC454>I<B9FC18F018FE727E19E0D8001F90C7000F
-7F05017F716C7E727E727E721380A21AC084A21AE0A91AC0A24E1380A21A00604E5A4E5A
-4D485A050F5B92B712C096C7FC18FC18C092CBFCB3A7B712E0A543447DC34D>I<DAFFE0
-131C010701FE133C013F9038FF807C90B6EAE0FC4815F9489038801FFF3907FC00014848
-EB007F4848143F4848140F491407007F15035B1601160012FF177CA27FA26D153C7F7F6D
-92C7FC6C7EEBFFE014FE6CEBFFF015FF6C15E016FC6C816C6F7E6C826C826C6C81011F81
-0107811300020F80140003077FED007F82040F1380828212F082A282A27EA218007EA26C
-5D6C5E6D14036D5D6D140701F84A5A01FFEC3FF002F8EBFFE0486CB65AD8FC1F92C7FCD8
-F80714FC48C614F0480107138031467AC43E>83 D<003FBA12E0A59026FE000FEB8003D8
-7FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8481978
-A5C81700B3B3A20107B8FCA545437CC24E>I<B792B6FCA526003FFECAEAFC00806D606F
-15016D608119036D606F15076D606F150F6D6081191F6D6D93C7FC61027F163E6F157E02
-3F167C8119FC6E6D5C18016E5E7013036E5E8218076E6D5C180F6E5E70131F6E93C8FC70
-5B037F143E82187E033F147C7013FC6F5C17816F5C17C117C36F5C17E76F5C17FF6F5CA3
-6F91C9FCA2705AA2705AA3705AA2705AA2705AA250457EC355>86
-D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E
-A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100
-0313E0481380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEB
-FFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97
-D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F
-FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18
-F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9
-F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90
-397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED
-00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00
-6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32
->I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8
-07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC
-127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F
-EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E
-010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F
-ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F
-17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE
-011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13
-F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03
-F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E
-010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848
-903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C
-495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F
-7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748
-48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B
-07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F
-C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91
-39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48
-B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF
-A512037EB3AFB6FCA518467CC520>I<EC03E0EC0FF8EC1FFCEC3FFEA2EC7FFFA5EC3FFE
-A2EC1FFCEC0FF8EC03E091C7FCAAEC01FF0103B5FCA5EB000F80B3B3A7EA1F80EA3FC0EA
-7FE0EAFFF0EC0FFEA215FC141F01E013F8007FEB3FF0393FC0FFE06CB512806C14000003
-13FCC613C0205A86C522>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457CC420>108
-D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E4880913D
-87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C13
-0F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E>
-I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F801F00039039
-9F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>I<EC1F
-FC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848C7EA3FE000
-078248486E7E49140F001F82A2003F82491407007F82A400FF1780AA007F1700A46C6C4A
-5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F90C7FC6DB5
-5A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590B57E02C314
-E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E0
-5C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E49
-13006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536
-407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE
-6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>
-114 D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E
-00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C80000380
-6C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C14
-1FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7C
-AD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FC
-A4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5
-FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA50003EC000F
-6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C7010F14070103
-13FE9026007FF0EBFC00372E7CAC3E>I<B500FE90383FFFF0A5C601F0903803E0006D6C
-495A6D6C495A011F4AC7FC6E5B6D6C137E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06E
-B45A806E90C8FC5D6E7E6E7F6E7FA24A7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E4948
-6C7F01036D7F49487E02C08049486C7F49C76C7E013E6E7E017E141FB500E090B512FCA5
-362C7EAB3B>120 D<B6903803FFFCA5000101E09038003E006C163C80017F5D8017F801
-3F5D6E1301011F5D6E1303010F5D6E13076D5DED800F6D92C7FC15C05E6DEBE01E163E6D
-143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA2
-6E5AA21578A215F85D14015D001F1303D83F805B387FC007D8FFE05B140F92C9FC5C143E
-495A387FC1F8EB07F06CB45A6C5B000790CAFCEA01FC36407EAB3B>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc ectt1000 10 78
-/Fc 78 123 df<121FEA3F80EA7FC0EAFFE0B0EA7FC0AEEA1F00C7FCA7121FEA3F80EA7F
-C0EAFFE0A5EA7FC0EA3F80EA1F000B3470B32C>33 D<003C131E007F137F481480A66C14
-00A6007E7FA6003E133EA3003C131E001C131C191977B32C>I<EA0F80EA1FE0EA3FF012
-7F13F8A213FCA2123F121F120FEA007CA313FC13F8A2120113F01203EA07E0A2EA0FC0EA
-3F80127FEAFF005A12F812700E1D71B22C>39 D<143814FC13011303EB07F8EB0FF0EB1F
-C0EB3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5A
-AC7E127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0F
-F0EB07F8EB03FC130113001438164272B92C>I<127012FC7E7E6C7E6C7EEA0FE06C7E6C
-7E6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301A314FC1300AC13
-0114F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE485A485A485A485A
-EA3FC0485A48C7FC5A5A1270164279B92C>I<EB0380497EA60020140800F8143E00FE14
-FE00FF13C1EBC7C7EBE7CF003FB512F8000F14E0000314806C140038007FFCA248B5FC48
-1480000F14E0003F14F839FFE7CFFEEBC7C7EB07C100FE13C000F8143E00201408000014
-00A66D5A1F247AAA2C>I<147014F8AF003FB612E0B712F8A4C700F8C7FCB0147025267D
-AB2C>I<EA0F80EA1FE0EA3FF0EA7FF8A213FCA3123F121F120F120013F8A21201EA03F0
-1207EA1FE0EA7FC0EAFF80130012FC12700E17718A2C>I<007FB512F0B612F8A36C14F0
-1D0579942C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507
-ED0F80A2151F16005D153E157E157CA215FC5D14015D14035D14075D140F5D141F92C7FC
-5C143EA2147E147C14FC5C13015C13035C13075C130F5C131F91C8FC5B133EA2137E137C
-13FC5B12015B12035B12075B120F5B121F90C9FCA25A123E127E127C12FC5AA212702141
-7BB92C>I<EB03F8EB0FFE90383FFF80497F90B57E3901FE0FF03903F803F848486C7EEB
-E0004848137EA248487FA248C7EA1F80A2003E140F007E15C0A3007C140700FC15E0AC6C
-140F007E15C0A46CEC1F80A36C6CEB3F00A26C6C137E6D13FE00075CEBF0016C6C485A39
-01FE0FF06CB55A6D5B6D5BD90FFEC7FCEB03F823357CB32C>I<1307497EA2131FA2133F
-137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C34
-77B32C>I<EB0FF890387FFF8048B512E00007804814FC391FF80FFE393FE001FF903880
-007F48C7EA3F80007E141F00FE15C0150F6C15E01507A3127E123CC8FCA2150F16C0151F
-1680153F16005D15FE4A5A14034A5A4A5A4A5A4A5AECFF804948C7FC495A495A495AEB3F
-E0EB7F8049C8FC485A4848EB03C04848EB07E0EA1FE0485A48B6FCB7FCA36C15C023347C
-B32C>I<EB0FFC90387FFF8048B512E0000714F84880391FF807FEEBC0004848137F6D7F
-1680151FA26C5A6CC7FCC8FC153F16005D15FE14014A5AEC1FF890381FFFF0495BA215F8
-6D7F90380007FEEC00FF81ED3F80ED1FC0150FA216E01507A2123C127EB4FC150F16C0A2
-48141F007FEC3F806DEB7F006C6C5B391FF807FE6CB55A6C5C6C14E0C66C1380D90FFCC7
-FC23357CB32C>I<EC07F04A7E141F143FA2147EA214FCEB01F8A2EB03F0EB07E0A2EB0F
-C0EB1F80A2EB3F00137EA25B485AA2485A5B1207485AA2485A48C7FCA2127E5AB712FC16
-FEA36C15FCC8EAF800AA91387FFFF091B512F8A36E13F027347EB32C>I<000FB512FE48
-80A35D0180C8FCADEB83FE90389FFF8090B512E015F8819038FE03FE9038F000FF01C07F
-49EB3F8090C7121F6C15C0C8120FA2ED07E0A4123C127EB4FC150F16C0A248141F007EEC
-3F80007FEC7F006C6C5B6D485A391FF80FFC6CB55A6C5C000114C06C6C90C7FCEB0FF823
-347CB22C>I<EC3FC0903801FFF801077F011F7F497F90387FE07F9039FF003F80484813
-7FEA03F8485A5B000FEC3F004848131E4990C7FC123F90C9FCA25A127EEB03FE90381FFF
-80D8FC7F13E000FDB57EB67E9038FE07FC9038F001FE9038C0007F49EB3F8090C7121F16
-C048140F16E01507A3127EA47E150F6D14C0001F141F6D1480000F143F6DEB7F003907F8
-01FE3903FE07FC6CB55A6C5C6D5B011F1380D907FCC7FC23357CB32C>I<1278B712C016
-E0A316C000FCC7EA3F80ED7F0015FE00785CC712014A5A4A5A5D140F5D4A5A143F92C7FC
-5C147E14FE5C13015CA2495AA213075CA3495AA4495AA5133F91C8FCAA131E23357CB32C
->I<EB07FC90383FFF8090B512E0000314F84880390FFC07FE391FF001FF9038C0007F48
-48EB3F8090C7121F4815C0007E140FA56CEC1F80A26C6CEB3F006D5B390FF001FE3903FC
-07F86CB55A6C6C13C0D907FCC7FC90387FFFC048B512F03903FC07F8390FF001FE391FC0
-007F497F48C7EA1F80007EEC0FC0A248EC07E0A7007EEC0FC0A2007F141F6C6CEB3F806C
-6CEB7F009038F001FF390FFC07FE6CB55A6C5CC614E0013F1380D907FCC7FC23357CB32C
->I<EB07FCEB3FFF90B512C0488048803907FC07F8390FF001FC48486C7ED83F80137E15
-7F48C77E007EEC1F8012FE5AED0FC0A416E0A37E127E007F141F7E6D133F6C6C137F390F
-F001FF3807FC0F6CB6FC6C14F76C14C7013F130FD90FF813C090C7FCA2151F1680153F16
-00000F5C486C137E486C13FE4A5A4A5A14079038801FF0391FE07FE090B55A6C91C7FC6C
-5B000113F838007FC023357CB32C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F
-00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>I<EA0F80EA
-1FC0EA3FE0EA7FF0A5EA3FE0EA1FC0EA0F80C7FCAEEA0F80EA1FE0EA3FF0EA7FF8A213FC
-A3123F121F120F120013F8A21201EA03F01207EA1FE0EA7FC0EAFF80130012FC12700E30
-71A32C>I<007FB612F0B712F8A36C15F0CAFCA8007FB612F0B712F8A36C15F025127DA1
-2C>61 D<EC7F80903803FFE0010F7F013F7F497F9038FFC0FE3901FE007FD803F87F4848
-EB1F809038E00FCF390FC03FFF48484813C091B5FCEA3F01393E03F87F903907F03FE000
-7EEBE01F397C0FC00FEC8007A2EAFC1F00F8EB0003A900FCEB8007D87C0F14C0A2ECC00F
-3A7E07E01F80003EEBF03F903903F87F00393F01FFFED81F805B6E5A6C6C6C5A3907E00F
-C09039F00007C06C6CEB0FE0D801FE131F3900FFC0FF6DB512C06D1480010FEBFE000103
-13F89038007FC023337CB22C>64 D<14FE497EA4497FA214EFA2130781A214C7A2010F7F
-A314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FEA34880A29038F800
-3FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15FC497E27347EB32C
->I<007FB512E015F8B612FE6C8016C03903F0003FED0FE0ED07F01503A2ED01F8A6ED03
-F0A21507ED0FE0ED1FC0EDFF8090B612005D5D15FF16C09039F0001FE0ED07F0ED03F815
-01ED00FCA216FE167EA616FE16FC1501ED03F8150FED3FF0007FB612E016C0B712806CEC
-FE0015F027337FB22C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE
-007F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212
-FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC13
-1F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>I<00
-7FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716F015
-0316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80EDFF00
-EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E3903F0
-0001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8007F
-B612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA716781600
-A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C>I<
-903901FC038090390FFF87C04913EF017F13FF90B6FC4813073803FC01497E4848137F48
-48133F49131F121F5B003F140F90C7FCA2127EED078092C7FCA212FE5AA8913803FFF84A
-13FCA27E007E6D13F89138000FC0A36C141FA27F121F6D133F120F6D137F6C7E6C6C13FF
-6D5A3801FF076C90B5FC6D13EF011F13CF6DEB0780D901FCC7FC26357DB32C>I<D87FFE
-EBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E0000FB3D87FFEEBFFFC
-B54813FEA36C486C13FC27337EB22C>I<007FB512F8B612FCA36C14F839000FC000B3B3
-A5007FB512F8B612FCA36C14F81E3379B22C>I<0107B512804914C0A36D148090390003
-F000B3AF1218127EA2B4FCA24A5A48130F007F131F9038C07FC06CB55A6C91C7FC6C5B00
-0313F838007FC022347BB22C>I<D87FFCEB7FF8486CEBFFFCA36C48EB7FF8D807C0EB1F
-80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7FC147E5CEBC1F813C3EBC7FC
-A2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF00301E07FEBC001816E7EA215
-7E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB3FFEA36C48EB1FFC27337EB2
-2C>I<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15F025
-337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F15FC000F15E001BC137BA4019E
-13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201831383A214EFA201811303A214
-FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFEA36C48EB1FFC27337EB22C>I<
-D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA2148013C7
-14C0A213C314E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587A21407
-15C7A2140315E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F8027337EB2
-2C>I<EB7FFF0003B512E0000F14F848804880EBE003EB800048C7127FA2007E80A300FE
-158048141FB3A86C143FA2007E1500A3007F5CA26C6C13FEEBF00790B5FC6C5C6C5C0003
-14E0C66C90C7FC21357BB32C>I<007FB512C0B612F88115FF6C15802603F00013C0153F
-ED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280160015
-FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<EB7FFF0003B512E0000F14
-F848804880EBF007EB800048C7127FA2007E80A300FE158048141FB3A7EB01F0EB03F800
-FE143F267E01FC1300A2EB00FE007F5C147FD83F8013FEEBF03F90B5FC6C5C6C5C000314
-E0C67E90380007F0A26E7EA26E7EA26E7EA2157FA2153E21407BB32C>I<387FFFFCB67E
-15E015F86C803907E007FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE14
-0790B55A5D15E081819038E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5
-ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381FF80790B5EA0F804814CF000714
-FF5A381FF01F383FC003497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC
-127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07
-FF02001380153FED1FC0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0
-EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007F
-B612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA22733
-7EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C03B03F00001F800B3AF6D130300
-015DA26D130700005D6D130F017F495A6D6C485AECE0FF6DB5C7FC6D5B010313F86D5B90
-38003F802B3480B22C>I<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD80FC0EB07E06D13
-0F000715C0A36D131F00031580A36D133F00011500A36D5B0000147EA4017E5BA46D485A
-A490381F83F0A4010F5B14C7A301075BA214EFA201035BA214FFA26D90C7FCA46D5A2734
-7EB22C>I<D87FF0EB07FF486C491380A36C486D1300001FC8127CA46C6C5CA76C6C495A
-A4143E147FA33A03E0FF83E0A214F7A201E113C3A3000101E35BA201F113C701F313E7A3
-14C1A200005DA201F713F71480A301FF13FF017F91C7FC4A7EA4013E133E29347FB22C>
-I<3A3FFF03FFE0484913F0148714076C6D13E03A01F800FE007F0000495A13FE017E5BEB
-7F03013F5B1487011F5B14CF010F5B14FF6D5BA26D90C7FCA26D5AA26D5AA2497EA2497E
-A2497F81EB0FCF81EB1FC7EC87F0EB3F83EC03F8EB7F01017E7FEBFE00497F0001147E49
-137F000380491480151FD87FFEEBFFFC6D5AB514FE6C15FC497E27337EB22C>I<D87FFC
-EB7FFC486CEBFFFEA36C48EB7FFCD807F0EB0FC0151F000315806D133F12016DEB7F0012
-006D137E017E13FE017F5BEB3F01EC81F8131FEC83F0EB0FC314C7903807E7E0A201035B
-14EF6DB45AA292C7FC7F5C147EB0903807FFE0497FA36D5B27337EB22C>I<003FB612C0
-4815E0A4007EC7EA1FC0ED3F80A2ED7F00157E15FE4A5A003C5CC712034A5AA24A5A4A5A
-A24A5A4AC7FCA214FE495AA2495A495AA2495A495AA2495A49C8FCA213FE485AA24848EB
-03C049EB07E01207485A5B121F485AA248C7FCB7FCA46C15C023337CB22C>I<007FB6FC
-B71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF8
-1407EC01FC381F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF8
-00EA7FC090C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EB
-FE1F3A003FF007FC27247CA32C>97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13
-FE90B6FC16809138F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE16
-7EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B512801600
-01FB5B01F813F83900F03FC027337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48
-804848C6FCEA0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB
-1F806C7E6D133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC2124
-7AA32C>I<EC0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380F
-F00348487E497E48487F90C7FC007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A38
-0FF0073807FC1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03
-FE90381FFFC0017F13F048B57E48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1F
-C090C7120F5A007E15E015075AB7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E0
-6C7ED80FF0130F6C6CEB3FC001FF13FF000190B512806C1500013F13FC010F13F0010113
-8023247CA32C>I<EC0FF8EC3FFE91B5FC4914805B903807FC7F14F090390FE03F0014C0
-92C7FCA6007FB512FEB7FCA36C5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB2
-2C>I<ED03F8903907F80FFC90391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607
-F003133E3A0FE001FC1CD9C0001300001F8049137EA66D13FE000F5CEBE0016C6C485A39
-03FC0FF048B5FC5D481480D99FFEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48EC
-FF804815E04815F03A3FC0001FF848C7EA03FC007E1400007C157C00FC157E48153EA46C
-157E007E15FCD87F801303D83FE0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D800
-3F13F8010713C028387EA42C>I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE
-01FB7F90B6FC9138F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480
-A36C01E0140029337FB22C>I<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFF
-C080B5FC7EA2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2
-EC7FC0A3EC3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3B3A2141F003C1480
-007E133FB414005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467CB32C>I<EA7FE048
-7EA3127F1201AA91381FFFF04A13F8A36E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A
-4AC7FC14FEEBF1FC13F3EBF7FE90B5FCA2EC9F80EC0FC001FE7FEBFC07496C7E496C7E81
-1400157E811680151F3A7FFFC0FFFCB500E113FEA36C01C013FC27337EB22C>I<387FFF
-E0B57EA37EEA0003B3B3A5007FB61280B712C0A36C158022337BB22C>I<3A7F83F007E0
-9039CFFC1FF83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01
-F013E001E013C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0
-023F137F2D2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038
-F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E014002924
-7FA32C>I<EB07FCEB1FFF017F13C048B512F048803907FC07FC390FF001FE48486C7E01
-80133F003F158090C7121F007EEC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15
-806D133F6C6CEB7F006D5B6C6C485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07
-FC23247CA32C>I<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000019038F07FC091
-38801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D
-13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8EC3FC091C8
-FCAD387FFFE0B57EA36C5B27367FA32C>I<903903FC078090391FFF0FC0017F13CF48B5
-12EF4814FF3807FE07380FF00148487E49137F4848133F90C7FC48141F127E150F5AA87E
-007E141FA26C143F7F6C6C137F6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D13
-0FEB07F890C7FCAD0203B5FC4A1480A36E140029367DA32C>I<D87FFEEB3FC0B53801FF
-F0020713F8021F13FC6C5B39003F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391
-C8FCAF007FB512E0B67EA36C5C26247EA32C>I<90387FF8700003B512F8120F5A5A387F
-C00F387E00034813015AA36CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0
-C66C13F8010113FCEB0007EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE90
-38F007FC90B5FC15F815E000F8148039701FFC0020247AA32C>I<131E133FA9007FB6FC
-B71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB5128016
-0001035B6D13F89038003FE0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB
-000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF902603FE0713002924
-7FA32C>I<3A7FFF01FFFCB514FE148314016C15FC3A03E0000F80A26D131F00011500A2
-6D5B0000143EA26D137E017C137CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA2
-14C701075BA214EF01035BA214FF6D90C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF
-6EB5FCB515806C16004A7ED807C0EB01F0A66C6C495AA3143E147FA2D801F0495AECFF87
-A214F7A201F113C700005D9038F9E3CFA201FB13EFA3D97BC190C7FC017F13FFA21480A2
-013F5B90381F007C29247FA32C>I<3A3FFF03FFF048018713F8A36C010313F03A00FC00
-7E005D90387E01F8013F5BEB1F83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D
-5A147C14FE130180903803EF80903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E0001
-7C137C49137E0001803A7FFF01FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01
-FFFCB5008113FE148314816C010113FC3A03E0000F806C7E151F6D140012005D6D133E13
-7C017E137E013E137CA2013F13FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C013
-0114F75DEB00FFA292C7FC80A2143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87
-E0EA7E0F495A387FFF806C90C8FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0
-A4007EC7EA1FE0ED3FC0ED7F80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FC
-EB01FC495AEB0FF0495A495A495A49C8FC4848EB01E04848EB03F0485A485A485A485A48
-5AB7FCA46C15E024247DA32C>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd ecbx1000 10 57
-/Fd 57 122 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF
-FE0FF0D93FF8ECF81F90267FE0019038F03FF849485A4816E014804816C00200ED1FF081
-F007C06F91C7FCA8B912E0A4000390C701C0C7FCB3ABB5D8FC3FEBFF80A43D3A7EB938>
-27 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F12007F137E137FA2EB3F80A214C013
-1F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A414E0131FA214C0133F1480A2EB
-7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC123E5A12F05A16537BBD25>41
-D<EA0F80EA3FE0EA7FF0A2EAFFF8A213FCA3127FA2123FEA0F9CEA001C133C1338A31378
-137013F0EA01E0A2EA03C0EA0780EA0F005A121C12180E1D798C1B>44
-D<B61280A819087F9620>I<EA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F80
-0D0D798C1B>I<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB61280A42136
-79B530>49 D<EB0FFE90387FFFC048B512F0000714FC390FE03FFF261F800F1380263F00
-0313C0D87F8014E0EBE00100FF6D13F07FA2ED7FF8A46C5A6C5A0006C7FCC8FCEDFFF0A2
-16E05C16C04A138016004A5A4A5AEC1FF05D4A5A4AC7FC14FE495AD903F01378495A495A
-495A49C712F8017C14F05B49130148B6FC5A5A5A5A5A4815E0B7FCA425367BB530>I<EB
-03FF011F13F0017F13FC3901FC07FF2603F003138048486C13C0496C13E0EA0FF86D14F0
-487EA66C4814E06C5A6C485AC714C04A138016004A5A4A5AEC3FF090380FFFC05D15F090
-380007FE913801FF806E13C016E0ED7FF016F8ED3FFCA216FEEA1FC0487E487E487EA416
-FCA249137F007F15F801C0EBFFF06C5A6C6C4813E0260FFC0713806CB61200000114FC6C
-6C13F0010790C7FC27377CB530>I<ED07C0150FA2151F153F157F15FF5CA25C5C5C5C14
-3E143C5C5C1301495A5C495A495A5B133E5B13785B485A1203485A5B48C7FC121E5A127C
-5AB81280A4C70001EBC000AA0103B61280A429367DB530>I<001C15C0D81F80130701F8
-137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFFE0017F13
-F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0A216F8A3
-121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F4913806C6C
-481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>I<EC0FF8EC
-FFFE0103EBFF8090390FF80FC090393FE003E090397F8001F09038FF000F48EC1FF84848
-133F485A120F5B121FA2003FEC1FF0ED0FE0484890C7FCA31408EC7FF039FFF1FFFC01F3
-13FFD9F78013809039FF007FC049EB3FE04914F0ED1FF85B16FCA34914FEA4127FA5123F
-16FCA26C7E16F8000F143F6D14F0000715E06C6CEB7FC03A01FF81FF806C90B51200013F
-13FC010F13F00101138027377CB530>I<123C123EEA3FE090B71280A41700485D5E5E5E
-5EA2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA24A5A143F
-4AC8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A29397BB7
-30>I<49B47E010F13F0013F13FC9038FE01FF3A01F8007F804848EB3FC04848EB1FE015
-0F484814F01507121FA27F7F7F6D130F01FF14E014C09138E01FC06CEBF83F9138FE7F80
-6C9038FFFE005D6C14F06C14FC6C14FF6D14806D14C090B612E0D803FD14F02607F07F13
-F848487E261FC00F13FC383F8003007F010013FE90C7127F151F00FE140715031501A215
-00A216FC7E6C14016D14F86C6C13036DEB07F06C6CEB0FE0D80FFEEB7FC00003B61200C6
-14FC013F13F00103138027377CB530>I<ED03E04B7EA24B7EA34B7EA24B7EA34B7EA292
-B57EA34A8015F302038015E1A202078015C0020F80ED807FA2021F80ED003F4A80023E13
-1FA2027E80027C7F02FC814A7FA20101824A7F49B77EA3498202C0C7FC010F824A147FA2
-011F8291C8123F4982013E151FA2017E82017C8101FE83B500F80107B61280A4413A7DB9
-48>65 D<B812C017FC17FF18C028007FF000037F04007F717E717E171F84A2717EA74D5A
-A260173F4D5A4D5A4C13C0040F5B91B600FCC7FCA2EFFF8002F0C713F0EF3FF8717E717E
-717E19807113C0A319E0A719C0A25F4D138019005FEF7FFE4C485AB912F018C095C7FC17
-F03B397DB844>I<DB3FFCEB01C00203B5EAC003021FECF00791B6EAFC0F01039039FC00
-FF3F4901C0EB1FFFD91FFEC77E49481403D97FF080494880485B48177F4849153F4890C9
-FC181F485A180F123F5B1807127FA24993C7FC12FFAD127F7FF003C0123FA27F001F1707
-A26C6C1780180F6C6D16006C6D5D6C173E6C6D157ED97FF85D6D6C4A5A6DB44A5A010701
-C0EB0FE06D01FCEBFF80010090B548C7FC021F14F8020314E09126003FFEC8FC3A3B7BB9
-45>I<B87E17F817FF18C028007FF8000713F09338007FF8EF1FFE717E050313807113C0
-A27113E0F07FF0A2F03FF8A219FC181FA219FEA419FFAC19FEA419FC183FA219F8187F19
-F0F0FFE0A24D13C04D13804D1300EF1FFEEF7FFC933807FFF0B912C095C7FC17FC178040
-397DB849>I<B912F0A426007FF8C7FCEF1FF8170717031701A21700A21878A3043C137C
-183CA41800167CA216FC150391B5FCA4ECF8031500167CA2163C180FA3181EA293C7FCA2
-183EA2183C187CA218FCA2EF01F81703170F173FEE01FFB9FC18F0A338397DB83F>I<B9
-12C0A43A007FF800039338007FE0171F170F1707A21703A21701A318F0EE7800A41800A2
-16F8A21501150791B5FCA4ECF80715011500A21678A693C8FCADB7FCA434397DB83C>I<
-B6D8FC03B612F0A426007FF8C70001EBE000B3A391B8FCA402F8C71201B3A6B6D8FC03B6
-12F0A444397DB84B>72 D<B612FCA439007FF800B3B3ADB612FCA41E397DB824>I<B7FC
-A426007FF8C9FCB3ACEF0780A5170F1800A35FA25FA25F5F5E5EEE0FFE167FB8FCA43139
-7DB839>76 D<B500F80403B512F06E5EA26E5ED8007FF1E000A2D97BFF161EA201796D5D
-A201786D5DA26E6C5DA36E6C4A5AA26E6C4A5AA26E6C4A5AA26E6C4A5AA26E6C141EA36E
-6D5BA26E6D5BA26F6C5BA26F6C485AA36F6C485AA26F6C485AA26F6C48C7FCA2923803FF
-1EA36F13BCA26F13F8A2705AA2705AA213FCB500FC6D4848B612F0A2EE0F80EE07005439
-7DB85B>I<B500FC0203B512F0A28080C66C6D90390003F0006F6E5A81017B7F13798101
-787F6E7E6E7E6E7F6E7FA26E7F6E7F6E7F6E7F6F7E153F826F13806F13C06F13E06F13F0
-6F13F88117FCEE7FFEEE3FFF7013817013C17013E18218F17013F97013FDEF7FFF8383A2
-8383838383187FA2183F181F01FC160FB500FC150718031801A244397DB84B>I<EDFFF8
-020FEBFF80027F14F0903A01FFC01FFC010790380007FFD91FFC010113C0D93FF06D6C7E
-49486E7E49486E7E48496E7E48834890C86C7EA248486F1380A248486F13C0A2003F18E0
-A348486F13F0A400FF18F8AC007F18F06D5DA3003F18E0A26D5D001F18C0A26C6C4B1380
-6C18006E5C6C6D4A5A6C5F6C6D4A5A6D6C4A5AD93FFC49485A6DB401075B0107D9C01F90
-C7FC010190B512FC6D6C14F0020F1480020001F8C8FC3D3B7BB948>I<B8FC17F017FEEF
-FF8028007FF8000F13C0040113E07013F0EF7FF8EF3FFCA2EF1FFEA218FFA818FEA2EF3F
-FCA2EF7FF8EFFFF04C13E0040F13C091B7120017FC17E002F8C9FCB3A4B612FCA438397D
-B841>I<B712FCEEFFE017FC17FF28007FF8000F13C004017F707F717E717EA2717EA284
-A760A24D5A604D5A4D5A04035B041F90C8FC91B612FC17E0839139F8003FFCEE0FFF707F
-707F8284A2707FA584A51A601AF084177F1901DD3FFE13E0B600FC011F130394390FFF87
-C071EBFF8005011400CBEA1FFC443A7DB848>82 D<D907FF130E013FEBE01E90B5EAF83E
-0003ECFE7E3A07FC01FFFE390FF0001F4848130F48481303491301007F140090C8FC167E
-5A163EA27F161E7F7F6D91C7FC13FC387FFFE014FEECFFF06C14FE6F7E6C816C15F06C81
-6C81C681133F010F801301D9000F1480EC007F030F13C01503818100F0157FA3163FA27E
-17807E167F6C16007E6D14FE01E0495A01F813039039FF801FF800FC90B512E0D8F83F5C
-D8F00749C7FC39E0007FF02A3B7BB935>I<003FB91280A4D9F800EBF003D87FC0923800
-7FC049161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE01
-0FB7FCA43B387DB742>I<B600FC011FB512C0A426007FF8C8381FC000725AB3B3181F01
-3F94C7FC8060011F163E6D6C157E187C6D6C15FC6D6D495A6D6DEB07F06D01F0EB1FE0DA
-7FFEEBFFC0021FB6C8FC02075C020014F0030F1380423A7DB849>I<B600F00103B512E0
-A4C601F0C83807F0006E5E017F5F6E150FA2013F5F6E151F011F94C7FC6E5D6D163E6F14
-7E6D167CA26F14FC6D5E6F13016D5E6F13036D5E811707027F5D6F130F023F5D6F131F02
-1F92C8FC815F6E143EEE807E6E147CEEC0FC6E5C16E016E16E5C16F36E5C16FF6F5BA36F
-5BA26F90C9FCA26F5AA36F5AA26F5AA26F5A433A7EB848>I<B6D8E01FB500FC90383FFF
-FCA4000101F0C7D83FFCC8EA7E006C71153C171F6E197C017F701578836E7014F8013F6F
-5E6E1801011F4B6D5CA26E18036D4B6D5CA26D6D496D495A173C6F170F6D037C6D91C7FC
-EF787F6F5F6D4B6C6C131E816D02016E5BEFE01F03F8177C027F01036E13784D7E03FCEE
-80F8023F49486C5C15FE021F010FEDC1E04D7E03FF16C36E49EDE3C0041E7F049E15F76E
-01BC6D5C04FC15FF6E95C8FC4C80A26E5F4C143F6E5F4C141FA2037F5E4C140FA26F486E
-5AA2031F5E93C812036F5E5E3A7EB863>I<007FB5D8F803B512F8A4C66C48C7D80FF0C7
-FC6D6C5D6D5E6F495A6D6D49C8FC7F6D6D137E6F5B6DEBF8016D5D6F485A6E6C485A023F
-130FDA1FFF5BEE9F806E01FFC9FC805E6E5B6E5B80826F7E153F826F7F5D4B7F92B57EA2
-DA01F97FDA03F17F03F07F913807E07FDA0FC07F021F6D7E4B7E4A486C7F027E8102FE6D
-7F4A7F49488149486D7F0107804A6E7E49488149486E7E013F81017F83B60107B61280A4
-41397DB848>I<EB3FFE0003B512E0000F14F8391FF00FFE003FEB03FF6D6C7F6E7FA26F
-7EA26C5A6C5AEA0380C8FCA2EC3FFF010FB5FC137F3901FFF87F00071380380FFE00EA3F
-F85B485A12FF5BA415FF6D5A127F263FF00713F83B1FFC1FBFFFC0390FFFFE1F0003EBF8
-0F39003FE0032A257DA42E>97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138
-FE03FFDAF00013804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3
-EE1FF8A217F06E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8
-D9E00F13E0D9C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF801380
-2603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127F
-A27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13
-F00101138023257DA42A>I<EE7F80ED7FFFA4150381AF903801FF81010F13F1013F13FD
-9038FFC07F0003EB001FD807FC1307000F8048487F5B123FA2485AA312FFAA127FA27F12
-3FA26C6C5B000F5C6C6C5B6C6C4913C02701FF80FD13FE39007FFFF9011F13E101011301
-2F3A7DB935>I<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F48
-4814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA3
-6C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13
-FC010113E025257DA42C>I<EC1FF0903801FFFC010713FF90391FF87F8090383FE0FFD9
-FFC113C0A2481381A24813016E1380A2ED3E0092C7FCA8B6FCA4000390C8FCB3ABB512FE
-A4223A7DB91D>I<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801
-131F48486C138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C
-4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512
-F8EDFF8016E06C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA36C157F
-6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B
-377DA530>I<13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F03FFDA3C0113
-8014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935>I<EA01F0EA07
-FC487EA2487EA56C5AA26C5AEA01F0C8FCA913FF127FA412077EB3A9B512F8A4153B7DBA
-1B>I<141FEC7FC0ECFFE0A24913F0A56D13E0A2EC7FC0EC1F0091C7FCA9EC0FF0EB0FFF
-A4EB007F143FB3B0121FEA3F80EA7FC0EAFFE0EC7FE0A215C014FF6C481380903883FE00
-6CB45A000F13F0000113801C4B86BA1D>I<13FFB5FCA412077EAF92380FFFE0A4923803
-FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7FE04A7E8181A2ECCF
-FEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13F8A42D3A7EB932>
-I<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97FE0EB0FFC00FF902601
-FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00903887801F000749DA
-CF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5D8FC1FB50083B512F0
-A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F03FFDA3C0113800007
-13780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430257DA435>I<903801
-FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D7E48486D7EA2003F81
-491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA26C6C495A6C6C495A6C
-6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430>I<9039FF01FF80B500
-0F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7FE091C713F0EE3FF8A2
-EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEBFFC0DAF00313809139
-FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F357EA435>I<9038FE
-03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5CA29138807F80ED3F00
-150C92C7FC91C8FCB3A2B512FEA422257EA427>114 D<90383FF0383903FFFEF8000F13
-FF381FC00F383F0003007E1301007C130012FC15787E7E6D130013FCEBFFE06C13FCECFF
-806C14C06C14F06C14F81203C614FC131F9038007FFE140700F0130114007E157E7E157C
-6C14FC6C14F8EB80019038F007F090B512C000F8140038E01FF81F257DA426>I<130FA5
-5BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7FCB21578A815F86CEB80F014816C
-EBC3E090383FFFC06D1380903803FE001D357EB425>I<01FFEC3FC0B5EB3FFFA4000714
-016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90387FFFFC011F13F0010313803025
-7DA435>I<B539F001FFF8A4000390C7EA1F00161E6E133E6C153C6E137C6C15786E13F8
-017F5CECF001013F5C14F8011F495AA2ECFC07010F5CECFE0F010791C7FC6E5A6D131E15
-BE6D13BC15FC6D5BA36E5AA26E5AA26E5AA26E5AA22D257EA432>I<B500F1B538803FFF
-A43D07FE000FF80003E06C6C010715C082028015076C6E6C148015076C01C0ED0F00826E
-485C017FED801E5D90273FF01E7F5B17C0DAF83E147C011F90393C3FE078037C14F8903B
-0FFC781FF0F0A29139FEF00FF10107EDF9E002FF14FB6D496CB45AA24B7E6D5EA26D496C
-90C7FCA292C7FC6E5CA2023E147C023C143C40257EA445>I<B539F01FFFF0A400039039
-8003F8006C01C013E06C1407D97FE05B6D6C485A6E48C7FC90381FFC3E010F5B903807FE
-FC6D6C5A5D6D5B6D5B6E7E6E7E814A7EA24A7E903801F3FFD903E37FD907C17FEB0FC049
-486C7E4A6C7E013E80496D7E49130F00016E7EB590383FFFF8A42D257EA432>I<B539F0
-01FFF8A4000390C7EA1F00161E6E133E6C153C6E137C6C15786E13F8017F5CECF001013F
-5C14F8011F495AA2ECFC07010F5CECFE0F010791C7FC6E5A6D131E15BE6D13BC15FC6D5B
-A36E5AA26E5AA26E5AA26E5AA292C8FCA25C141E003F133E387F803C38FFC07C147814F8
-EBC1F0EBC3E06C485A387D1F80D83FFFC9FCEA1FFCEA07F02D357EA432>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe ecbx1440 14.4 35
-/Fe 35 122 df<DC7FFEECFFC0031FB5D8801F13F092B6D8E07F13FC020703F9B57E021F
-D9C007B5EAC1FF91277FFE000102071380DAFFF8010713FC010301E049494813C0495B49
-494913F04990C7FC19E0495A741380017F17C04A6E6E130071EC00FC98C7FCAEBB12FEA5
-26007FFCC7000701C0C8FCB3B3A7007FB5D8FC07B612F0A552547DD34D>27
-D<151E153E15FE1403140F147FEB07FF0003B5FCB6FCA3EBF87FEAFC00C7FCB3B3B3A600
-7FB712FCA52E4E76CD42>49 D<EC1FFE49B512F0010F14FC013FECFF804915E02701FF80
-3F7F2703FC000713FCD807F001017F48486D7FD81F806E138048C87E7013C0D87FE016E0
-01F8806D16F000FF817F7013F8A56C5AA26C5A6C5AEA0380C914F05EA218E05E18C05E18
-804C13005F4C5A4C5A5F4B5B4B5B4B5B94C7FCED0FFC4B5A4B5AED7FC04B5A4A90C8FCEC
-03FC4A5A4A4814F84A5A4A5A4AC8FC02FEEC01F0495A495A495A5CD90F80140349C8FC01
-3E1507017FB7FC90B812E05A5A5A5A5A5A5AB9FC18C0A4354E7ACD42>I<913807FFC002
-7F13FC0103B67E010F15E090261FF80313F890267FC0007F01FEC7EA3FFE48488148486E
-138013FE486C6C6D13C0804817E080A66C5B18C06C5B6C90C75AD80038168090C8FC4C13
-00A24C5A5F4C5A4B5B4B13C0030F5BDB7FFEC7FC91387FFFF816C016FCEEFF80DA000313
-E09238007FF8EE3FFE707E70138018C07013E018F07013F8A218FC82A218FEA3EA03C0EA
-0FF0EA3FFC487EA2B5FCA218FCA25E18F8A26C4816F0495C4916E0D83FE04A13C06C485C
-D80FF04A1380D807FE91387FFE003B03FFE003FFFC6C90B65A6C6C15E0010F92C7FC0101
-14FCD9001F1380374F7BCD42>I<17FC1601A216031607160FA2161F163F167FA216FF5D
-5DA25D5D5D167F153E157E15FC15F8EC01F01403EC07E015C0EC0F80141FEC3F00143E5C
-14FC495A5C495A1307495A5C49C7FC5B137E137C5B1201485A5B485A120F485A90C8FC12
-3E127E5ABA1280A5C901FCC7FCAF021FB71280A5394F7CCE42>I<486C150601F0153E01
-FEEC01FED9FFF0133F91B65A5F5F5F5F5F94C7FC16FC5E16E093C8FC15FC01F0138091CA
-FCAC913807FF80023F13F891B512FE01F36E7E9026FFFC0113E09139E0007FF891C76C7E
-496E7E01F86E7E5B7013804916C0C9FC18E08218F0A418F8A31203EA0FE0EA3FF8487EA2
-12FF7FA218F0A25B5E6C4816E05B01C016C06CC85A18806C6C4A13007FD80FF04A5A6C6C
-ECFFFCD803FE4913F02701FFE00F5B6C6CB612806D92C7FC010F14F8010114C09026003F
-FCC8FC354F7ACD42>I<ED07FE92B512C0020314F0021F14FC91397FFC01FE9139FFE000
-7F01030180EB3F804990C7121F4948EC7FC0494814FF4948010313E0495A49485B5A485B
-A2485BA2486F13C091C7FC4803001300177E94C7FC5AA25B127FA2ED3FF04AB5FC020714
-C000FF4914F091391F807FF891393E001FFE02786D7E4A6D13807013C06D5A4A6D13E018
-F05C7013F8A291C813FCA44916FEA3127FA6123FA37F6C17FCA36C17F85E7E6E15F06C17
-E06C6D5B6E15C06C4B13806D6C491300D93FFC495A6DB4EBFFFC010790B512F06D5D0100
-1580021F01FCC7FC020313C0374F7BCD42>I<B912FEF0FFF019FE737E1AE0D8000F01C0
-C7001F7F06037F727F726C7E867313807313C0A27313E0A37313F0A94F13E0A34F13C01B
-80614F1300624F5A06035B4E13E0063F5B92B8C7FC19F8A2F1FF8003C0C7001F13E00601
-13F89538007FFE737E070F13C01BE07313F0851BF87313FCA27313FEA31BFFA91BFEA261
-1BFCA2614F13F81BF0614F13E0077F13C04EB51280060FEBFE00BB5A1AF01AC04FC7FC19
-C050527BD15D>66 D<932603FFF01407047F01FF140F0307B600E0131F033F03F8133F92
-B700FE137F02039126C003FF13FF020F01F8C7EA3FC1023F01C0EC0FE391B5C80003B5FC
-4901FC814949814901E082011F498249498292CA7E4948834948835A4A83485B4885A248
-49187FA2485B1B3FA2485B1B1FA25AA21B0091CDFCA2B5FCAE7EA280A36C1A1FA36C7FA2
-1B3F6C7F1B3E6C7F1B7E6C6D187C6C1AFC6E18F86C19016D6CEF03F06D7E6FEE07E06D6D
-EE0FC001076DEE1F806D01F8EE3F006D6D16FE6D01FF4B5A023F01C0EC07F8020F01FCEC
-3FF00203903AFFC001FFC0020091B6C7FC033F15FC030715F0DB007F1480040301F0C8FC
-505479D25F>I<BAFC19F819FF1AE01AF8D8000701F0C7001F13FE06017FDE003F13C007
-0F7F07037F737F737F747E747E747F86747F8886888688A2747FA3881B7FA288A51D80AF
-1D00A564A21BFF64A3505BA2505BA2505BA2505B505B99C7FC505A1A7F4F485A4F13F007
-0F5B073F5B4EB55A061F49C8FCBB12F81AE097C9FC19F896CAFC59527CD165>I<BB12FC
-A5D8000701F0C7000F7F1800191F190F19071903190119001A7E1A7F86A386A51B80DD03
-E0130FA497C7FCA31707A3170F171F173FEE01FF92B6FCA5EDF001EE003F171F170F1707
-A31703A794CAFCB3A2B812F0A549527CD153>70 D<B8D88007B712FCA5D8000701F0C900
-3FEB8000B3AE92BAFCA503F0C9123FB3B1B8D88007B712FCA55E527CD167>72
-D<B81280A5D8000701F0C7FCB3B3B3B2B81280A529527DD130>I<B812E0A5D8000F01E0
-CAFCB3B3A91AF8A419011AF0A51903A31907A2190F1AE0191FA2193F197F19FF60180760
-187F0503B5FCBB12C0A545527CD14F>76 D<B912E018FF19F019FE737ED8000701F0C714
-E0060F7F060313FC06007F737E737F8587737FA28785A287A863A261636361634F90C8FC
-4F5A4F5A06035B060F13E095B5128092B748C9FC19F019C019F09226F0000713FC050013
-FF063F7F727F727F727F727FA2727FA28486A886A71D707513F8A2851C017301C013F0A2
-73EBE003B86C6D9038F007E0739038FC1FC0070190B51280736C1400080F5BCE13F85D53
-7CD162>82 D<DA0FFE141C91B500F0133C010702FC137C011F02FF13FC017F15C19026FF
-F00113E148903980001FFB4890C7EA07FFD807FC14014848804848153F171F4848150FA2
-007F1607491503A2170112FFA217007FA26D167CA27F7F6D93C7FC6C7E14C014F8ECFF80
-6C14F8EDFFC06C15FC6CEDFF8017F06C16FC6C826C707E6C836D82011F8201078213016D
-6C81020781EC007F030380ED003F040314801600173F837113C0838312F883A3837EA319
-807EA26C5E19007F6D4B5A7F6D4B5A01FC4B5A6D151FD9FFC04A5AD97FF8ECFFE028FE1F
-FF80075B010790B6C7FCD8FC0115FC486C6C14F048010F14C0489026007FFCC8FC3A5479
-D249>I<B700FE4AB612F0A5D8000F01E0CA387FC000091FC7FCB3B3B26D611B3E811B7E
-6D197CA26D6D17FC636D6D1601027F4D5A6F4C5A023F170F6E6C4C5A6E6D4B5A6E01E003
-FFC8FC6E01F8EC03FE020001FEEC1FFC923B7FFFE001FFF8031F90B612E0030716800300
-4BC9FC041F14F0040091CAFC5C537CD165>85 D<EC3FFE0107B512E0011F14FC017F14FF
-2701FFC00F13C02703FE00037F486C01007F6E6D7E486D80707EA2707EA3707F6C5B6C90
-C7FC6C5AC9FCA60307B5FC0203B6FC147F0103B7FC011FEBF00F017F1300EBFFFC000313
-F04813C0485B4890C7FC5A5B485AF081F012FF5BA35EA26D5C127F6D5C003F03F713C36D
-D901E314E06CD9C00714FF00079026F01F8114C06C90B5C61480C602FC6D1300011F01F0
-EB3FFC01010180EB07F03C387CB642>97 D<EB3FF8B5FCA51203C6FCB3A4EE7FF00307B5
-FC031F14C0037F14F0913AF9FF007FFCDAFFF8EB1FFF03E001077F03806D7F92C76C7F4A
-6E7F5C4A6F7E85183F85A38584A31A80AD1A00A36061A261187F616E15FF616E4A5B6E4A
-5B6F495BDACFE04990C7FCDA87F0EB3FFE913A01FE01FFF8496CB65A49013F14C0490107
-49C8FC90C813E041547DD249>I<913803FFE0023F13FE91B67E010315E0010F9038003F
-F8D93FFCEB07FC4948497E4948131F4849497E485B485BA24890C7FC5A5B003F6F5A705A
-705A007F92C8FC5BA312FFAD127F7FA3123F7F6CEE0F80A26C6D141F18006C6D5C6C6D14
-3E6C6D147E6C6D5C6D6C495A6DB4EB07F0010F9038C01FE06D90B5128001014AC7FCD900
-3F13F80203138031387CB63A>I<943803FF80040FB5FCA5EE003F170FB3A4913803FF80
-023F13F849B512FE0107ECFF8F011F9038C03FEF90273FFE0007B5FCD97FF8130149487F
-484980484980484980488291C8FC5A5B123FA2127F5BA312FFAD127FA37F123FA3121F7F
-6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D4914E0D97FFCD90FEFEBFF80D91FFFEB7F8F0107
-90B5120F010114FC6D6C13E00207010049C7FC41547CD249>I<913807FF80027F13F849
-B512FE01076E7E011F010313E0903A3FFC007FF0D97FF06D7E49486D7E4849130F48496D
-7E48824890C77E1880485A82003F17C0A3485A18E082A212FFA290B8FCA401FCCAFCA612
-7FA37F123FA2EF03E06C7E17076C17C06C6D140F18806C6D141F6C6DEC3F006C6D147ED9
-7FFC495AD91FFFEB07F86D9038E03FF0010390B512C001005D023F01FCC7FC020113E033
-387CB63C>I<DA1FFE14FE49B539E007FF80010FDAFC1F13C0013FDAFF7F13E090267FF8
-07EBFF072701FFE001EBF07F48497E484990387FF83F91C7003F14C048EEFC1F489338FE
-070049021F90C7FCA2003F82A9001F5EA26D143F6C5E6C5E6E137F6C6D495A6C6D485B6C
-D9F80713804890B6C8FCD803EF14FC01C114E02707C01FFEC9FC49CBFCA2487EA37FA27F
-13FC90B612FE6CEDFFF017FCEFFF806C8318F06C836C837F48B87E1207D80FFCC700037F
-4848EC003F4848150F48486F138083485A83A56D5D007F18006D5D003F5F6C6C4B5A01FE
-153FD807FFED7FF06C01C049485AC601FC011F1380013FB648C7FC010F15F8010115C0D9
-000F01F8C8FC3B4F7CB542>103 D<EB3FF8B5FCA51203C6FCB3A4EE1FFC93B57E030314
-E0030F14F892391FC07FFC92397E003FFE03F86D7EECF9F04B6D7FECFBC0ECFF8092C76C
-7FA25CA25CA45CB3ACB6D8F807B612C0A542537CD249>I<133FEBFFC0487F487FA2487F
-A66C5BA26C5B6C5B013FC7FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD3
-24>I<EB3FF8B5FCA51203C6FCB3A50407B512F0A59339007FF000EF3FC04D5A4DC7FCEE
-01FC4C5AEE0FF04C5A4C5A4CC8FC16FEED03FC4B5A4B5A4B5A4B7E4B7EECF9FF02FB7F91
-B57EA28203BF7F031F7F14FE4A6C7FDAF0077F6F7FA26F7F6F7F167F83707F707FA2707F
-707F707FA2707F707F84B6D8F00F14FEA53F537DD245>107 D<EB3FF8B5FCA51203C6FC
-B3B3B3B1B612F8A51D537CD224>I<D93FF0D91FF84AB47EB591B56C010F13F8030302E0
-013F13FE030F6E90B6FCDB3F809027F803F80F7F922A7E007FFC07E0077F000302F89028
-3FFE0F80037FC6D9F1F0011F49487EDAF3E0DAFF3E814B153CDAF7805D92C76C496D7F14
-FF4A5EA24A5EA34A5EB3ADB6D8F80FB66CB612F8A565367BB56E>I<D93FF0EB1FFCB591
-B57E030314E0030F14F892391FC07FFC92397E003FFE000302F86D7EC6EBF1F04B6D7FEC
-F3C0ECF78092C76C7F14FF5CA25CA45CB3ACB6D8F807B612C0A542367CB549>I<913801
-FFC0023F13FE91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF49486D7F
-48496D7F48496D7F91C8127F4883488349153F001F83A2003F8349151FA2007F83A400FF
-1880AC007F1800A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D495B6C6D
-495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F49C8FC02
-0313E039387CB642>I<90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138
-F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC
-5CA45CB3ABB612FEA52E367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315
-FE3907FE003FD80FF0130F4848130348481301491300127F90C8127EA248153EA27FA27F
-01F091C7FC13FCEBFF806C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F01
-0F15801301D9000F14C0EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D
-143F17807F6DEC7F0001F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791
-C7FC39E0007FF02B387CB634>I<147CA614FCA41301A31303A21307A2130F131F133F13
-7F13FF1203000F90B512FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E
-806D6D5A6DEBC1F86DEBFFF001005C023F1380DA03FEC7FC294D7ECB33>I<D93FF89138
-01FFC0B50207B5FCA50003ED001FC61607B3AE5FA35FA25F137F5F6D6C14F7DC01E713F0
-6D6CD907C7EBFFC0903A0FFF801F876D90B51207010114FC6D6C13F0020701C091C7FC42
-377CB549>I<B600E090381FFFFCA5000101F8C7000113006CEE007C6E15FC017F5E6E14
-01013F5E8017036D6D5C17076D5E6F130F6D5E6F131F6D93C7FC815F6D6D133E177E6D15
-7C6F13FC027F5C811601DA3FFF5B16036E5C16876E5C16CF6E5C16EF16FF6E91C8FCA26E
-5BA26E5BA26F5AA36F5AA26F5AA26F5AA35E151F93C9FC5D153E157ED81FC0137C487E48
-6C13FC486C5B14015D4A5A14074A5A6C48485A4948CAFC495A383F81FC6CB45A6C5B0003
-13C0C648CBFC3E4D7DB445>121 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff ecrm1000 10 81
-/Ff 81 123 df<B81280A2290280962A>21 D<DA0FF813FC91397FFF07FF903B01F807DF
-83C0903A07E001FF0F903B1F8007FE1FE090393F000FFC137E16F85B9338F00780484801
-0790C7FC1503ACB812F8A32801F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7F
-BA30>27 D<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E
-497EA25BA2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E26
-7FFFE0B512C0A32A3B7FBA2E>I<EC0FFC91387FFF70903901F803F0903807E00790381F
-800FEB3F00137EA25B150748481303ADB7FCA33901F80003B3AB486C497E267FFFE0B512
-C0A32A3B7FBA2E>I<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F00F903C07E001CFC0
-0380903C1F8000FF0001C090273F0007FE130F017E4948497EA2495CA248485C03076E5A
-03030203C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA486C496C497E267F
-FFE0B500C1B51280A3413B7FBA45>I<007C137C00FE13FEEAFF01A3EAFE00A7007E13FC
-007C137CA8003C137800381338A700181330171E77BA2A>34 D<121C127FEAFF80A213C0
-A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39
-D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FC
-A25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E
-1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F
-6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0
-B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7
-FC120E5A5A5A5A5A13527CBD20>I<EB0380497EA7397803803C00FC147E00FE14FE397F
-8383FC393FC387F8390FE38FE03903FBBF803900FFFE00EB3FF8EB0FE0A2EB3FF8EBFFFE
-3903FBBF80390FE38FE0393FC387F8397F8383FC39FE0380FE00FC147E0078143C390007
-C000A76D5A1F247BBD2A>I<121C127FEAFF80A213C0A3127F121C1200A412011380A212
-0313005A1206120E5A5A5A12600A19798817>44 D<B512FCA516057F941C>I<121C127F
-EAFF80A5EA7F00121C0909798817>I<1506A2150E150CA2151C151815381530A2157015
-60A215E015C0A214011580A2140315005C1406A2140E140CA2141C1418A214381430A214
-70146014E05CA213015CA2130391C7FCA25B1306A2130E130C131C1318A213381330A213
-701360A213E05BA212015B120390C8FCA25A1206A2120E120CA2121C1218A21238123012
-701260A212E05AA21F537BBD2A>I<EB03F8EB1FFF90387E0FC09038F803E03901E000F0
-484813780007147C48487FA248C77EA2481580A3007EEC0FC0A500FE15E0B3007E15C0A4
-007F141F6C1580A36C1500A26C6C133EA26C6C5B6C6C5BEBF0013900F803E090387E0FC0
-D91FFFC7FCEB03F823397DB62A>I<EB01C013031307131F13FFB5FCA2131F1200B3B3A7
-497E007FB512F0A31C3779B62A>I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0001E
-6D7E001C6D7E486D7E5A6E7E126012FE6CEC7F807FA56CC7FC121CC8FCEDFF00A25D1401
-5D14035D4A5A4A5A5D4A5A4AC7FC147E5C495A14E0495A495A49C8FC011EEB01805B5B49
-130348481400485A485A90C75A48B6FC5A5A485CB6FCA321377CB62A>I<EB07F8EB3FFF
-90B512C03901F80FF03903C007F848486C7E390E0001FEEA0F80391FE000FF7FA56C5A6C
-5AC7485AA25D14035D4A5A5DEC0F80027FC7FCEB1FFCECFF809038000FE06E7EEC01FC81
-6E7EED7F80A216C0A2153F16E0A2121EEA7F80A2487EA316C0157F491480007EC7FC0070
-ECFF006C495A121E390F8003F83907F00FF00001B512C06C6C90C7FCEB0FF823397DB62A
->I<1538A2157815F8A2140114031407A2140F141F141B14331473146314C313011483EB
-030313071306130C131C131813301370136013C01201EA038013005A120E120C5A123812
-305A12E0B712F8A3C73803F800AA4A7E0103B512F8A325387EB72A>I<0006140CD80780
-133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB1FFE903878
-0F809038E007E03907C003F0496C7E130000066D7E81C8FC8181A21680A4121C127F5A7F
-A390C713005D12FC00605C12704A5A6C5C6C1303001E495A6C6C485A3907E03F800001B5
-C7FC38007FFCEB1FE021397CB62A>I<EC3FC0903801FFF0010713FC90380FE03E90383F
-800790387E001F49EB3F804848137F485A12075B000FEC3F0049131E001F91C7FC5B123F
-A3127F90C9FCEB01FC903807FF8039FF1E07E090383801F0496C7E01607F01E0137E497F
-16805BED1FC0A390C713E0A57EA47F123F16C0A2001FEC3F807F000F15006D5B000714FE
-6C6C5B6C6C485A3900FE07F090387FFFC0011F90C7FCEB03FC23397DB62A>I<12301238
-123E003FB612E0A316C05A168016000070C712060060140E5D5D00E014304814705D5DC7
-12014A5A4AC7FC1406140E5CA25C1478147014F05C1301A213035C1307A2130FA3131F5C
-A2133FA5137FA96DC8FC131E233A7BB72A>I<EB03F8EB1FFF017F13C09038FC07F03901
-E001F83903C0007C4848133C90C7123E48141E000E141F001E80A3121FA26D5B6D131E7F
-D80FF85B6D137C01FF13786C6D5A6CEBE3E0ECF780C601FFC7FC6D5A6D6C7E010F13E001
-3F7F01F97F3901E07FFE48486C7E380F800F48486C1380001E010113C0487F007C143F00
-78EC1FE0150F00F81407481403A21501A36C15C0A200781403007C15806C14076CEC0F00
-6C6C131ED807E0137C3903F803F0C6B55A013F1380D907FCC7FC23397DB62A>I<EB03F8
-EB1FFF017F13C03901FC07E048486C7E3907E001F8000F6D7E4848137E5B003F80A248C7
-1380A25AED1FC0A516E0A56C143FA36C7E157F121F6C6C13FF6C6C13DF000313013901F0
-039F3900FC0F1FD93FFC13C0EB07F090C7FCA2153F1680A216005D120F486C137E486C5B
-A24A5A4A5A49485A381F000F001CEB1F80260F807FC7FC3807FFFE000113F838003FC023
-397DB62A>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C09
-2479A317>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A213C0A3127F12
-1C1200A412011380A2120313005A1206120E5A5A5A12600A3479A317>I<007FB812F8B9
-12FCCCFCB0B912FC6C17F836147B9E41>61 D<EC03FF021F13E09138FC00FCD901E0131E
-D90780EB0780011EC7EA01E00138EC00704981498148488148488190C97E48D901FC1480
-000ED907FFEB01C0000C90391F03C000001C90267E00E013E000184901701360263801F8
-6D13700030496D13300103EC0FE0267007E00107133800601718495AA200E0171C484848
-150CAA6C6C7E1260A26D6C151C00701718263003F0130F0101141F00386D013F13382618
-00FC01771330001C017E9038E3F070000C90261F03C113E0000E903A07FF00FFC06CD901
-FCEB3F006C90CAFC7F6C7E6C7E13706D167C011EED03FCD90780EC1FF0D901E0ECFF80D9
-00FC90383FFC00021FB51280020301E0C7FC363C7BBA41>64 D<1538A3157CA315FEA34A
-7EA34A6C7EA202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A20270
-7FEC6003A202C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7
-121FA2496E7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512
-FEA3373C7DBB3E>I<B712E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707E
-A2707EA283A75F16035F4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0
-EE07F0707E707E83707EA21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486D
-EB7FF0B812C094C7FC16F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A
-01FF807E07903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE15
-3F12014848151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD
-127F6DED0180A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F
-15386D6C5CD91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F
-13F002011380313D7BBA3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0F
-F0EE03F8707E707E177FA2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF
-0FF0A218E0A2171F18C0EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7
-FC16F816C036397DB83F>I<B812FEA3000190388000076C90C8FC173F838383A383A318
-80170116C0A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318
-E093C712C0A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397EB8
-38>I<B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706
-A2ED0180A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813
-C0B612C0A32F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC
-000787D90FF0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507
-A248481503A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3F
-C0A2123F7F121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB
-03C7D903FEEB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41
->I<B648B512FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D
-497EB648B512FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A39
-7EB81E>I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380
-D87F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I<
-B649B5FCA3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8
-FC160E5E5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C
-7E14704A6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA270
-7E707F8484486D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9
-FCB3AD1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397D
-B834>I<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F015
-63A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318
-A26E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F
-8CA2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045
-397DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EB
-C7FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC0
-16E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE
-0FFEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA217063739
-7DB83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80
-EB07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F
-17E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A2
-6C6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D
-6C495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC
-363D7BBA41>I<B712C016FC16FF0001D9800013C06C90C7EA1FE0707EEE03F883707EA2
-707EA21880A71800A24C5AA24C5A5FEE0FF04C5AEEFF8091B548C7FC16F091CAFCB3A548
-7FB6FCA331397EB838>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049
-486D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F0007178049153F000F17
-C049151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF17FCAC007F17F8A26D15
-0FA2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4FC3C03F80383807F003B
-01FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77F0D91FCCEB3FE0D907EE
-14806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E131C161F183CEF807CEFC0
-F8EE0FFFA318F08218E07013C07013809338007E00364B7BBA41>I<B612FEEDFFE016F8
-000190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283A65FA24C5AA24C5A4C5A
-EE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE82707E707EA2161F83A5
-83A6F00180A217F8160F1803486D01071400B66D6C5A04011306933800FE0ECAEA3FFCEF
-07F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F807E33907E000F7484813
-7F4848133F48C7121F003E140F007E1407A2007C140312FC1501A36C1400A37E6D14006C
-7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F1480010714C0EB007F02
-0713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37EA216F07E15036C15E06C
-14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFFF8010F13E0D8C00190
-C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE130348EE01F000781600
-00701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A33539
-7DB83C>I<B6903807FFFEA3000101809038007FE06C90C8EA1F80EF0F001706B3B2170E
-6D150C80171C133F17186D6C14385F6D6C14F06D6C5C6D6C495A6D6CEB07806D6C49C7FC
-91387F807E91381FFFF8020713E09138007F80373B7DB83E>I<B500FC91387FFF80A300
-03018091380FFC006C90C8EA07E0715A6C705A6E1403017F93C7FCA280013F1506A26E14
-0E011F150C80010F5DA28001075DA26E147001031560A26D6C5CA2806D4A5AA2ED800302
-7F91C8FCA291383FC006A215E0021F5BA2EDF01C020F1318A26E6C5AA215FC02035BA2ED
-FEE002015BA26E6C5AA36FC9FCA3153EA2151CA3393B7EB83E>I<B5D8FC07B5D8F001B5
-FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307ED03C01B807F6C6F6C
-1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE067FA26D6C010E6D5BEE
-0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE6007A26D6C4CC7FC93
-38C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF0CA203E3151CDA1FE6
-EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA202015E4B1407A20200
-93C8FC4B80503B7EB855>I<007FB590383FFFFCA3C601F801071380D97FE0D903FCC7FC
-013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C1306160E6D6C5B6DEB801816389138
-7FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC5D14036E7EA26E7F6F7EA24B7E15
-DF9138019FF09138038FF8150F91380607FC91380E03FE140C4A6C7EEC38000230804A6D
-7E14E04A6D7E49486D7E130391C76C7E01066E7E130E010C6E7E011C1401013C8101FE82
-2607FF80010713E0B500E0013FEBFF80A339397EB83E>I<B500FE91383FFFE0A3000301
-E0913807FE00C649EC03F0017F6F5A606D6C5D6D6C140395C7FC6D6C1406A26D6C5C6D6C
-141C17186D6C143817306D6D5B6E6C13E05F91383FE0015F91381FF003DA0FF890C8FC16
-06913807FC0E160C913803FE1C913801FF185E6E13B016E0157F6F5AB3A24B7E023FB512
-C0A33B397FB83E>I<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E
-0038141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F
-4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC
-5B1203485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>I<
-007FB81280B912C0A26C17803204797041>95 D<EB1FE0EBFFFC3803E03F3907000F8039
-0F8007E0486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8
-EA0FF0EA1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383F
-C01E3A0FE0781FF03A03FFF00FE03A007F8007C026277DA52A>97
-D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3801F809039F7000FC001
-FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA167E16FEA216FC15016D14
-F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E903800FFF8C7EA1FC028
-3B7EB92E>I<EB03FC90381FFF8090387E03E03901F80070484813F83907E001FC380FC0
-03A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E127FA26C14067F001F14
-0E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090381FFF00EB07F81F277D
-A525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0
-007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C
-131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C078F90381FFE0FD907F813
-C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903F001F0D807E013F8380F
-C0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14
-037F001F14076C6C13060007140E6D131CD801F013386C6C137090387E03E090381FFF80
-903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213
-FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I<
-ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E0
-10000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38
-060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048
-C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB
-0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3
-120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0EBF70013FE496D7EA25B
-A35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380
-C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717>I<EB01C0EB07F0EB0F
-F8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A2123C127E00FF13F01303A2
-14E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA03F012FFA3120F1203B1
-913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EB
-F3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E157F811680ED1FC0486C
-EB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203B3B3AD487EB512C0A312
-3A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F8380
-3F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A348
-6C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F90
-39F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280
-A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F84848137C48487F48487F
-4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14
-076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090
-381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F
-803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3
-ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FF
-F8EC1FC091C8FCAB487EB512C0A328357EA42E>I<D903F813C090381FFE0190387E0781
-9038FC01C33903F000E3000714774848133749133F001F141F485A150F48C7FCA312FEAA
-127FA37E6D131F121F6D133F120F6C6C137F6C6C13EF3901F801CF39007E078F90381FFE
-0FEB07F890C7FCABED1FE00203B5FCA328357DA42C>I<3807E01F00FFEB7FC09038E1E3
-E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512
-F0A31C257EA421>I<EBFF03000313E7380F80FF381E003F487F487F00707F12F0A2807E
-A27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB
-0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A27
-7DA521>I<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215
-C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E0
-00FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7
-FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF800
-0FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2
-EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA214
-7CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E0
-18C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C717
-1CD93F01EBE01815830281EBF038D91F831430150102C3EBF87090260FC6001360A2D907
-E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100141E4A130E026013
-0C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092C7FC017E131C6D13
-186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF9038
-01C7E090380383F090380703F8EB0601496C7E011C137E49137F01787F496D7E486C8000
-0FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C0
-0003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A2
-6D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A21430A214701460A25C
-A2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I<00
-3FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F80006013
-7F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A000714
-0E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg ecss2074 20.74 10
-/Fg 10 116 df<EAFFC0B3B3B3B3B3B390B912FCA83E7570F456>76
-D<D8FFC0F03FF0B3B3B3B3AD6C6CF07FE0A46C6CF0FFC0A36D5F001F1A80A26C6C4D1300
-A26C6C4D5A6D170F6C616E161F6C6D4C5A6C6D4C5A6E16FF6D6C4B5B6D6C4B5B6D6C4B5B
-6D6C6C021F90C7FC6D01E0EC7FFE6D01F849485A6D9026FF801F5B6D91B65A6E5E021F16
-8002074BC8FC020115F86E6C14E0030F91C9FC030013F04C7770F46D>85
-D<91380FFF8049B512F0010F14FC017F14FF48B712C0000782001F824882DAE0007F49C7
-EA3FFE01F8140FD81FC06E7E90C86C1380121E00186F13C0001081CAFCEF7FE0A318F017
-3FAD93B5FC157F0207B6FC143F49B7FC1307011F153F017FEBF80090B512804801F8C7FC
-4813C04890C8FCEA0FFC485A485A5B485A5BA248C9FCA5177FA26D15FFA26C6C5C6D5C6D
-140F6C6C5C01FF91B5FC6CEBE00791B612BF6CEDFE3F16FC6C15F06C15C06CECFE006C6C
-13F0D91FFCC9FC344C77CA4C>97 D<EAFFC0B3B3ADED0FFC92B57E020714E0021F80027F
-14FC91B67E01C38101C7829026CFFE0080D9DFF0131FD9FFC001037F4A6D7F49C86C7E49
-153F496F7E170F496F7E5B717E4981A2711380A2187FA219C0183FA419E0181FAD183F19
-C0A3187FA2198018FFA24D1300A25F6D5E17076D4B5A6D151F4D5A6D4B5A6D15FF6D0203
-5B6E495BD9DFE0013F5B9026CFFC01B5C7FC01C7B65A01C35D01C15D01C05D023F14C002
-0F5C020301FCC8FCC8EA3FE03B7C72FA52>I<ED3FFF4AB512F8020F14FF023F15C04A15
-F049B712FC4916FF49178049EBE0004990C7120FD93FFC02011300D97FF06E7E4948151F
-0280814890C912034894C7FC5B485A5B120F5B121F5B123F5BA3485AA548CCFCAD6C7EA4
-7F123FA27F121F7FA26C7EA26C6C17806D1601000317036C6C160F6E151F6C01E0ED7FC0
-6D6CEC01FFD93FFC14076DB4143F6DD9E003B512806D90B6EAFE006D5E6D16F06D6C5D6E
-1580020F02FCC7FC020114E09126003FFCC8FC3A4C78CA47>I<DB1FE04AB4FC912601FF
-FE143F02079026FF8003B5FC4AECC01F023F02F0B6FC4A02FB158091BAFC49EBE01F49D9
-000302FCC7FC49486D01F8C8FC02F89038007F8049486E7E49486E7E4A140F013F824A14
-07A249C86C7EA401FE6F7EAA017F4B5AA46D6C4A5AA26E140F011F5E6E141F6D6C4A5A6D
-6C4A5A02FEEB01FF496C4990C9FC499038E01FFE92B55A495D02BF5C020F14C0496C5CD9
-7E0149CAFC9138001FE001FE90CCFCA67FA27F8080EB3FF091B612FE6DEDFFF818FF6D17
-C019F0013F17FC498390BA7E48854801E0C71203480180DA001F7F4848C900037F484816
-0049EF3FF84848171F49717E127F4917078648481703A76D1707007F616D170F003F616D
-171FD81FFCEF7FF06C6C4D5A6D5E6C01C003075B6C01F8033F5BC601FF4AB448C7FC6D01
-F0011F5B6D90B75A010F17E00103178001004CC8FC021F15F002031580DA000F01E0C9FC
-496D7CC950>103 D<EAFFE0ABC7FCB3A9EA7FE0B3B3B3B30B6F74EE25>105
-D<EAFFC0B3B3B3B3B3B3AF0A7B73FA25>108 D<ED1FF826FFC001B57E020714E0021F14
-F8027F8091B67E01C18101C316809038C7FE00D9CFF0011F13C0D9DFE0010713E0D9FF80
-130191C8FC18F049157F5B173F4916F8A249151FA35BA45BB3B3AC354A72C952>110
-D<91380FFFC091B512FE0107ECFFC0011F15F8017F15FE90B812804817C05A489038F000
-3F4890C70003138049EC007FD81FF8151F491507003F16014992C7FCA2485AA77FA26C7E
-7F7F6CB4FC6C13C014F86CEBFF806C14FC6CECFFE06C15FC6D14FF6D15C0010F81010315
-F8010081020F80DA007F7F03071480DB003F13C0160F040313E01600EF7FF0173FA2EF1F
-F8A2170FA7EF1FF0A20070163F127C007FEE7FE001C015FF01F0020313C0B5020F138002
-F0137F91B712006C5E001F5E000716F0C65E011F1580010302FCC7FCD9000F13C0354C7C
-CA3D>115 D E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 0 201 a Fg(Using)54 b(Libical)p 0 315 3900 24
-v 0 428 a Ff(Eric)28 b(Busb)r(o)r(om)f(\(eric@soft)n(w)n
-(arestudio.org\))1948 b(Jan)n(uary)26 b(2001)0 1072 y
-Fe(Con)l(ten)l(ts)0 1312 y Fd(1)77 b(In)m(tro)s(duction)3201
-b(2)125 1468 y Ff(1.1)83 b(The)28 b(libical)f(pro)5 b(ject)67
-b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(3)125 1625 y(1.2)83
-b(License)22 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)134 b(3)125 1781 y(1.3)83 b(Example)28 b(Co)r(de)78
-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(3)0 2021
-y Fd(2)77 b(Building)30 b(the)h(Library)2865 b(3)0 2260
-y(3)77 b(Structure)3330 b(3)125 2417 y Ff(3.1)83 b(Core)27
-b(iCal)g(classes)62 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134
-b(4)315 2573 y(3.1.1)94 b(Prop)r(erties)34 b(.)42 b(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)134 b(4)315 2730 y(3.1.2)94 b(Comp)r(onen)n(ts)84
-b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315 2886 y(3.1.3)94
-b(V)-7 b(alues)108 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134
-b(5)315 3043 y(3.1.4)94 b(P)n(arameters)61 b(.)41 b(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)134 b(5)125 3199 y(3.2)83 b(Other)27 b(elemen)n(ts)h(of)f(libical)42
-b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)134 b(5)315 3356 y(3.2.1)94 b(En)n(umerations)27
-b(and)g(t)n(yp)r(es)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315 3512 y(3.2.2)94 b(The)28
-b(parser)78 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(5)315
-3669 y(3.2.3)94 b(Error)26 b(ob)5 b(jects)57 b(.)42 b(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)134 b(5)315 3825 y(3.2.4)94 b(Memory)27 b(Managemen)n(t)65
-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)134 b(5)315 3981 y(3.2.5)94 b(Storage)26 b(classes)64
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)134 b(5)0 4221 y Fd(4)77 b(Di\033erences)30
-b(F)-8 b(rom)31 b(RF)m(Cs)2750 b(6)125 4377 y Ff(4.1)83
-b(Pseudo)28 b(Comp)r(onen)n(ts)62 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134
-b(6)125 4534 y(4.2)83 b(Com)n(bined)28 b(V)-7 b(alues)108
-b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(6)125 4690 y(4.3)83
-b(Multi-V)-7 b(alued)28 b(Prop)r(erties)54 b(.)41 b(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134
-b(6)0 4930 y Fd(5)77 b(Using)31 b(libical)3208 b(7)125
-5086 y Ff(5.1)83 b(Creating)27 b(Comp)r(onen)n(ts)73
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)134 b(7)315 5243 y(5.1.1)94 b(Constructor)26
-b(In)n(terfaces)48 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)134 b(7)315 5399 y(5.1.2)94 b(v)-5
-b(aargs)26 b(Constructors)70 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)134 b(8)p eop
-%%Page: 2 2
-2 1 bop 0 -167 3900 5 v 0 -200 a Fd(1.)73 b(In)m(tro)s(duction)3184
-b Ff(2)315 162 y(5.1.3)94 b(P)n(arsing)26 b(T)-7 b(ext)28
-b(Files)68 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)134 b(8)125 318 y(5.2)83 b(A)n(ccessing)27
-b(Comp)r(onen)n(ts)105 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(10)315 475
-y(5.2.1)h(Finding)28 b(Comp)r(onen)n(ts)99 b(.)42 b(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(10)315
-631 y(5.2.2)h(Iterating)27 b(Through)f(Comp)r(onen)n(ts)45
-b(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(10)315 788 y(5.2.3)h(Using)27 b(Comp)r(onen)n(t)h(Iterators)59
-b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(11)315 944 y(5.2.4)h(Remo)n(ving)27 b(Comp)r(onen)n(ts)83
-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)93 b(12)315 1101 y(5.2.5)h(W)-7 b(orking)27 b(with)h(prop)r(erties)e
-(and)i(parameters)e(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(12)315 1257 y(5.2.6)h(W)-7 b(orking)27 b(with)h(v)-5
-b(alues)52 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)93 b(13)315 1413 y(5.2.7)h(Chec)n(king)27
-b(Comp)r(onen)n(t)g(V)-7 b(alidit)n(y)25 b(.)42 b(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(14)315 1570 y(5.2.8)h(Con)n(v)n
-(erting)26 b(Comp)r(onen)n(ts)h(to)g(T)-7 b(ext)74 b(.)41
-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(14)125
-1726 y(5.3)83 b(Time)33 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)93 b(15)315 1883 y(5.3.1)h(Time)28 b(structure)56
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)93 b(15)315 2039 y(5.3.2)h(Creating)26
-b(time)j(structures)j(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)93 b(15)315 2196 y(5.3.3)h(Time)28
-b(manipulating)f(routines)38 b(.)j(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)93 b(15)125 2352 y(5.4)83 b(Storing)27
-b(Ob)5 b(jects)39 b(.)i(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(17)315 2509 y(5.4.1)h(Creating)26 b(a)i(new)f(set)48
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)93 b(17)315 2665 y(5.4.2)h(A)n(dding,)28
-b(Finding)f(and)h(Remo)n(ving)e(Comp)r(onen)n(ts)76 b(.)41
-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)93 b(18)315 2822 y(5.4.3)h(Other)27
-b(routines)70 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(19)125 2978
-y(5.5)83 b(Memory)27 b(Managemen)n(t)73 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(19)125 3135 y(5.6)83 b(Error)27 b(Handling)56 b(.)41
-b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)315 3291 y(5.6.1)h(Return)28
-b(v)-5 b(alues)34 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)315
-3448 y(5.6.2)h(icalerrno)28 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93
-b(20)315 3604 y(5.6.3)h(X-LIC-ERR)n(OR)27 b(and)g(X-LIC-INV)-9
-b(ALID-COMPONENT)70 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)93 b(20)125 3760 y(5.7)83 b(Naming)28
-b(Standard)h(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)93 b(21)0
-4000 y Fd(6)77 b(Hac)m(ks)32 b(and)g(Bugs)3009 b(22)0
-4338 y Fe(1)131 b(In)l(tro)t(duction)0 4577 y Ff(Libical)23
-b(is)f(an)h(Op)r(en)g(Source)f(implemen)n(tation)h(of)g(the)g
-(iCalendar)f(proto)r(cols)f(and)i(proto)r(col)e(data)i(units.)35
-b(The)23 b(iCalendar)0 4691 y(sp)r(eci\034cation)29 b(describ)r(es)f
-(ho)n(w)h(calendar)f(clien)n(ts)h(can)f(comm)n(unicate)h(with)h
-(calendar)d(serv)n(ers)g(so)i(users)f(can)h(store)f(their)0
-4804 y(calendar)e(data)h(and)h(arrange)d(meetings)i(with)h(other)f
-(users.)0 4961 y(Libical)g(implemen)n(ts)h(RF)n(C2445,)e(RF)n(C2446)f
-(and)j(some)f(of)g(RF)n(C2447)f(and)h(the)h(CAP)g(draft.)0
-5117 y(This)k(do)r(cumen)n(tation)g(assumes)g(that)g(y)n(ou)g(are)f
-(familiar)h(with)h(the)f(iCalendar)f(standards)g(RF)n(C2445)g(and)h(RF)
-n(C2446.)0 5231 y(these)c(sp)r(eci\034cations)e(are)h(online)g(on)h
-(the)g(CALSCH)g(w)n(ebpage)e(at:)p eop
-%%Page: 3 3
-3 2 bop 0 -167 3900 5 v 0 -200 a Fd(2.)73 b(Building)31
-b(the)g(Library)2847 b Ff(3)0 162 y Fc(http://www.imc.o)o(rg)o(/ie)o
-(tf)o(-c)o(ale)o(nd)o(ar)o(/)0 453 y Fb(1.1)112 b(The)38
-b(libical)c(pro)6 b(ject)0 663 y Ff(This)29 b(co)r(de)g(is)g(under)g
-(activ)n(e)f(dev)n(elopmen)n(t.)40 b(If)30 b(y)n(ou)e(w)n(ould)h(lik)n
-(e)f(to)h(con)n(tribute)g(to)g(the)g(pro)5 b(ject,)29
-b(y)n(ou)f(can)h(con)n(tact)f(me,)0 777 y(Eric)g(Busb)r(o)r(om,)f(at)g
-(eric@soft)n(w)n(arestudio.org.)33 b(The)27 b(pro)5 b(ject)27
-b(has)g(a)g(w)n(ebpage)g(at)0 1016 y Fc(http://softwares)o(tu)o(dio)o
-(.o)o(rg)o(/li)o(bi)o(ca)o(l/i)o(nd)o(ex)o(.ht)o(ml)0
-1256 y Ff(and)g(a)h(mailing)f(list)g(that)h(y)n(ou)f(can)g(join)h(b)n
-(y)f(sending)g(the)h(follo)n(wing)f(mail:)0 1495 y Fc(To:)42
-b(minimalist@softwa)o(re)o(st)o(udi)o(o.)o(or)o(g)0 1609
-y(Subject:)e(subscribe)g(libical)0 1900 y Fb(1.2)112
-b(License)0 2111 y Ff(The)60 b(co)r(de)f(and)h(data\034les)f(in)h(this)
-g(distribution)g(are)e(licensed)i(under)g(the)g(Mozilla)f(Public)h
-(License.)133 b(See)0 2224 y(h)n(ttp://www.mozilla.org/NPL/MPL-1.0.h)n
-(tml)37 b(for)j(a)h(cop)n(y)f(of)g(the)i(license.)76
-b(Alternately)-7 b(,)44 b(y)n(ou)c(ma)n(y)g(use)g(libical)0
-2338 y(under)32 b(the)g(terms)g(of)g(the)g(GNU)h(Library)d(General)h
-(Public)i(License.)50 b(See)32 b(h)n(ttp://www.fsf.org/cop)n
-(yleft/lesser.h)n(tml)0 2451 y(for)27 b(a)g(cop)n(y)g(of)g(the)h(LGPL.)
-0 2608 y(This)j(dual)g(license)f(ensures)h(that)g(the)g(library)f(can)g
-(b)r(e)i(incorp)r(orated)d(in)n(to)i(b)r(oth)g(proprietary)e(co)r(de)i
-(and)f(GPL'd)i(pro-)0 2721 y(grams,)23 b(and)h(will)h(b)r(ene\034t)g
-(from)f(impro)n(v)n(emen)n(ts)e(made)i(b)n(y)g(programmers)e(in)i(b)r
-(oth)h(realms.)34 b(I)25 b(will)f(only)g(accept)g(c)n(hanges)0
-2835 y(in)n(to)j(m)n(y)h(v)n(ersion)e(of)h(the)h(library)e(if)i(they)g
-(are)f(similarly)f(dual-licensed.)0 3126 y Fb(1.3)112
-b(Example)37 b(Co)s(de)0 3336 y Ff(A)h(lot)f(of)h(the)g(do)r(cumen)n
-(tation)f(for)g(this)h(library)e(is)i(in)g(the)g(form)f(of)g(example)g
-(co)r(de.)67 b(These)37 b(examples)g(are)g(in)h(the)0
-3450 y("examples")26 b(directory)g(of)i(the)g(distribution.)36
-b(Also)28 b(lo)r(ok)e(in)i("src/test")e(for)h(additional)g(annotated)g
-(examples.)0 3788 y Fe(2)131 b(Building)46 b(the)e(Library)0
-4027 y Ff(Libical)33 b(uses)h(auto)r(conf)f(to)h(generate)e(mak)n
-(e\034les.)55 b(It)34 b(should)g(built)g(with)g(no)g(adjustmen)n(ts)g
-(on)f(Lin)n(ux,)j(F)-7 b(reeBSD)33 b(and)0 4141 y(Solaris)22
-b(under)i(gcc.)34 b(Some)24 b(v)n(ersion)e(ha)n(v)n(e)g(b)r(een)i
-(successfully)f(b)r(een)h(build)g(on)f(MacOS,)g(Solaris,)g(UnixW)-7
-b(are,)24 b(And)g(T)-7 b(ru64)0 4254 y(UNIX)28 b(without)g(gcc,)f(but)i
-(y)n(ou)d(ma)n(y)h(run)h(in)n(to)f(problems)g(with)h(a)f(particular)f
-(later)h(v)n(ersion.)0 4411 y(F)-7 b(or)27 b(a)g(more)g(complete)g
-(guide)h(to)f(building)h(the)g(library)-7 b(,)26 b(see)h(the)h(README)i
-(\034le)e(in)f(the)h(distribution.)0 4749 y Fe(3)131
-b(Structure)0 4988 y Ff(The)28 b(iCal)f(calendar)f(mo)r(del)i(is)f
-(based)g(on)h(four)f(t)n(yp)r(es)g(of)h(ob)5 b(jects:)36
-b(comp)r(onen)n(ts,)27 b(prop)r(erties,)g(v)-5 b(alues)27
-b(and)g(parameters.)0 5144 y(Prop)r(erties)32 b(are)f(the)i(fundamen)n
-(tal)f(unit)i(of)e(information)g(in)g(iCal,)i(and)e(they)g(w)n(ork)f(a)
-h(bit)h(lik)n(e)f(a)g(hash)g(en)n(try)-7 b(,)34 b(with)e(a)0
-5258 y(constan)n(t)21 b(k)n(ey)h(and)g(a)f(v)-5 b(ariable)21
-b(v)-5 b(alue.)35 b(Prop)r(erties)21 b(ma)n(y)h(also)f(ha)n(v)n(e)g(mo)
-r(di\034ers,)h(called)g(parameters.)33 b(In)22 b(the)h(iCal)f(con)n
-(ten)n(t)0 5371 y(line)p eop
-%%Page: 4 4
-4 3 bop 0 -167 3900 5 v 0 -200 a Fd(3.)73 b(Structure)3313
-b Ff(4)0 162 y Fc(ORGANIZER;ROLE=C)o(HA)o(IR:)o(MA)o(IL)o(TO:)o(mr)o
-(bi)o(g@h)o(os)o(t.)o(com)0 401 y Ff(The)34 b(prop)r(ert)n(y)f(name)h
-(is)g("OR)n(GANIZER,")g(the)g(v)-5 b(alue)34 b(of)h(the)f(prop)r(ert)n
-(y)f(is)h("mrbig@host.com")e(and)i(the)g("R)n(OLE")0
-515 y(parameter)26 b(sp)r(eci\034es)h(that)h(Mr)g(Big)f(is)g(the)h(c)n
-(hair)e(of)i(the)g(meetings)f(asso)r(ciated)f(with)i(this)g(prop)r(ert)
-n(y)-7 b(.)0 671 y(Comp)r(onen)n(ts)26 b(are)f(groups)g(of)h(prop)r
-(erties)f(that)i(represen)n(t)e(the)i(core)e(ob)5 b(jects)26
-b(of)g(a)g(calendar)f(system,)h(suc)n(h)g(as)g(ev)n(en)n(ts)f(or)0
-785 y(timezones.)36 b(Comp)r(onen)n(ts)27 b(are)g(delimited)h(b)n(y)g
-("BEGIN")f(and)g("END")h(tags.)0 941 y(When)g(a)f(comp)r(onen)n(t)g(is)
-h(sen)n(t)f(across)f(a)h(net)n(w)n(ork,)f(if)i(it)g(is)g(un-encrypted,)
-f(it)h(will)g(lo)r(ok)f(something)g(lik)n(e:)0 1181 y
-Fc(BEGIN:VCALENDAR)0 1294 y(METHOD:REQUEST)0 1408 y(PRODID:)41
-b(-//hacksw/handc)o(al)o(//N)o(ON)o(SG)o(ML)c(v1.0//EN)0
-1521 y(BEGIN:VEVENT)0 1635 y(DTSTAMP:19980309)o(T2)o(310)o(00)o(Z)0
-1749 y(UID:guid-1.host1)o(.c)o(om)0 1862 y(ORGANIZER;ROLE=C)o(HA)o(IR:)
-o(MA)o(IL)o(TO:)o(mr)o(bi)o(g@h)o(os)o(t.)o(com)0 1976
-y(ATTENDEE;RSVP=TR)o(UE)o(;RO)o(LE)o(=R)o(EQ-)o(PA)o(RT)o(ICI)o(PA)o
-(NT)o(;CU)o(TY)o(PE)o(=GR)o(OU)o(P:)87 2089 y(MAILTO:employee-)o(A@h)o
-(os)o(t.)o(com)0 2203 y(DESCRIPTION:Proj)o(ec)o(t)h(XYZ)k(Review)f
-(Meeting)0 2317 y(CATEGORIES:MEETI)o(NG)0 2430 y(CLASS:PUBLIC)0
-2544 y(CREATED:19980309)o(T1)o(300)o(00)o(Z)0 2657 y(SUMMARY:XYZ)e
-(Project)i(Review)0 2771 y(DTSTART;TZID=US-)o(Ea)o(ste)o(rn)o(:1)o(998)
-o(03)o(12)o(T08)o(30)o(00)0 2884 y(DTEND;TZID=US-Ea)o(st)o(ern)o(:1)o
-(99)o(803)o(12)o(T0)o(930)o(00)0 2998 y(LOCATION:1CP)d(Conference)i
-(Room)i(4350)0 3112 y(END:VEVENT)0 3225 y(END:VCALENDAR)0
-3465 y Ff(Note)28 b(that)h(comp)r(onen)n(ts)f(can)g(b)r(e)h(nested;)g
-(this)g(example)e(has)h(b)r(oth)h(a)f(V)n(CALEND)n(AR)i(and)e(a)g
-(VEVENT)i(comp)r(onen)n(t,)0 3578 y(one)d(nested)h(inside)f(the)h
-(other.)0 3870 y Fb(3.1)112 b(Core)37 b(iCal)f(classes)0
-4080 y Ff(Libical)25 b(is)h(an)g(ob)5 b(ject-based,)25
-b(data-orien)n(ted)f(library)-7 b(.)34 b(Nearly)25 b(all)h(of)g(the)g
-(routines)f(in)h(the)g(library)e(are)h(asso)r(ciated)g(with)0
-4193 y(an)e(opaque)g(data)f(t)n(yp)r(es)i(and)f(p)r(erform)g(some)g(op)
-r(eration)f(on)h(that)h(data)e(t)n(yp)r(e.)36 b(Although)24
-b(the)f(library)f(do)r(es)h(not)h(actually)0 4307 y(ha)n(v)n(e)32
-b(classes,)h(w)n(e)g(will)g(use)g(those)g(terms)f(since)h(the)h(b)r
-(eha)n(vior)d(of)i(these)g(asso)r(ciations)e(of)j(data)e(and)h
-(routines)f(is)h(v)n(ery)0 4420 y(similar)27 b(to)g(a)g(class.)0
-4693 y Fd(3.1.1)94 b(Prop)s(erties)0 4903 y Ff(Prop)r(erties)23
-b(are)g(represen)n(ted)f(with)j(the)f(icalprop)r(ert)n(y)e(class)h(and)
-g(its)h(man)n(y)f("deriv)n(ed")f(classes)g(with)j(on)e("deriv)n(ed")f
-(class)0 5017 y(p)r(er)35 b(prop)r(ert)n(y)g(t)n(yp)r(e)g(in)h(RF)n
-(C2445.)59 b(Again,)37 b(there)e(is)h(no)f(actual)g(inheritance)g
-(relations,)h(but)g(there)g(are)e(clusters)h(of)0 5130
-y(routines)27 b(that)h(mak)n(e)e(this)i(term)g(useful.)37
-b(A)28 b(prop)r(ert)n(y)e(is)i(a)f(con)n(tainer)f(for)h(a)g(single)g(v)
--5 b(alue)28 b(and)f(a)g(set)h(of)f(parameters.)p eop
-%%Page: 5 5
-5 4 bop 0 -167 3900 5 v 0 -200 a Fd(3.)73 b(Structure)3313
-b Ff(5)0 162 y Fd(3.1.2)94 b(Comp)s(onen)m(ts)0 372 y
-Ff(In)29 b(libical,)f(comp)r(onen)n(ts)g(are)g(represen)n(ted)f(with)i
-(the)g(icalcomp)r(onen)n(t)e(class.)39 b(Icalcomp)r(onen)n(t)27
-b(is)i(a)f(con)n(tainer)f(for)h(a)g(set)0 485 y(of)g(other)e(comp)r
-(onen)n(ts)h(and)h(prop)r(erties.)0 758 y Fd(3.1.3)94
-b(V)-8 b(alues)0 968 y Ff(V)h(alues)29 b(are)g(represen)n(ted)f(in)i(a)
-f(similar)f(w)n(a)n(y)g(to)i(prop)r(erties;)f(a)g(base)g(class)g(and)g
-(man)n(y)g("deriv)n(ed)f(")h(classes.)41 b(A)30 b(v)-5
-b(alue)29 b(is)0 1082 y(essen)n(tially)d(a)i(abstract)e(handle)i(on)f
-(a)g(single)g(fundamen)n(tal)h(t)n(yp)r(e,)f(a)h(structure)f(or)f(a)h
-(union.)0 1354 y Fd(3.1.4)94 b(P)m(arameters)0 1564 y
-Ff(P)n(arameters)26 b(are)g(represetned)h(in)h(a)f(similar)g(w)n(a)n(y)
-f(to)i(prop)r(erties,)e(except)i(that)g(they)f(con)n(tain)g(only)g(one)
-g(v)-5 b(alue)0 1856 y Fb(3.2)112 b(Other)37 b(elemen)m(ts)g(of)g
-(libical)0 2066 y Ff(In)26 b(addition)f(to)h(the)g(core)e(iCal)h
-(classes,)g(libical)g(has)g(man)n(y)g(other)g(t)n(yp)r(es,)h
-(structures,)g(classes)e(that)i(aid)f(in)h(creating)e(and)0
-2179 y(using)j(iCal)g(comp)r(onen)n(ts.)0 2452 y Fd(3.2.1)94
-b(En)m(umerations)30 b(and)i(t)m(yp)s(es)0 2662 y Ff(Libical)h(is)f
-(strongly)g(t)n(yp)r(ed,)i(so)r(o)e(ev)n(ery)g(comp)r(onen)n(t,)i(prop)
-r(ert)n(y)-7 b(,)33 b(parameter,)g(and)f(v)-5 b(alue)33
-b(t)n(yp)r(e)g(has)g(an)f(en)n(umeration,)0 2776 y(and)27
-b(some)g(ha)n(v)n(e)g(an)g(asso)r(ciated)f(structure)h(or)g(union.)0
-3048 y Fd(3.2.2)94 b(The)32 b(parser)0 3258 y Ff(The)20
-b(libical)f(parser)f(o\033ers)h(a)g(v)-5 b(ariet)n(y)19
-b(of)h(w)n(a)n(ys)e(to)h(con)n(v)n(ert)f(RF)n(C2445)g(text)i(in)n(to)g
-(a)f(libical)g(iinsteral)g(comp)r(onen)n(t)h(structure.)0
-3372 y(the)28 b(parser)e(can)h(parse)f(blo)r(c)n(ks)h(of)h(text)g(as)f
-(a)g(string,)g(or)f(it)i(can)g(parse)e(lin-b)n(y-line.)0
-3645 y Fd(3.2.3)94 b(Error)32 b(ob)5 b(jects)0 3855 y
-Ff(Libical)27 b(has)g(a)g(substan)n(tial)g(error)f(rep)r(orting)g
-(system)i(for)f(b)r(oth)h(programming)d(errors)g(and)j(comp)r(onen)n(t)
-f(usage)f(errors.)0 4127 y Fd(3.2.4)94 b(Memory)30 b(Managemen)m(t)0
-4337 y Ff(Since)38 b(man)n(y)g(of)h(libicals)e(in)n(terfaces)h(return)g
-(strings,)i(the)e(library)f(has)h(its)h(o)n(wn)e(memory)h(managemen)n
-(t)f(system)h(to)0 4451 y(elimiate)28 b(the)g(need)f(to)h(free)f(ev)n
-(ery)f(string)h(returned)g(from)g(the)h(libraru.)0 4724
-y Fd(3.2.5)94 b(Storage)32 b(classes)0 4934 y Ff(The)c(library)e(also)g
-(o\033ers)h(sev)n(eral)f(classes)g(to)h(store)g(comp)r(onen)n(ts)g(to)g
-(\035ies,)h(memory)f(or)f(databases.)p eop
-%%Page: 6 6
-6 5 bop 0 -167 3900 5 v 0 -200 a Fd(4.)73 b(Di\033erences)31
-b(F)-8 b(rom)31 b(RF)m(Cs)2732 b Ff(6)0 162 y Fe(4)131
-b(Di\033erences)44 b(F)-11 b(rom)43 b(RF)l(Cs)0 400 y
-Ff(Libical)c(has)f(b)r(een)h(designed)g(to)f(follo)n(w)h(the)g
-(standards)e(as)i(closely)f(as)g(p)r(ossible,)j(so)e(that)g(the)g(k)n
-(ey)f(ob)5 b(jects)39 b(in)g(the)0 514 y(standards)32
-b(are)g(also)g(k)n(ey)g(ob)5 b(jects)33 b(in)g(the)h(library)-7
-b(.)52 b(Ho)n(w)n(ev)n(er,)32 b(there)h(are)f(a)h(few)g(areas)f(where)g
-(the)i(sp)r(eci\034cations)e(are)0 628 y(\(arguably\))e(irregular,)h
-(and)g(follo)n(wing)g(them)h(exactly)f(w)n(ould)g(result)h(in)g(an)f
-(unfriendly)h(in)n(terface.)49 b(These)31 b(deviations)0
-741 y(mak)n(e)c(libical)g(easier)f(to)i(use)f(b)n(y)h(main)n(taining)e
-(a)h(self-similar)g(in)n(terface.)0 1033 y Fb(4.1)112
-b(Pseudo)38 b(Comp)s(onen)m(ts)0 1243 y Ff(Libical)29
-b(de\034nes)g(comp)r(onen)n(ts)g(for)g(groups)f(of)h(prop)r(erties)f
-(that)i(lo)r(ok)f(and)g(act)g(lik)n(e)g(comp)r(onen)n(ts,)g(but)h(are)e
-(not)i(de\034ned)0 1356 y(as)e(comp)r(onen)n(ts)h(in)g(the)g(sp)r
-(eci\034cation.)41 b(XD)n(A)-7 b(YLIGHT)30 b(and)f(XST)-7
-b(AND)n(ARD)30 b(are)e(notable)h(examples.)40 b(These)29
-b(pseudo)0 1470 y(comp)r(onen)n(ts)d(group)f(prop)r(erties)g(within)i
-(the)g(VTIMEZONE)g(comp)r(onen)n(ts.)36 b(F)-7 b(or)25
-b(instanace,)h(the)h(timezone)f(prop)r(erties)0 1583
-y(asso)r(ciated)f(with)i(da)n(yligh)n(t)e(sa)n(vings)g(time)i(starts)e
-(with)i("BEGIN:D)n(A)-7 b(YLIGHT")27 b(and)f(ends)h(with)f("END:D)n(A)
--7 b(YLIGHT,)0 1697 y(just)32 b(lik)n(e)g(other)f(comp)r(onen)n(ts,)h
-(but)g(is)g(not)g(de\034ned)g(as)f(a)g(comp)r(onen)n(t)g(in)h(RF)n
-(C2445.)48 b(\()32 b(See)f(RF)n(C2445,)g(page)g(61)g(\))h(In)0
-1811 y(Libical,this)d(grouping)e(is)i(represen)n(ted)e(b)n(y)i(the)g
-(XD)n(A)-7 b(YLIGHT)30 b(comp)r(onen)n(t.)41 b(Standard)28
-b(iCAL)h(comp)r(onen)n(ts)f(all)h(start)0 1924 y(with)f(the)g(letter)g
-("V,")f(while)g(pseudo)g(comp)r(onen)n(ts)g(start)g(with"X.")0
-2081 y(There)22 b(are)g(also)g(pseudo)h(comp)r(onen)n(ts)f(that)h(are)f
-(conceptually)g(deriv)n(ed)g(classes)g(of)h(V)-9 b(ALARM.)23
-b(RF)n(C2446)e(de\034nes)i(what)0 2194 y(prop)r(erties)g(ma)n(y)h(b)r
-(e)g(included)h(in)f(eac)n(h)g(comp)r(onen)n(t,)g(and)g(for)g(V)-9
-b(ALARM,)25 b(the)f(set)g(of)h(prop)r(erties)e(it)h(ma)n(y)g(ha)n(v)n
-(e)f(dep)r(ends)0 2308 y(on)k(the)h(v)-5 b(alue)28 b(of)f(the)h(A)n
-(CTION)f(prop)r(ert)n(y)-7 b(.)0 2464 y(F)g(or)19 b(instance,)j(if)e(a)
-g(V)-9 b(ALARM)20 b(comp)r(onen)n(t)g(has)f(an)h(A)n(CTION)g(prop)r
-(ert)n(y)e(with)j(the)f(v)-5 b(alue)20 b(of)g("A)n(UDIO,")f(the)h(comp)
-r(onen)n(t)0 2578 y(m)n(ust)h(also)g(ha)n(v)n(e)f(an)h("A)-7
-b(TT)g(A)n(CH")21 b(prop)r(ert)n(y)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)20
-b(if)i(the)g(A)n(CTION)f(v)-5 b(alue)21 b(is)g("DISPLA)-7
-b(Y,")22 b(the)g(comp)r(onen)n(t)f(m)n(ust)0 2691 y(ha)n(v)n(e)26
-b(a)i(DESCRIPTION)g(prop)r(ert)n(y)-7 b(.)0 2848 y(T)g(o)28
-b(handle)g(these)g(v)-5 b(arious,)27 b(complex)h(restrictions,)f
-(libical)h(has)g(pseudo)g(comp)r(onen)n(ts)f(for)h(eac)n(h)f(t)n(yp)r
-(e)i(of)f(alarm:)37 b(XA)n(U-)0 2961 y(DIO)n(ALARM,)28
-b(XDISPLA)-7 b(Y)g(ALARM,)30 b(XEMAILALARM)f(and)f(XPR)n(OCEDUREALARM.)
-0 3253 y Fb(4.2)112 b(Com)m(bined)37 b(V)-9 b(alues)0
-3463 y Ff(Man)n(y)34 b(v)-5 b(alues)34 b(can)g(tak)n(e)g(more)g(than)g
-(one)h(t)n(yp)r(e.)58 b(TRIGGER,)35 b(for)f(instance,)i(can)e(ha)n(v)n
-(e)g(a)g(v)-5 b(alue)34 b(t)n(yp)r(e)h(of)g(with)g(DU-)0
-3577 y(RA)-7 b(TION)32 b(or)f(of)h(D)n(A)-7 b(TE-TIME.)33
-b(These)f(m)n(ultiple)g(t)n(yp)r(es)g(mak)n(e)f(it)i(di\036cult)g(to)e
-(create)g(routines)h(to)f(return)h(the)g(v)-5 b(alue)0
-3690 y(asso)r(ciated)26 b(with)i(a)f(prop)r(ert)n(y)-7
-b(.)0 3847 y(It)29 b(is)g(natural)f(to)h(ha)n(v)n(e)f(in)n(terfaces)g
-(that)h(w)n(ould)f(return)h(the)g(v)-5 b(alue)29 b(of)f(a)h(prop)r(ert)
-n(y)-7 b(,)28 b(but)i(it)f(is)g(cum)n(b)r(ersome)f(for)g(a)h(single)0
-3960 y(routine)j(to)g(return)g(m)n(ultiple)h(t)n(yp)r(es.)51
-b(So,)33 b(in)g(libical,)g(prop)r(erties)e(that)i(can)f(ha)n(v)n(e)f(m)
-n(ultiple)i(t)n(yp)r(es)f(are)f(giv)n(en)h(a)g(single)0
-4074 y(t)n(yp)r(e)26 b(that)g(is)g(the)g(union)g(of)g(their)g(RF)n
-(C2445)e(t)n(yp)r(es.)36 b(F)-7 b(or)26 b(instance,)g(in)g(libical,)g
-(the)g(v)-5 b(alue)26 b(of)g(the)g(TRIGGER)h(prop)r(ert)n(y)0
-4187 y(resolv)n(es)e(to)j(struct)f(icaltriggert)n(yp)r(e.)35
-b(This)28 b(t)n(yp)r(e)f(is)h(a)f(union)h(of)f(a)g(DURA)-7
-b(TION)29 b(and)e(a)g(D)n(A)-7 b(TE-TIME.)0 4479 y Fb(4.3)112
-b(Multi-V)-9 b(alued)36 b(Prop)s(erties)0 4689 y Ff(Some)31
-b(prop)r(erties,)h(suc)n(h)f(as)g(CA)-7 b(TEGORIES)33
-b(ha)n(v)n(e)d(only)h(one)g(v)-5 b(alue)32 b(t)n(yp)r(e,)h(but)f(eac)n
-(h)e(CA)-7 b(TEGORIES)33 b(prop)r(ert)n(y)d(can)0 4803
-y(ha)n(v)n(e)24 b(m)n(ultiple)h(v)-5 b(alue)25 b(instances.)35
-b(This)25 b(also)f(results)g(in)h(a)g(cum)n(b)r(ersome)f(in)n(terface)g
-(\025)g(CA)-7 b(TEGORIES)26 b(accessors)d(w)n(ould)0
-4916 y(ha)n(v)n(e)k(to)i(return)f(a)g(list)g(while)h(all)f(other)g
-(accessors)e(returned)i(a)g(single)g(v)-5 b(alue.)39
-b(In)29 b(libical,)g(all)f(prop)r(erties)f(ha)n(v)n(e)h(a)g(single)0
-5030 y(v)-5 b(alue,)35 b(and)e(m)n(ulti-v)-5 b(alued)33
-b(prop)r(erties)f(are)h(brok)n(en)f(do)n(wn)g(in)n(to)h(m)n(ultiple)h
-(single)f(v)-5 b(alued)33 b(prop)r(erties)g(during)f(parsing.)0
-5143 y(That)c(is,)f(an)g(input)i(line)e(lik)n(e,)0 5383
-y Fc(CATEGORIES:)39 b(work,)i(home)p eop
-%%Page: 7 7
-7 6 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3190 b Ff(7)0 162 y(b)r(ecomes)27 b(in)h(libical's)f(in)n
-(ternal)g(represen)n(tation)0 401 y Fc(CATEGORIES:)39
-b(work)0 515 y(CATEGORIES:)g(home)0 754 y Ff(Oddly)-7
-b(,)34 b(RF)n(C2445)d(allo)n(ws)g(some)h(m)n(ulti-v)-5
-b(alued)33 b(prop)r(erties)f(\()h(lik)n(e)g(FREEBUSY)h(\))f(to)g(exist)
-g(as)f(b)r(oth)h(a)f(m)n(ulti-v)-5 b(alues)0 868 y(prop)r(ert)n(y)24
-b(and)h(as)f(m)n(ultiple)h(single)g(v)-5 b(alue)24 b(prop)r(erties,)h
-(while)g(others)f(\()i(lik)n(e)e(CA)-7 b(TEGORIES)26
-b(\))f(can)g(only)g(exist)f(as)h(single)0 981 y(m)n(ulti-v)-5
-b(alued)32 b(prop)r(erties.)48 b(This)31 b(mak)n(es)g(the)h(in)n
-(ternal)f(represen)n(tation)e(for)i(CA)-7 b(TEGORIES)33
-b(illegal.)48 b(Ho)n(w)n(ev)n(er)30 b(when)0 1095 y(y)n(ou)d(con)n(v)n
-(ert)f(a)h(comp)r(onen)n(t)g(to)h(a)f(string,)g(the)h(library)e(will)i
-(collect)f(all)g(of)h(the)g(CA)-7 b(TEGORIES)28 b(prop)r(erties)f(in)n
-(to)g(one.)0 1433 y Fe(5)131 b(Using)44 b(libical)0 1691
-y Fb(5.1)112 b(Creating)37 b(Comp)s(onen)m(ts)0 1901
-y Ff(There)e(are)g(three)h(w)n(a)n(ys)e(to)i(create)e(comp)r(onen)n(ts)
-i(in)g(Libical:)53 b(creating)34 b(individual)i(ob)5
-b(jects)35 b(and)h(assem)n(bling)e(them,)0 2015 y(building)28
-b(en)n(tire)f(ob)5 b(jects)27 b(in)h(massiv)n(e)e(v)-5
-b(aargs)26 b(calls,)h(and)g(parsing)f(a)h(text)h(\034le)g(con)n
-(taining)e(iCalendar)h(data.)0 2287 y Fd(5.1.1)94 b(Constructor)32
-b(In)m(terfaces)0 2497 y Ff(Using)e(constructor)f(in)n(terfaces,)i(y)n
-(ou)f(create)f(eac)n(h)h(of)h(the)g(ob)5 b(jects)30 b(separately)f(and)
-i(then)g(assem)n(ble)e(them)i(in)g(to)g(com-)0 2611 y(p)r(onen)n(ts:)0
-2850 y Fc(icalcomponent)38 b(*event;)0 2964 y(icalproperty)g(*prop;)0
-3077 y(icalparameter)g(*param;)0 3191 y(struct)j(icaltimetype)e(atime;)
-0 3305 y(event)i(=)j(icalcomponent_n)o(ew)o(\(IC)o(AL)o(_V)o(EVE)o(NT)o
-(_C)o(OMP)o(ON)o(EN)o(T\);)0 3418 y(prop)e(=)h(icalproperty_new)o(_d)o
-(tst)o(am)o(p\()o(ati)o(me)o(\))37 b(;)0 3532 y(icalcomponent_ad)o(d_)o
-(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o(,)h(prop\);)0 3645
-y(prop)k(=)h(icalproperty_new)o(_u)o(id\()o('')o(gu)o(id-)o(1.)o(ho)o
-(st1)o(.c)o(om)o(''\))37 b(\);)0 3759 y(icalcomponent_ad)o(d_)o(pro)o
-(pe)o(rt)o(y\(e)o(ve)o(nt)o(,pr)o(op)o(\);)0 3872 y(prop=icalpropert)o
-(y_)o(new)o(_o)o(rg)o(ani)o(ze)o(r\()o(''m)o(rb)o(ig)o(@ho)o(st)o(.c)o
-(om')o('\))o(;)0 3986 y(param)k(=)j(icalparameter_n)o(ew)o(_ro)o(le)o
-(\(I)o(CAL)o(_R)o(OL)o(E_C)o(HA)o(IR)o(\))0 4100 y(icalproperty_add)o
-(_p)o(ara)o(me)o(te)o(r\(p)o(ro)o(p,)37 b(param\);)0
-4213 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o(,pr)o
-(op)o(\);)0 4453 y Ff(Notice)e(that)g(libical)g(uses)f(a)h(semi-ob)5
-b(ject-orien)n(ted)32 b(st)n(yle)j(of)g(in)n(terface.)58
-b(Most)34 b(things)h(y)n(ou)f(w)n(ork)f(with)j(are)e(ob)5
-b(jects,)0 4566 y(that)28 b(are)e(instan)n(tiated)h(with)h(a)f
-(constructor)f(that)i(has)f("new")g(in)g(the)h(name.)37
-b(Also)27 b(note)g(that,)h(other)f(than)g(the)h(ob)5
-b(ject)0 4680 y(reference,)30 b(most)g(structure)f(data)h(is)g(passed)f
-(in)h(to)g(libical)g(routines)f(b)n(y)h(v)-5 b(alue.)44
-b(Libical)30 b(has)g(some)f(complex)h(but)g(v)n(ery)0
-4793 y(regular)c(memory)g(handling)i(rules.)36 b(These)27
-b(are)g(detailed)g(in)h(section)f(5.5)g(\(\).)0 4950
-y(If)33 b(an)n(y)e(of)h(the)h(constructors)d(fail,)k(they)f(will)f
-(return)g(0.)50 b(If)33 b(y)n(ou)f(try)g(to)g(insert)g(0)f(in)n(to)h(a)
-g(prop)r(ert)n(y)f(or)h(comp)r(onen)n(t,)h(or)0 5063
-y(use)j(a)g(zero-v)-5 b(alued)34 b(ob)5 b(ject)36 b(reference,)h
-(libical)f(will)h(either)f(silen)n(tly)f(ignore)g(the)i(error)d(or)h
-(will)h(ab)r(ort)g(with)g(an)g(error)0 5177 y(message.)61
-b(This)36 b(b)r(eha)n(vior)e(is)i(con)n(trolled)f(b)n(y)g(a)h(compile)g
-(time)g(\035ag)f(\(ICAL_ERR)n(ORS_ARE_F)-9 b(A)i(T)g(AL\),)37
-b(and)f(will)0 5291 y(ab)r(ort)27 b(b)n(y)g(default.)p
-eop
-%%Page: 8 8
-8 7 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3190 b Ff(8)0 162 y Fd(5.1.2)94 b(v)-5 b(aargs)32
-b(Constructors)0 372 y Ff(There)24 b(is)g(another)g(w)n(a)n(y)f(to)i
-(create)e(complex)h(comp)r(onen)n(ts,)h(whic)n(h)f(is)h(arguably)d
-(more)i(elegan)n(t,)g(if)h(y)n(ou)f(are)g(not)g(horri\034ed)0
-485 y(b)n(y)k(v)-5 b(arargs.)35 b(The)28 b(v)-5 b(arargs)26
-b(constructor)g(in)n(terface)i(allo)n(ws)e(y)n(ou)i(to)f(create)h(in)n
-(tricate)f(comp)r(onen)n(ts)g(in)i(a)e(single)h(blo)r(c)n(k)f(of)0
-599 y(co)r(de.)37 b(Here)27 b(is)g(the)h(previous)f(examples)f(in)i
-(the)g(v)-5 b(aargs)26 b(st)n(yle.)174 830 y Fc(calendar)40
-b(=)349 943 y(icalcomponent_v)o(an)o(ew\()523 1057 y(ICAL_VCALENDAR_C)o
-(OM)o(PO)o(NEN)o(T,)523 1171 y(icalproperty_new)o(_v)o(er)o(sio)o(n\()o
-('')o(2.0)o('')o(\),)523 1284 y(icalproperty_new)o(_p)o(ro)o(did)o(\()
-741 1398 y(''-//RDU)g(Software//NONSGM)o(L)d(HandCal//EN''\),)523
-1511 y(icalcomponent_va)o(ne)o(w\()697 1625 y(ICAL_VEVENT_COMP)o(ONE)o
-(NT)o(,)697 1738 y(icalproperty_new)o(_dt)o(st)o(am)o(p\(a)o(ti)o(me)o
-(\),)697 1852 y(icalproperty_new)o(_ui)o(d\()o('')o(gui)o(d-)o(1.)o
-(hos)o(t1)o(.co)o(m')o('\))o(,)697 1966 y(icalproperty_van)o(ew_)o(or)o
-(ga)o(niz)o(er)o(\()872 2079 y(''mrbig@host.co)o(m')o('\))o(,)872
-2193 y(icalparameter_n)o(ew)o(_r)o(ole)o(\(I)o(CA)o(L_R)o(OL)o(E_C)o
-(HA)o(IR)o(\),)872 2306 y(0)872 2420 y(\),)697 2533 y(icalproperty_van)
-o(ew_)o(at)o(te)o(nde)o(e\()872 2647 y(''employee-A@ho)o(st)o(.c)o(om')
-o(',)872 2761 y(icalparameter_n)o(ew)o(_r)o(ole)o(\()1046
-2874 y(ICAL_ROLE_REQPA)o(RTI)o(CI)o(PA)o(NT\))o(,)872
-2988 y(icalparameter_n)o(ew)o(_r)o(svp)o(\(1)o(\),)872
-3101 y(icalparameter_n)o(ew)o(_c)o(uty)o(pe)o(\(I)o(CAL)o(_C)o(UTY)o
-(PE)o(_G)o(ROU)o(P\))o(,)872 3215 y(0)872 3328 y(\),)697
-3442 y(icalproperty_new)o(_lo)o(ca)o(ti)o(on\()828 3556
-y(1CP)42 b(Conference)e(Room)h(4350\),)697 3669 y(0)697
-3783 y(\),)523 3896 y(0)523 4010 y(\);)0 4241 y Ff(This)30
-b(form)f(is)h(similar)f(to)h(the)g(constructor)f(form)g(,)i(except)f
-(that)g(the)g(constructors)e(ha)n(v)n(e)h("v)-5 b(anew")29
-b(instead)g(of)h("new")0 4354 y(in)38 b(the)f(name.)66
-b(The)37 b(argumen)n(ts)f(are)h(similar)f(to)r(o,)k(except)d(that)g
-(the)h(comp)r(onen)n(t)f(constructor)f(can)h(ha)n(v)n(e)f(a)h(list)g
-(of)0 4468 y(prop)r(erties,)26 b(and)i(the)f(prop)r(ert)n(y)g
-(constructor)e(can)i(ha)n(v)n(e)g(a)g(list)g(of)h(parameters.)35
-b(Be)27 b(sure)f(to)i(terminate)f(ev)n(ery)f(list)i(with)0
-4582 y(a)f('0',)h(or)e(y)n(our)g(co)r(de)i(will)g(crash,)e(if)i(y)n(ou)
-f(are)g(luc)n(ky)-7 b(.)0 4853 y Fd(5.1.3)94 b(P)m(arsing)32
-b(T)-8 b(ext)32 b(Files)0 5063 y Ff(The)g(\034nal)g(w)n(a)n(y)f(to)h
-(create)f(comp)r(onen)n(ts)h(will)g(probably)f(b)r(e)h(the)h(most)f
-(common;)i(y)n(ou)d(can)h(create)f(comp)r(onen)n(ts)g(from)0
-5176 y(RF)n(C2445)26 b(complian)n(t)h(text.)37 b(If)28
-b(y)n(ou)f(ha)n(v)n(e)f(the)i(string)f(in)h(memory)-7
-b(,)26 b(use)0 5407 y Fc(icalcomponent*)38 b(icalparser_pars)o(e_)o
-(str)o(in)o(g\()o(cha)o(r*)f(str\);)p eop
-%%Page: 9 9
-9 8 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3190 b Ff(9)0 162 y(If)38 b(the)g(string)f(con)n(tains)f
-(only)h(one)h(comp)r(onen)n(t,)h(the)f(parser)e(will)i(return)f(the)h
-(comp)r(onen)n(t)f(in)h(libical)f(form.)67 b(If)38 b(the)0
-275 y(string)45 b(con)n(tains)g(m)n(ultiple)h(comp)r(onen)n(ts,)k(the)c
-(m)n(ultiple)g(comp)r(onen)n(ts)f(will)h(b)r(e)g(returned)f(as)g(the)h
-(c)n(hildren)g(of)f(an)0 389 y(ICAL_XR)n(OOT_COMPONENT)26
-b(comp)r(onen)n(t.)0 545 y(P)n(arsing)h(a)h(whole)g(string)f(ma)n(y)h
-(seem)g(w)n(asteful)f(if)i(y)n(ou)f(w)n(an)n(t)f(to)h(pull)h(a)f(large)
-e(comp)r(onen)n(t)i(o\033)h(of)f(the)g(net)n(w)n(ork)f(or)g(from)0
-659 y(a)g(\034le;)h(y)n(ou)f(ma)n(y)g(prefer)g(to)g(parse)f(the)i(comp)
-r(onen)n(t)g(line)f(b)n(y)h(line.)37 b(This)27 b(is)h(p)r(ossible)f(to)
-r(o)g(b)n(y)g(using:)0 898 y Fc(icalparser*)39 b(icalparser_new\(\))o
-(;)0 1012 y(void)j(icalparser_free\()o(ic)o(al)o(par)o(se)o(r*)37
-b(parser\);)0 1125 y(icalparser_get_l)o(in)o(e\(p)o(ar)o(se)o(r,r)o(ea)
-o(d_)o(str)o(ea)o(m\))o(;)0 1239 y(icalparser_add_l)o(in)o(e\(p)o(ar)o
-(se)o(r,l)o(in)o(e\))o(;)0 1353 y(icalparser_set_g)o(en)o(_da)o(ta)o
-(\(p)o(ars)o(er)o(,s)o(tre)o(am)o(\))0 1592 y Ff(These)21
-b(routines)f(will)i(construct)f(a)f(parser)g(ob)5 b(ject)21
-b(to)g(whic)n(h)g(y)n(ou)g(can)g(add)g(lines)g(of)g(input)h(and)f
-(retriev)n(e)f(an)n(y)h(comp)r(onen)n(ts)0 1705 y(that)32
-b(the)g(parser)f(creates)f(from)i(the)g(input.)51 b(These)31
-b(routines)g(w)n(ork)g(b)n(y)g(sp)r(eci\034ng)h(an)g(adaptor)e(routine)
-h(to)h(get)g(string)0 1819 y(data)27 b(from)g(a)g(source.)36
-b(F)-7 b(or)27 b(an)g(example:)0 2058 y Fc(char*)41 b
-(read_stream\(char)c(*s,)43 b(size_t)e(size,)g(void)h(*d\))87
-2286 y(char)g(*c)h(=)g(fgets\(s,size,)38 b(\(FILE*\)d\);)87
-2399 y(return)j(c;)0 2626 y(main\(\))87 2740 y(char*)h(line;)87
-2853 y(icalcomponent)c(*c;)87 2967 y(icalparser)h(*parser)i(=)i
-(icalparser_new\(\))o(;)87 3081 y(FILE*)f(stream)f(=)i
-(fopen\(argv1,r\);)87 3194 y(icalparser_set_g)o(en_)o(da)o(ta)o(\(pa)o
-(rs)o(er)o(,st)o(re)o(am)o(\);)87 3308 y(do)174 3421
-y(line)f(=)h(icalparser_get_li)o(ne)o(\(p)o(ars)o(er)o(,r)o(ead)o(_s)o
-(tr)o(eam)o(\);)174 3535 y(c)g(=)h(icalparser_add_)o(li)o(ne\()o(pa)o
-(rs)o(er,)o(li)o(ne)o(\);)174 3648 y(if)f(\(c)g(!=)f(0\))218
-3762 y(printf\(s,icalcom)o(po)o(ne)o(nt_)o(as)o(_i)o(cal)o(_s)o(tr)o
-(ing)o(\(c)o(\)\))o(;)218 3876 y(icalparser_claim)o(\(p)o(ar)o(ser)o
-(\);)218 3989 y(printf\(n--------)o(--)o(--)o(---)o(n\))o(;)218
-4103 y(icalcomponent_fr)o(ee)o(\(c)o(\);)131 4330 y(while)f(\()i(line)f
-(!=)h(0\);)0 4569 y Ff(The)48 b(parser)f(ob)5 b(ject)48
-b(parameterizes)f(the)i(routine)f(used)g(to)g(get)h(input)g(lines)f
-(with)h(icalparser_set_gen_data\(\))0 4683 y
-(andicalparser_get_line\(\).)81 b(In)44 b(this)f(example,)k(the)d
-(routine)f(read_stream\(\))e(will)j(fetc)n(h)g(the)f(next)h(line)g
-(from)e(a)0 4796 y(stream,)51 b(with)d(the)f(stream)g(passed)f(in)h(as)
-g(the)g(v)n(oid*)f(parameter)f(d.)96 b(The)47 b(parser)f(calls)g
-(read_stream\(\))f(from)0 4910 y(icalparser_get_line\(\),)e(but)g(it)g
-(also)e(needs)h(to)h(kno)n(w)e(what)h(stream)g(to)g(use.)81
-b(This)42 b(is)h(set)f(b)n(y)g(the)h(call)f(to)g(ical-)0
-5024 y(parser_set_gen_data\(\).)64 b(By)37 b(using)g(a)h(di\033eren)n
-(t)f(routine)h(for)f(read_stream)e(or)i(passing)g(in)h(di\033eren)n(t)f
-(data)h(with)0 5137 y(icalparser_set_gen_data,)23 b(y)n(ou)k(can)g
-(connect)g(to)h(an)n(y)e(data)i(source.)0 5294 y(Using)g(the)h(same)e
-(mec)n(hanism,)h(other)g(implemen)n(tations)g(could)g(read)f(from)h
-(memory)g(bu\033ers,)g(so)r(c)n(k)n(ets)f(or)g(other)h(in)n(ter-)0
-5407 y(faces.)p eop
-%%Page: 10 10
-10 9 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(10)0 162 y(Since)28 b(the)g(example)f(co)r(de)g(is)
-h(a)f(v)n(ery)f(common)h(w)n(a)n(y)f(to)i(use)f(the)h(parser,)e(there)i
-(is)f(a)g(con)n(v)n(enience)f(routine;)0 401 y Fc(icalcomponent*)38
-b(icalparser_pars)o(e\()o(ica)o(lp)o(ar)o(ser)f(*parser,)654
-515 y(char*)k(\(*line_gen_func\))o(\(c)o(har)c(*s,)42
-b(size_t)f(size,)85 b(void*)42 b(d\)\))0 754 y Ff(T)-7
-b(o)36 b(use)h(this)g(routine,)i(y)n(ou)d(still)h(m)n(ust)g(construct)f
-(the)h(parser)f(ob)5 b(ject)36 b(and)h(pass)f(in)h(a)f(reference)g(to)h
-(a)f(line)h(reading)0 868 y(routine.)50 b(If)33 b(the)f(parser)f(can)h
-(create)f(a)h(single)f(comp)r(onen)n(t)h(from)g(the)g(input,)i(it)f
-(will)f(return)g(a)g(p)r(oin)n(ter)g(to)g(the)g(newly)0
-981 y(constructed)h(comp)r(onen)n(t.)54 b(If)34 b(the)g(parser)e(can)h
-(construct)f(m)n(ultiple)i(comp)r(onen)n(ts)f(from)g(the)h(input,)i(it)
-e(will)g(return)e(a)0 1095 y(reference)c(to)h(an)g(XR)n(OOT)g(comp)r
-(onen)n(t)g(\()h(of)f(t)n(yp)r(e)g(ICAL_XR)n(OOT_COMPONENT.\))g(This)g
-(XR)n(OOT)f(comp)r(onen)n(t)0 1209 y(will)g(hold)f(all)h(of)f(the)h
-(comp)r(onen)n(ts)f(constructed)g(from)g(the)h(input)g(as)f(c)n
-(hildren.)0 1500 y Fb(5.2)112 b(A)m(ccessing)37 b(Comp)s(onen)m(ts)0
-1710 y Ff(Giv)n(en)30 b(a)g(reference)f(to)i(a)e(comp)r(onen)n(t,)i(y)n
-(ou)f(probably)f(will)h(w)n(an)n(t)g(to)g(access)f(the)i(prop)r
-(erties,)f(parameters)e(and)j(v)-5 b(alues)0 1824 y(inside.)56
-b(Libical)34 b(in)n(terfaces)f(let)i(y)n(ou)e(\034nd)i(sub-comp)r(onen)
-n(t,)g(add)e(and)h(remo)n(v)n(e)f(sub-comp)r(onen)n(ts,)i(and)e(do)h
-(the)h(same)0 1937 y(three)27 b(op)r(erations)g(on)g(prop)r(erties.)0
-2210 y Fd(5.2.1)94 b(Finding)30 b(Comp)s(onen)m(ts)0
-2420 y Ff(T)-7 b(o)27 b(\034nd)h(a)f(sub-comp)r(onen)n(t)g(of)h(a)f
-(comp)r(onen)n(t,)g(use:)0 2659 y Fc(icalcomponent*)38
-b(icalcomponent_g)o(et)o(_fi)o(rs)o(t_)o(com)o(po)o(ne)o(nt\()1525
-2773 y(icalcomponent*)g(component,)1525 2887 y(icalcomponent_ki)o(nd)f
-(kind\);)0 3126 y Ff(This)27 b(routine)g(will)h(return)f(a)g(reference)
-g(to)g(the)h(\034rst)f(comp)r(onen)n(t)g(of)h(the)f(t)n(yp)r(e)h
-('kind.')37 b(The)28 b(k)n(ey)e(kind)i(v)-5 b(alues,)27
-b(listed)h(in)0 3240 y(icalen)n(ums.h)f(are:)0 3479 y
-Fc(ICAL_ANY_COMPONE)o(NT)0 3593 y(ICAL_VEVENT_COMP)o(ON)o(ENT)0
-3706 y(ICAL_VTODO_COMPO)o(NE)o(NT)0 3820 y(ICAL_VJOURNAL_CO)o(MP)o(ONE)
-o(NT)0 3933 y(ICAL_VCALENDAR_C)o(OM)o(PON)o(EN)o(T)0
-4047 y(ICAL_VFREEBUSY_C)o(OM)o(PON)o(EN)o(T)0 4161 y(ICAL_VALARM_COMP)o
-(ON)o(ENT)0 4400 y Ff(These)g(are)g(only)g(the)h(most)f(common)g(comp)r
-(onen)n(ts;)g(there)h(are)e(man)n(y)h(more)g(listed)h(in)g(icalen)n
-(ums.h.)0 4557 y(As)h(y)n(ou)f(migh)n(t)h(guess,)g(if)g(there)g(is)g
-(more)f(than)h(one)f(sub)r(comp)r(onen)n(t)h(of)g(the)h(t)n(yp)r(e)f(y)
-n(ou)f(ha)n(v)n(e)g(c)n(hosen,)g(this)h(routine)g(will)0
-4670 y(return)e(only)g(the)h(\034rst.)37 b(to)27 b(get)h(at)f(the)h
-(others,)f(y)n(ou)f(need)i(to)g(iterate)f(through)f(the)i(comp)r(onen)n
-(t.)0 4943 y Fd(5.2.2)94 b(Iterating)32 b(Through)g(Comp)s(onen)m(ts)0
-5153 y Ff(Iteration)27 b(requires)f(a)h(second)g(routine)g(to)h(get)f
-(the)h(next)g(sub)r(comp)r(onen)n(t)f(after)g(the)h(\034rst:)p
-eop
-%%Page: 11 11
-11 10 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(11)0 162 y Fc(icalcomponent*)38 b(icalcomponent_g)o
-(et)o(_ne)o(xt)o(_c)o(omp)o(on)o(en)o(t\()654 275 y(icalcomponent*)f
-(component,)654 389 y(icalcomponent_k)o(in)o(d)h(kind\);)0
-610 y Ff(With)25 b(the)g('\034rst')f(and)g('next')h(routines,)g(y)n(ou)
-e(can)h(create)g(a)g(for)f(lo)r(op)h(to)h(iterate)f(through)f(all)h(of)
-h(a)f(comp)r(onen)n(ts)g(sub)r(com-)0 723 y(p)r(onen)n(ts)87
-944 y Fc(for\(c)42 b(=)h(icalcomponent_g)o(et_)o(fi)o(rs)o(t_c)o(om)o
-(po)o(nen)o(t\()o(co)o(mp,)o(IC)o(AL_)o(AN)o(Y_)o(COM)o(PO)o(NE)o(NT\))
-o(;)392 1058 y(c)g(!=)g(0;)44 1171 y(c)g(=)g(icalcomponent_ge)o(t_)o
-(ne)o(xt_)o(co)o(mp)o(one)o(nt)o(\(c)o(omp)o(,I)o(CA)o(L_A)o(NY)o(_CO)o
-(MP)o(ON)o(ENT)o(\)\))261 1398 y(do_something\(c\);)0
-1619 y Ff(This)32 b(co)r(de)f(bit)h(wil)g(iterate)g(through)f(all)g(of)
-h(the)g(sub)r(comp)r(onen)n(ts)f(in)h('comp')g(but)g(y)n(ou)f(can)g
-(select)h(a)f(sp)r(eci\034c)h(t)n(yp)r(e)g(of)0 1733
-y(comp)r(onen)n(t)27 b(b)n(y)h(c)n(hanging)e(ICAL_ANY_COMPONENT)i(to)f
-(another)g(comp)r(onen)n(t)g(t)n(yp)r(e.)0 2002 y Fd(5.2.3)94
-b(Using)31 b(Comp)s(onen)m(t)f(Iterators)0 2212 y Ff(The)h(iteration)f
-(mo)r(del)h(in)h(the)f(previous)f(section)g(requires)g(the)h(comp)r
-(onen)n(t)g(to)g(k)n(eep)f(the)i(state)f(of)g(the)g(iteration.)46
-b(So,)0 2326 y(y)n(ou)32 b(could)g(not)h(use)f(this)h(mo)r(del)g(to)f
-(p)r(erform)g(a)g(sorting)f(op)r(erations,)i(since)f(y)n(ou'd)g(need)h
-(t)n(w)n(o)f(iterators)f(and)h(there)g(is)0 2440 y(only)26
-b(space)h(for)f(one.)36 b(If)27 b(y)n(ou)f(ev)n(er)g(call)h(icalcomp)r
-(onen)n(t_get_\034rst_comp)r(onen)n(t\(\))d(when)j(an)f(iteration)h(is)
-f(in)h(progress,)0 2553 y(the)h(p)r(oin)n(ter)f(will)h(b)r(e)g(reset)f
-(to)g(the)h(b)r(eginning.)0 2710 y(T)-7 b(o)28 b(solv)n(e)g(this)h
-(problem,)g(there)f(are)g(also)g(external)f(iterators)h(for)g(comp)r
-(onen)n(ts.)40 b(The)28 b(routines)g(asso)r(ciated)g(with)h(these)0
-2823 y(external)e(iterators)f(are:)0 3044 y Fc(icalcompiter)38
-b(icalcomponent_beg)o(in)o(_co)o(mp)o(on)o(ent)o(\(i)o(ca)o(lco)o(mp)o
-(one)o(nt)o(*)f(component,)j(icalcomponent_k)o(ind)d(kind\);)0
-3158 y(icalcompiter)h(icalcomponent_end)o(_c)o(omp)o(on)o(en)o(t\(i)o
-(ca)o(lc)o(omp)o(on)o(ent)o(*)f(component,)j(icalcomponent_k)o(in)o(d)e
-(kind\);)0 3271 y(icalcomponent*)g(icalcompiter_ne)o(xt)o(\(ic)o(al)o
-(co)o(mpi)o(te)o(r*)f(i\);)0 3385 y(icalcomponent*)h(icalcompiter_pr)o
-(io)o(r\(i)o(ca)o(lc)o(omp)o(it)o(er)o(*)g(i\);)0 3498
-y(icalcomponent*)g(icalcompiter_de)o(re)o(f\(i)o(ca)o(lc)o(omp)o(it)o
-(er)o(*)g(i\);)0 3719 y Ff(The)27 b(_b)r(egin_\(\))g(and)g(_end_\(\))g
-(routines)g(return)g(a)g(new)g(iterator)f(that)h(p)r(oin)n(ts)g(to)h
-(the)f(b)r(eginning)g(and)g(ending)h(of)f(the)0 3833
-y(list)36 b(of)f(sub)r(comp)r(onen)n(t)h(for)f(the)h(giv)n(en)f(comp)r
-(onen)n(t,)i(and)e(the)h(kind)g(argumen)n(t)e(w)n(orks)g(lik)n(e)h(the)
-h(kind)g(argumen)n(t)f(for)0 3946 y(in)n(ternal)27 b(iterators.)0
-4103 y(After)f(creating)e(an)h(iterators,)g(use)g(_next_\(\))g(and)h
-(_prior_\(\))e(to)h(step)h(forw)n(ard)d(and)j(bac)n(kw)n(ard)d(through)
-i(the)h(list)f(and)0 4216 y(get)30 b(the)g(comp)r(onen)n(t)g(that)g
-(the)g(iterator)e(p)r(oin)n(ts)i(to,)h(and)e(use)h(_deref\(\))g(to)g
-(return)f(the)h(comp)r(onen)n(t)g(that)g(the)g(iterator)0
-4330 y(p)r(oin)n(ts)c(to)g(without)h(mo)n(ving)e(the)i(iterator.)35
-b(All)27 b(routines)f(will)g(return)g(0)g(when)g(they)h(mo)n(v)n(e)e
-(to)h(p)r(oin)n(t)h(o\033)f(the)h(end)f(of)h(the)0 4444
-y(list.)0 4600 y(Here)g(is)h(an)f(example)g(of)h(a)f(lo)r(op)g(using)g
-(these)h(routines:)0 4821 y Fc(for\()131 4934 y(i)43
-b(=)g(icalcomponent_be)o(gi)o(n_c)o(om)o(po)o(nen)o(t\()o(im)o(pl-)o
-(cl)o(us)o(ter)o(,I)o(CAL)o(_A)o(NY)o(_CO)o(MP)o(ON)o(ENT)o(\);)131
-5048 y(icalcompiter_de)o(ref)o(\(i)o(\)!)o(=)38 b(0;)131
-5162 y(icalcompiter_ne)o(xt\()o(i\))0 5275 y(\))261 5389
-y(icalcomponent)h(*this)i(=)i(icalcompiter_der)o(ef)o(\(i\))o(;)p
-eop
-%%Page: 12 12
-12 11 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(12)0 162 y Fd(5.2.4)94 b(Remo)m(ving)29
-b(Comp)s(onen)m(ts)0 372 y Ff(Remo)n(ving)40 b(an)h(elemen)n(t)g(from)g
-(a)g(list)g(while)h(iterating)e(through)h(the)g(list)h(with)f(the)h(in)
-n(ternal)e(iterators)g(can)h(cause)0 485 y(problems,)20
-b(since)e(y)n(ou)g(will)h(probably)e(b)r(e)i(remo)n(ving)e(the)i
-(elemen)n(t)g(that)g(the)g(in)n(ternal)f(iterator)f(p)r(oin)n(ts)h(to.)
-34 b(The)19 b(_remo)n(v)n(e\(\))0 599 y(routine)24 b(will)g(k)n(eep)f
-(the)i(iterator)d(v)-5 b(alid)24 b(b)n(y)g(mo)n(ving)f(it)h(to)g(the)h
-(next)f(comp)r(onen)n(t,)g(but)h(in)f(a)g(normal)f(lo)r(op,)h(this)g
-(will)g(result)0 712 y(in)k(t)n(w)n(o)f(adv)-5 b(ances)26
-b(p)r(er)i(iteration,)e(and)i(y)n(ou)f(will)g(remo)n(v)n(e)f(only)h(ev)
-n(ery)f(other)h(comp)r(onen)n(t.)37 b(T)-7 b(o)27 b(a)n(v)n(oid)f(the)i
-(problem,)f(y)n(ou)0 826 y(will)h(need)f(to)h(step)g(the)g(iterator)e
-(ahead)h(of)g(the)h(elemen)n(t)g(y)n(ou)e(are)h(going)f(to)i(remo)n(v)n
-(e,)e(lik)n(e)h(this:)0 1066 y Fc(for\(c)41 b(=)j(icalcomponent_g)o(et)
-o(_fi)o(rs)o(t_)o(com)o(po)o(ne)o(nt\()o(pa)o(re)o(nt_)o(co)o(mp,)o(IC)
-o(AL)o(_AN)o(Y_)o(CO)o(MPO)o(NE)o(NT)o(\);)305 1179 y(c)f(!=)g(0;)305
-1293 y(c)g(=)g(next)174 1520 y(next)f(=)h(icalcomponent_get)o(_n)o(ex)o
-(t_c)o(om)o(po)o(nen)o(t\()o(pa)o(ren)o(t_)o(com)o(p,)o(IC)o(AL_)o(AN)o
-(Y_)o(COM)o(PO)o(NE)o(NT\))o(;)174 1633 y(icalcomponent_rem)o(ov)o(e_)o
-(com)o(po)o(ne)o(nt\()o(pa)o(re)o(nt_)o(co)o(mp)o(,c\))o(;)0
-1873 y Ff(Another)32 b(w)n(a)n(y)e(to)i(remo)n(v)n(e)e(comp)r(onen)n
-(ts)i(is)g(to)f(rely)h(on)f(the)i(side)f(e\033ect)g(of)g(icalcomp)r
-(onen)n(t_remo)n(v)n(e_comp)r(onen)n(t:)42 b(if)0 1986
-y(comp)r(onen)n(t)28 b(iterator)g(in)h(the)g(paren)n(t)f(comp)r(onen)n
-(t)h(is)f(p)r(oin)n(ting)h(to)g(the)g(c)n(hild)g(that)g(will)g(b)r(e)g
-(remo)n(v)n(ed,)f(it)h(will)g(mo)n(v)n(e)f(the)0 2100
-y(iterator)e(to)i(the)g(comp)r(onen)n(t)f(after)g(the)h(c)n(hild.)37
-b(The)27 b(follo)n(wing)g(co)r(de)g(will)h(exploit)f(this)h(b)r(eha)n
-(vior:)0 2340 y Fc(icalcomponent_ge)o(t_)o(fir)o(st)o(_c)o(omp)o(on)o
-(en)o(t\(p)o(ar)o(en)o(t_c)o(om)o(p,)o(ICA)o(L_)o(VEV)o(EN)o(T_)o(COM)o
-(PO)o(NE)o(NT\))o(;)0 2453 y(while\(\(c=icalcom)o(po)o(nen)o(t_)o(ge)o
-(t_c)o(ur)o(re)o(nt_)o(co)o(mp)o(one)o(nt)o(\(c)o(\)\))37
-b(!=)43 b(0)g(\))131 2567 y(if\(icalcomponen)o(t_i)o(sa)o(\(c)o(\))38
-b(==)k(ICAL_VEVENT_COMP)o(ONE)o(NT)o(\))261 2680 y(icalcomponent_rem)o
-(ov)o(e_c)o(om)o(po)o(nen)o(t\()o(pa)o(ren)o(t_)o(co)o(mp,)o(in)o(ner)o
-(\);)174 2794 y(else)261 2907 y(icalcomponent_get)o(_n)o(ext)o(_c)o(om)
-o(pon)o(en)o(t\()o(par)o(en)o(t_)o(com)o(p,)o(ICA)o(L_)o(VE)o(VEN)o(T_)
-o(CO)o(MPO)o(NE)o(NT)o(\);)0 3294 y Fd(5.2.5)94 b(W)-8
-b(orking)31 b(with)g(prop)s(erties)g(and)h(parameters)0
-3504 y Ff(Finding,)g(iterating)f(and)g(remo)n(ving)e(prop)r(erties)h(w)
-n(orks)g(the)h(same)g(as)f(it)i(do)r(es)e(for)h(comp)r(onen)n(ts,)g
-(using)g(the)h(prop)r(ert)n(y-)0 3617 y(sp)r(eci\034c)c(or)e
-(parameter-sp)r(eci\034c)g(in)n(terfaces:)0 3857 y Fc(icalproperty*)38
-b(icalcomponent_ge)o(t_)o(fir)o(st)o(_p)o(rop)o(er)o(ty)o(\()218
-3970 y(icalcomponent*)g(component,)218 4084 y(icalproperty_kin)o(d)f
-(kind\);)0 4197 y(icalproperty*)h(icalcomponent_ge)o(t_)o(nex)o(t_)o
-(pr)o(ope)o(rt)o(y\()218 4311 y(icalcomponent*)g(component,)218
-4425 y(icalproperty_kin)o(d)f(kind\);)0 4538 y(void)42
-b(icalcomponent_ad)o(d_)o(pr)o(ope)o(rt)o(y\()218 4652
-y(icalcomponent*)c(component,)218 4765 y(icalproperty*)g(property\);)0
-4879 y(void)k(icalcomponent_re)o(mo)o(ve)o(_pr)o(op)o(er)o(ty\()218
-4992 y(icalcomponent*)c(component,)218 5106 y(icalproperty*)g
-(property\);)0 5346 y Ff(F)-7 b(or)27 b(parameters:)p
-eop
-%%Page: 13 13
-13 12 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(13)0 162 y Fc(icalparameter*)38 b(icalproperty_ge)o
-(t_)o(fir)o(st)o(_p)o(ara)o(me)o(te)o(r\()218 275 y(icalproperty*)g
-(prop,)218 389 y(icalparameter_ki)o(nd)f(kind\);)0 502
-y(icalparameter*)h(icalproperty_ge)o(t_)o(nex)o(t_)o(pa)o(ram)o(et)o
-(er)o(\()218 616 y(icalproperty*)g(prop,)218 730 y(icalparameter_ki)o
-(nd)f(kind\);)0 843 y(void)42 b(icalproperty_add)o(_p)o(ar)o(ame)o(te)o
-(r\()218 957 y(icalproperty*)c(prop,)218 1070 y(icalparameter*)g
-(parameter\);)0 1184 y(void)k(icalproperty_rem)o(ov)o(e_)o(par)o(am)o
-(et)o(er\()218 1297 y(icalproperty*)c(prop,)218 1411
-y(icalparameter_ki)o(nd)f(kind\);)0 1650 y Ff(Note)30
-b(that)g(since)f(there)h(should)f(b)r(e)i(only)e(one)g(parameter)f(of)i
-(eac)n(h)f(t)n(yp)r(e)h(in)g(a)f(prop)r(ert)n(y)-7 b(,)30
-b(y)n(ou)f(will)h(rarely)e(need)i(to)f(use)0 1764 y
-(icalparameter_get_nect_paameter.)0 2037 y Fd(5.2.6)94
-b(W)-8 b(orking)31 b(with)g(v)-5 b(alues)0 2247 y Ff(V)e(alues)33
-b(are)g(t)n(ypically)g(part)h(of)f(a)h(prop)r(ert)n(y)-7
-b(,)34 b(although)f(they)h(can)f(exist)h(on)f(their)h(o)n(wn.)55
-b(Y)-7 b(ou)34 b(can)f(manipulate)h(them)0 2360 y(either)27
-b(as)g(part)g(of)h(the)g(prop)r(ert)n(y)e(or)h(indep)r(enden)n(tly)-7
-b(.)0 2517 y(The)36 b(most)f(common)g(w)n(a)n(y)f(to)h(w)n(ork)f(with)i
-(v)-5 b(alues)35 b(to)h(is)f(to)g(manipulate)h(them)g(from)f(they)h
-(prop)r(erties)e(that)i(con)n(tain)0 2630 y(them.)46
-b(This)31 b(in)n(v)n(olv)n(es)d(few)n(er)i(routine)g(calls)g(and)h(in)n
-(termediate)f(v)-5 b(ariables)29 b(than)h(w)n(orking)f(with)i(them)g
-(indep)r(enden)n(tly)-7 b(,)0 2744 y(and)27 b(it)h(is)g(t)n(yp)r
-(e-safe.)0 2900 y(F)-7 b(or)26 b(eac)n(h)g(prop)r(ert)n(y)-7
-b(,)26 b(there)h(are)f(a)g(_get_)g(and)h(a)f(_set_)g(routine)h(that)g
-(access)e(the)j(in)n(ternal)e(v)-5 b(alue.)36 b(F)-7
-b(or)26 b(instanace,)h(for)0 3014 y(the)h(UID)g(prop)r(ert)n(y)-7
-b(,)27 b(the)h(routines)f(are:)0 3253 y Fc(void)42 b(icalproperty_set)o
-(_u)o(id)o(\(ic)o(al)o(pr)o(ope)o(rt)o(y*)37 b(prop,)k(const)h(char*)f
-(v\))0 3367 y(const)g(char*)h(icalproperty_get)o(_u)o(id)o(\(ic)o(al)o
-(pr)o(ope)o(rt)o(y*)37 b(prop\))0 3607 y Ff(F)-7 b(or)19
-b(m)n(ulti-v)-5 b(alued)20 b(prop)r(erties,)h(lik)n(e)f(A)-7
-b(TT)g(A)n(CH,)20 b(the)h(v)-5 b(alue)20 b(t)n(yp)r(e)g(is)g(usually)f
-(a)h(struct)g(or)f(union)h(that)g(holds)g(b)r(oth)g(p)r(ossible)0
-3720 y(t)n(yp)r(es.)0 3877 y(If)28 b(y)n(ou)f(w)n(an)n(t)g(to)g(w)n
-(ork)f(with)i(the)g(underlying)f(v)-5 b(alue)28 b(ob)5
-b(ject,)27 b(y)n(ou)g(can)g(get)g(and)h(set)f(it)h(with:)0
-4116 y Fc(icalvalue*)39 b(icalproperty_get_)o(va)o(lu)o(e)f
-(\(icalproperty*)f(prop\))0 4230 y(void)42 b(icalproperty_set)o(_v)o
-(al)o(ue\()o(ic)o(al)o(pro)o(pe)o(rt)o(y*)37 b(prop,)42
-b(icalvalue*)d(value\);)0 4469 y Ff(Icalprop)r(ert)n(y_get_v)-5
-b(alue\(\))36 b(will)i(return)g(a)g(reference)f(that)h(y)n(ou)g(can)g
-(manipulate)g(with)h(other)e(icalv)-5 b(alue)38 b(routines.)0
-4583 y(Most)30 b(of)h(the)g(time,)g(y)n(ou)f(will)h(ha)n(v)n(e)e(to)i
-(kno)n(w)e(what)i(the)g(t)n(yp)r(e)f(of)h(the)g(v)-5
-b(alue)30 b(is.)46 b(F)-7 b(or)30 b(instance,)g(if)i(y)n(ou)d(kno)n(w)h
-(that)h(the)0 4696 y(v)-5 b(alue)27 b(is)h(a)f(D)n(A)-7
-b(TETIME)29 b(t)n(yp)r(e,)f(y)n(ou)f(can)g(manipulate)g(it)h(with:)0
-4936 y Fc(struct)41 b(icaltimetype)e(icalvalue_get_d)o(at)o(et)o(ime)o
-(\(i)o(ca)o(lva)o(lu)o(e*)e(value\);)0 5049 y(void)42
-b(icalvalue_set_da)o(te)o(ti)o(me\()o(ic)o(al)o(val)o(ue)o(*)37
-b(value,)k(struct)h(icaltimetype)c(v\);)0 5289 y Ff(When)21
-b(w)n(orking)e(with)i(an)f(extension)g(prop)r(ert)n(y)f(or)h(v)-5
-b(alue)20 b(\(and)h(X-PR)n(OPER)-7 b(TY)21 b(or)f(a)g(prop)r(ert)n(y)f
-(that)i(has)f(the)h(parameter)0 5402 y(V)-9 b(ALUE=x-name)27
-b(\))h(the)g(v)-5 b(alue)28 b(t)n(yp)r(e)f(is)h(alw)n(a)n(ys)d(a)j
-(string.)36 b(T)-7 b(o)27 b(get)g(and)h(set)f(the)h(v)-5
-b(alue,)28 b(use:)p eop
-%%Page: 14 14
-14 13 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(14)0 162 y Fc(void)42 b(icalproperty_set)o(_x)o
-(\(i)o(cal)o(pr)o(op)o(ert)o(y*)37 b(prop,)k(char*)h(v\);)0
-275 y(char*)f(icalproperty_get_)o(x\()o(ica)o(lp)o(ro)o(per)o(ty)o(*)c
-(prop\);)0 515 y Ff(All)26 b(X)g(prop)r(erties)f(ha)n(v)n(e)f(the)i(t)n
-(yp)r(e)g(of)g(ICAL_X_PR)n(OPER)-7 b(TY,)26 b(so)f(y)n(ou)g(will)h
-(need)g(these)g(routines)f(to)g(get)h(and)f(set)h(the)0
-628 y(name)h(of)h(the)g(prop)r(ert)n(y:)0 868 y Fc(char*)41
-b(icalproperty_get_)o(x_)o(nam)o(e\()o(ic)o(alp)o(ro)o(pe)o(rty)o(*)c
-(prop\))0 981 y(void)42 b(icalproperty_set)o(_x)o(_n)o(ame)o(\(i)o(ca)o
-(lpr)o(op)o(er)o(ty*)37 b(prop,)k(char*)h(name\);)0 1254
-y Fd(5.2.7)94 b(Chec)m(king)32 b(Comp)s(onen)m(t)d(V)-8
-b(alidit)m(y)0 1464 y Ff(RF)n(C)25 b(2446)e(de\034nes)j(rules)e(for)h
-(what)g(prop)r(erties)f(m)n(ust)h(exist)g(in)h(a)e(comp)r(onen)n(t)h
-(to)g(b)r(e)h(used)f(for)f(transferring)g(sc)n(heduling)0
-1578 y(data.)58 b(Most)35 b(of)g(these)g(rules)f(relate)g(to)h(the)g
-(existence)f(of)h(prop)r(erties)f(relativ)n(e)g(to)h(the)g(METHOD)h
-(prop)r(ert)n(y)-7 b(,)35 b(whic)n(h)0 1691 y(declares)22
-b(what)h(op)r(eration)f(a)h(remote)g(receiv)n(er)f(should)h(use)g(to)g
-(pro)r(cess)f(a)h(comp)r(onen)n(t.)35 b(F)-7 b(or)23
-b(instance,)h(if)g(the)f(METHOD)0 1805 y(is)36 b(REQUEST)h(and)e(the)i
-(comp)r(onen)n(t)e(is)h(a)f(VEVENT,)j(the)e(sender)f(is)h(probably)f
-(asking)f(the)j(receiv)n(er)d(to)h(join)h(in)g(a)0 1918
-y(meeting.)g(In)25 b(this)g(case,)g(RF)n(C2446)d(sa)n(ys)i(that)h(the)g
-(comp)r(onen)n(t)g(m)n(ust)g(sp)r(ecify)g(a)f(start)g(time)i(\(DTST)-7
-b(AR)g(T\))26 b(and)f(list)g(the)0 2032 y(receiv)n(er)h(as)h(an)g
-(attendee)h(\(A)-7 b(TTENDEE\).)0 2188 y(Libical)27 b(can)g(c)n(hec)n
-(k)g(these)h(restrictions)e(with)i(the)g(routine:)0 2428
-y Fc(int)42 b(icalrestriction_c)o(he)o(ck)o(\(ic)o(al)o(co)o(mpo)o(ne)o
-(nt)o(*)c(comp\);)0 2667 y Ff(This)19 b(routine)f(returns)g(0)h(if)g
-(the)g(comp)r(onen)n(t)g(do)r(es)f(not)h(pass)f(RF)n(C2446)f
-(restrictions,)i(or)f(if)h(the)g(comp)r(onen)n(t)g(is)g(malformed.)0
-2781 y(The)38 b(comp)r(onen)n(t)g(y)n(ou)f(pass)g(in)h
-Fa(must)45 b Ff(b)r(e)38 b(a)g(V)n(CALEND)n(AR,)h(with)g(one)e(or)g
-(more)h(c)n(hildren,)i(lik)n(e)d(the)i(examples)e(in)0
-2895 y(RF)n(C2446.)0 3051 y(When)28 b(this)f(routine)g(runs,)f(it)i
-(will)f(insert)g(new)g(prop)r(erties)f(in)n(to)h(the)h(comp)r(onen)n(t)
-e(to)h(indicate)h(an)n(y)e(errors)f(it)i(\034nds.)37
-b(See)0 3165 y(section)27 b(6.5.3,)f(X-LIC-ERR)n(OR)i(for)f(more)f
-(information)h(ab)r(out)h(these)f(error)f(prop)r(erties.)0
-3437 y Fd(5.2.8)94 b(Con)m(v)m(erting)32 b(Comp)s(onen)m(ts)d(to)j(T)-8
-b(ext)0 3647 y Ff(T)h(o)19 b(create)g(an)h(RF)n(C2445)e(complian)n(t)h
-(text)h(represen)n(tation)e(of)i(an)f(ob)5 b(ject,)21
-b(use)f(one)f(of)h(the)g(*_as_ical_string\(\))d(routines:)0
-3887 y Fc(char*)41 b(icalcomponent_as_)o(ic)o(al_)o(st)o(ri)o(ng)c
-(\(icalcomponent*)g(component\))0 4000 y(char*)k(icalproperty_as_i)o
-(ca)o(l_s)o(tr)o(in)o(g)d(\(icalproperty*)f(property\))0
-4114 y(char*)k(icalparameter_as_)o(ic)o(al_)o(st)o(ri)o(ng)c
-(\(icalparameter*)g(parameter\))0 4227 y(char*)k(icalvalue_as_ical)o
-(_s)o(tri)o(ng)c(\(icalvalue*)i(value\))0 4467 y Ff(In)32
-b(most)h(cases,)f(y)n(ou)f(will)i(only)f(use)g(icalcomp)r(onen)n
-(t_as_ical_string)c(\(\),)34 b(since)e(it)h(will)f(cascade)f(and)h(con)
-n(v)n(ert)f(all)h(of)0 4581 y(the)c(parameters,)e(prop)r(erties)g(and)i
-(v)-5 b(alues)27 b(that)h(are)e(attac)n(hed)h(to)h(the)g(ro)r(ot)e
-(comp)r(onen)n(t.)0 4737 y(Icalprop)r(ert)n(y_as_ical_string\(\))37
-b(will)k(terminate)g(eac)n(h)g(line)g(with)h(the)f(RF)n(C2445)f(sp)r
-(eci\034ed)h(line)h(terminator)e("n")0 4851 y(Ho)n(w)n(ev)n(er,)27
-b(if)h(y)n(ou)g(compile)g(with)h(the)f(sym)n(b)r(ol)g
-(ICAL_UNIX_NEWLINE)i(unde\034ned,)f(\()g(it)g(is)f(de\034ned)h(b)n(y)f
-(default\))h(it)0 4964 y(will)f(terminate)f(lines)h(with)g("nr")0
-5121 y(Remem)n(b)r(er)35 b(that)h(the)f(string)g(returned)f(b)n(y)h
-(these)h(routines)e(is)h(o)n(wned)g(b)n(y)g(the)h(library)-7
-b(,)36 b(and)f(will)g(ev)n(en)n(tually)f(b)r(e)i(re-)0
-5234 y(written.)h(Y)-7 b(ou)28 b(should)f(cop)n(y)g(it)h(if)g(y)n(ou)e
-(w)n(an)n(t)h(to)h(preserv)n(e)e(it.)p eop
-%%Page: 15 15
-15 14 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(15)0 162 y Fb(5.3)112 b(Time)0 372
-y Fd(5.3.1)94 b(Time)30 b(structure)0 582 y Ff(LIbical)d(de\034nes)g
-(it's)g(o)n(wn)f(time)i(structure)e(for)h(storing)f(all)h(dates)f(and)h
-(times.)37 b(It)28 b(w)n(ould)e(ha)n(v)n(e)g(b)r(een)i(nice)f(to)g
-(re-use)f(the)0 695 y(C)j(library's)e Fa(struct)j(tm,)h
-Ff(but)e(that)h(structure)e(do)r(es)g(not)h(di\033eren)n(tiate)g(b)r
-(et)n(w)n(een)g(dates)f(and)h(times,)g(and)g(b)r(et)n(w)n(een)g(lo)r
-(cal)0 809 y(time)f(and)f(UTC.)h(The)g(libical)f(structure)g(is:)0
-1031 y Fc(struct)41 b(icaltimetype)87 1144 y(int)h(year;)87
-1258 y(int)g(month;)87 1371 y(int)g(day;)87 1485 y(int)g(hour;)87
-1599 y(int)g(minute;)87 1712 y(int)g(second;)87 1826
-y(int)g(is_utc;)f(/*)i(1-)g(time)e(is)i(in)g(UTC)f(timezone)e(*/)87
-1939 y(int)i(is_date;)f(/*)h(1)i(-)f(interpret)c(this)j(as)h(date.)e
-(*/)i(;)0 2161 y Ff(The)35 b(y)n(ear,)h(mon)n(th,)g(da)n(y)-7
-b(,)37 b(hour,)f(min)n(ute)f(and)g(second)g(\034elds)g(ho)n(w)f(the)h
-(brok)n(en-out)f(time)h(v)-5 b(alues.)59 b(The)35 b(is_utc)g(\034eld)0
-2275 y(distinguishes)30 b(b)r(et)n(w)n(een)h(times)g(UTC)g(and)g(a)f
-(lo)r(cal)g(time)i(zone.)45 b(The)31 b(is_date)f(\034eld)h(indicates)g
-(if)g(the)g(in)n(tra-da)n(y)e(\034elds)0 2388 y(hold)e(v)-5
-b(alid)28 b(data.)0 2658 y Fd(5.3.2)94 b(Creating)31
-b(time)f(structures)0 2868 y Ff(There)d(are)g(sev)n(eral)e(w)n(a)n(ys)h
-(to)i(create)e(a)i(new)f(icaltimet)n(yp)r(e)h(structure:)0
-3089 y Fc(struct)41 b(icaltimetype)e(icaltime_from_s)o(tr)o(in)o(g\(c)o
-(on)o(st)e(char*)42 b(str\);)0 3203 y(struct)f(icaltimetype)e
-(icaltime_from_t)o(im)o(et)o(\(ti)o(me)o(_t)e(v,)43 b(int)f(is_date\);)
-0 3317 y(struct)f(icaltimetype)e(icaltime_from_i)o(nt)o(\(i)o(nt)e(v,)
-43 b(int)f(is_date,)e(int)j(is_utc\);)0 3538 y Ff(Icaltime_from_string)
-25 b(tak)n(es)i(an)n(y)g(RF)n(C2445)e(complian)n(t)i(time)h(string:)0
-3760 y Fc(struct)41 b(icaltimetype)e(tt)j(=)h(icaltime_from_str)o(in)o
-(g\()o(199)o(70)o(101)o(T1)o(03)o(000)o(\);)0 3982 y
-Ff(Icaltime_from_timet)22 b(tak)n(es)g(a)h(timet)g(v)-5
-b(alue,)24 b(represen)n(ting)e(seconds)g(past)g(the)i(POSIX)f(ep)r(o)r
-(c)n(h,)h(and)f(a)f(\035ag)g(to)h(indicate)0 4095 y(if)k(the)f(time)g
-(is)g(a)g(date.)36 b(Dates)26 b(ha)n(v)n(e)f(an)h(iden)n(tical)f
-(structure)h(to)g(a)f(time,)i(but)g(they)f(time)h(p)r(ortion)e(\()i
-(hours,)e(min)n(uts)h(and)0 4209 y(seconds)d(\))i(is)g(alw)n(a)n(ys)d
-(00:00:00.)33 b(Dates)24 b(act)h(di\033eren)n(tly)f(in)h(sorting)e(an)h
-(comparision,)f(and)i(they)f(ha)n(v)n(e)f(a)h(di\033eren)n(t)h(string)0
-4322 y(represen)n(tation)h(in)i(RF)n(C2445.)0 4479 y(The)20
-b(icaltime_from_in)n(t)e(is)h(lik)n(e)g(icaltime_from_timet,)i(but)f
-(with)g(an)f(arbitrary)f(ep)r(o)r(c)n(h.)34 b(This)19
-b(routine)g(w)n(as)g(a)g(mistak)n(e)0 4592 y(and)27 b(is)h(deprecated.)
-0 4862 y Fd(5.3.3)94 b(Time)30 b(manipulating)f(routines)0
-5072 y Ff(The)f(n)n(ull)f(time)h(v)-5 b(alue)28 b(is)f(used)h(to)f
-(indicate)h(that)g(the)g(data)f(in)g(the)h(structure)f(is)h(not)f(a)h
-(v)-5 b(alid)27 b(time.)0 5294 y Fc(struct)41 b(icaltimetype)e
-(icaltime_null_t)o(im)o(e\()o(voi)o(d\))o(;)0 5407 y(int)j
-(icaltime_is_null_)o(ti)o(me)o(\(st)o(ru)o(ct)37 b(icaltimetype)h(t\);)
-p eop
-%%Page: 16 16
-16 15 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(16)0 162 y(It)33 b(is)g(sensible)g(for)g(the)g
-(brok)n(en-out)f(time)h(\034elds)g(to)g(con)n(tain)g(v)-5
-b(alues)32 b(that)i(are)e(not)h(p)r(ermitted)h(in)f(an)g(ISO)g
-(complian)n(t)0 275 y(time)g(string.)53 b(F)-7 b(or)32
-b(instance,)i(the)g(seconds)e(\034eld)h(can)g(hold)g(v)-5
-b(alues)32 b(greater)f(than)j(59,)f(and)g(the)g(hours)f(\034eld)i(can)e
-(hold)0 389 y(v)-5 b(alues)29 b(larger)e(than)j(24.)41
-b(The)29 b(excessiv)n(e)f(v)-5 b(alues)29 b(will)g(b)r(e)h(rolled)e(o)n
-(v)n(er)g(in)n(to)h(the)g(next)h(larger)d(\034eld)j(when)f(the)h
-(structure)0 502 y(is)d(normalized.)0 712 y Fc(struct)41
-b(icaltimetype)e(icaltime_normal)o(iz)o(e\()o(str)o(uc)o(t)e
-(icaltimetype)i(t\);)0 921 y Ff(Normalizing)26 b(allo)n(ws)g(y)n(ou)h
-(to)h(do)f(arithmetic)g(op)r(erations)g(on)g(time)h(v)-5
-b(alues.)0 1130 y Fc(struct)41 b(icaltimetype)e(tt)j(=)h
-(icaltime_from_str)o(in)o(g\()o("19)o(97)o(010)o(1T)o(10)o(300)o(0")o
-(\);)0 1244 y(tt.days)e(+=3)0 1357 y(tt.second)f(+=)i(70;)0
-1471 y(tt)h(=)g(icaltime_normali)o(ze)o(\(t)o(t\);)0
-1680 y Ff(There)27 b(are)g(sev)n(eral)e(routines)i(to)h(get)f(the)h(da)
-n(y)f(of)g(the)h(w)n(eek)f(or)g(mon)n(th,)g(etc,)h(from)f(a)h(time)g
-(structure.)0 1889 y Fc(short)41 b(icaltime_day_of_y)o(ea)o(r\(s)o(tr)o
-(uc)o(t)d(icaltimetype)g(t\);)0 2003 y(struct)j(icaltimetype)e
-(icaltime_from_d)o(ay)o(_o)o(f_y)o(ea)o(r\()o(sho)o(rt)e(doy,)42
-b(short)f(year\);)0 2117 y(short)g(icaltime_day_of_w)o(ee)o(k\(s)o(tr)o
-(uc)o(t)d(icaltimetype)g(t\);)0 2230 y(short)j(icaltime_start_do)o(y_)o
-(of_)o(we)o(ek)o(\(st)o(ru)o(ct)c(icaltimetype)i(t\);)0
-2344 y(short)i(icaltime_week_num)o(be)o(r\(s)o(ho)o(rt)c(day_of_month,)
-h(short)k(month,)f(short)g(year\);)0 2457 y(struct)g(icaltimetype)e
-(icaltime_from_w)o(ee)o(k_)o(num)o(be)o(r\()o(sho)o(rt)e(week_number,)h
-(short)k(year\);)0 2571 y(short)f(icaltime_days_in_)o(mo)o(nth)o(\(s)o
-(ho)o(rt)c(month,short)i(year\);)0 2780 y Ff(T)-7 b(w)n(o)37
-b(routines)g(con)n(v)n(ert)g(time)h(structures)f(to)h(and)f(from)h(the)
-g(n)n(um)n(b)r(er)g(of)f(seconds)g(since)h(the)g(POSIX)g(ep)r(o)r(c)n
-(h.)68 b(The)0 2894 y(is_date)27 b(\034eld)h(indicates)f(whether)g(or)g
-(not)h(the)g(hour,)e(min)n(ute)i(and)g(second)f(\034elds)g(should)h(b)r
-(e)g(used)f(in)h(the)g(con)n(v)n(ersion.)0 3103 y Fc(struct)41
-b(icaltimetype)e(icaltime_from_t)o(im)o(et)o(\(ti)o(me)o(_t)e(v,)43
-b(int)f(is_date\);)0 3217 y(time_t)f(icaltime_as_time)o(t\()o(str)o(uc)
-o(t)c(icaltimetype\);)0 3426 y Ff(The)28 b(compare)e(routine)h(w)n
-(orks)f(exactly)h(lik)n(e)g(strcmp,)g(but)h(on)g(time)g(structures.)0
-3635 y Fc(int)42 b(icaltime_compare\()o(st)o(ru)o(ct)37
-b(icaltimetype)i(a,struct)h(icaltimetype)e(b\);)0 3844
-y Ff(The)d(follo)n(wing)e(routines)h(con)n(v)n(ert)g(b)r(et)n(w)n(een)g
-(UTC)h(and)g(a)f(named)h(timezone.)58 b(The)35 b(tzid)g(\034eld)g(m)n
-(ust)g(b)r(e)g(a)f(timezone)0 3958 y(name)27 b(from)h(the)f(Olsen)h
-(database,)e(suc)n(h)h(as)g("America/Los_Angeles.")0
-4114 y(The)h(utc_o\033set)f(routine)g(returns)g(the)h(o\033set)f(of)h
-(the)g(named)f(time)h(zone)f(from)h(UTC,)f(in)h(seconds.)0
-4271 y(The)f(tt)g(parameter)e(in)i(the)g(follo)n(wing)e(routines)h
-(indicates)h(the)g(date)f(on)h(whic)n(h)f(the)h(con)n(v)n(ersion)d
-(should)j(b)r(e)g(made.)36 b(The)0 4384 y(tt)23 b(parameter)e(is)h
-(necessary)f(b)r(ecause)h(timezones)g(ha)n(v)n(e)f(man)n(y)g
-(di\033eren)n(t)i(rules)f(for)g(when)g(da)n(yligh)n(t)f(sa)n(vings)g
-(time)i(is)f(used,)0 4498 y(and)27 b(these)h(rules)f(can)g(c)n(hange)f
-(o)n(v)n(er)g(time.)37 b(So,)27 b(for)g(a)g(single)g(timezone)g(one)g
-(y)n(ear)f(ma)n(y)h(ha)n(v)n(e)f(da)n(yligh)n(t)h(sa)n(vings)e(time)j
-(on)0 4612 y(Marc)n(h)f(15,)f(but)j(for)e(other)g(y)n(ears)f(Marc)n(h)g
-(15)h(ma)n(y)g(b)r(e)h(standard)f(time,)h(and)f(some)g(y)n(ears)f(ma)n
-(y)h(ha)n(v)n(e)g(standard)f(time)i(all)0 4725 y(y)n(ear.)0
-4934 y Fc(int)42 b(icaltime_utc_offs)o(et)o(\(s)o(tru)o(ct)37
-b(icaltimetype)h(tt,)43 b(char*)e(tzid\);)0 5048 y(int)h
-(icaltime_local_ut)o(c_)o(of)o(fse)o(t\()o(\);)0 5162
-y(struct)f(icaltimetype)e(icaltime_as_utc)o(\(s)o(tr)o(uct)e
-(icaltimetype)h(tt,char*)i(tzid\);)0 5275 y(struct)h(icaltimetype)e
-(icaltime_as_zon)o(e\()o(st)o(ruc)o(t)e(icaltimetype)i(tt,char*)h
-(tzid\);)0 5389 y(struct)h(icaltimetype)e(icaltime_as_loc)o(al)o(\(s)o
-(tru)o(ct)e(icaltimetype)h(tt\);)p eop
-%%Page: 17 17
-17 16 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(17)0 162 y Fb(5.4)112 b(Storing)37
-b(Ob)6 b(jects)0 372 y Ff(The)31 b(libical)f(distribution)h(includes)g
-(a)f(separate)f(library)-7 b(,)30 b(libicalss,)h(that)g(allo)n(ws)e(y)n
-(ou)h(to)g(store)g(iCal)g(comp)r(onen)n(t)h(data)0 485
-y(to)f(disk)g(in)h(a)f(v)-5 b(ariet)n(y)29 b(of)i(w)n(a)n(ys.)43
-b(This)30 b(library)f(also)h(includes)g(co)r(de)g(to)g(implemen)n(t)h
-(the)g(CSTP)g(proto)r(col)e(of)h(CAP)h(and)0 599 y(has)c(some)g
-(routines)g(for)g(deciphering)g(incomming)g(messages.)0
-755 y(The)f(\034le)h(storage)e(routines)g(are)h(organized)e(in)j(an)f
-(inheritance)g(heirarc)n(h)n(y)f(that)h(is)h(ro)r(oted)e(in)i(icalset,)
-f(with)h(the)g(deriv)n(ed)0 869 y(class)k(ical\034leset)g(and)h
-(icaldirset.)48 b(Ical\034leset)32 b(stores)e(comp)r(onen)n(ts)h(to)h
-(a)g(\034le,)h(while)f(icaldirset)e(stores)h(comp)r(onen)n(ts)g(to)0
-983 y(m)n(ultiple)c(\034les,)f(one)g(p)r(er)g(mon)n(th)g(based)g(on)g
-(DTST)-7 b(AMP)g(.)28 b(Other)e(storages)e(classess,)h(for)g(storage)g
-(to)h(a)g(heap)g(or)f(a)h(m)n(ysql)0 1096 y(database)g(are)h(planned)g
-(for)g(the)h(future.)0 1253 y(All)g(of)g(the)g(icalset)f(deriv)n(ed)f
-(classes)h(ha)n(v)n(e)f(the)i(same)f(in)n(terface:)0
-1579 y Fc(icaldirset*)39 b(icaldirset_new\(c)o(on)o(st)e(char*)k
-(path\);)0 1693 y(void)h(icaldirset_free\()o(ic)o(al)o(dir)o(se)o(t*)37
-b(store\);)0 1806 y(const)k(char*)h(icaldirset_path\()o(ic)o(al)o(dir)o
-(se)o(t*)37 b(store\);)0 1920 y(void)42 b(icaldirset_mark\()o(ic)o(al)o
-(dir)o(se)o(t*)37 b(store\);)0 2033 y(icalerrorenum)h(icaldirset_commi)
-o(t\()o(ica)o(ld)o(ir)o(set)o(*)f(store\);)0 2147 y(icalerrorenum)h
-(icaldirset_add_c)o(om)o(pon)o(en)o(t\()o(ica)o(ld)o(ir)o(set)o(*)f
-(store,)k(icalcomponent*)d(comp\);)0 2260 y(icalerrorenum)g
-(icaldirset_remov)o(e_)o(com)o(po)o(ne)o(nt\()o(ic)o(al)o(dir)o(se)o
-(t*)f(store,)k(icalcomponent*)d(comp\);)0 2374 y(int)k
-(icaldirset_count_)o(co)o(mp)o(one)o(nt)o(s\()o(ica)o(ld)o(ir)o(set)o
-(*)37 b(store,)k(icalcomponent_kin)o(d)c(kind\);)0 2488
-y(icalerrorenum)h(icaldirset_selec)o(t\()o(ica)o(ld)o(ir)o(set)o(*)f
-(store,)k(icalcomponent*)d(gauge\);)0 2601 y(void)k(icaldirset_clear)o
-(\(i)o(ca)o(ldi)o(rs)o(et)o(*)c(store\);)0 2715 y(icalcomponent*)g
-(icaldirset_fetc)o(h\()o(ica)o(ld)o(ir)o(set)o(*)f(store,)k(const)h
-(char*)f(uid\);)0 2828 y(int)h(icaldirset_has_ui)o(d\()o(ic)o(ald)o(ir)
-o(se)o(t*)37 b(store,)k(const)h(char*)f(uid\);)0 2942
-y(icalcomponent*)d(icaldirset_fetc)o(h_)o(mat)o(ch)o(\(i)o(cal)o(di)o
-(rs)o(et*)f(set,)42 b(icalcomponent)c(*c\);)0 3055 y(icalerrorenum)g
-(icaldirset_modif)o(y\()o(ica)o(ld)o(ir)o(set)o(*)f(store,)k
-(icalcomponent)d(*oldc,)j(icalcomponent)e(*newc\);)0
-3169 y(icalcomponent*)f(icaldirset_get_)o(cu)o(rre)o(nt)o(_c)o(omp)o
-(on)o(en)o(t\(i)o(ca)o(ldi)o(rs)o(et)o(*)g(store\);)0
-3283 y(icalcomponent*)g(icaldirset_get_)o(fi)o(rst)o(_c)o(om)o(pon)o
-(en)o(t\()o(ica)o(ld)o(irs)o(et)o(*)f(store\);)0 3396
-y(icalcomponent*)h(icaldirset_get_)o(ne)o(xt_)o(co)o(mp)o(one)o(nt)o
-(\(i)o(cal)o(di)o(rse)o(t*)f(store\);)0 3664 y Fd(5.4.1)94
-b(Creating)31 b(a)h(new)g(set)0 3874 y Ff(Y)-7 b(ou)28
-b(can)f(create)f(a)i(new)f(set)h(from)f(either)g(the)h(base)f(class)g
-(or)g(the)g(direv)n(ed)g(class.)36 b(F)-7 b(rom)27 b(the)h(base)f
-(class)g(use)g(one)g(of:)0 4087 y Fc(icalset*)40 b(icalset_new_file)o
-(\(co)o(ns)o(t)d(char*)42 b(path\);)0 4201 y(icalset*)e
-(icalset_new_dir\()o(con)o(st)d(char*)k(path\);)0 4314
-y(icalset*)f(icalset_new_heap)o(\(vo)o(id)o(\);)0 4428
-y(icalset*)g(icalset_new_mysq)o(l\(c)o(on)o(st)d(char*)k(path\);)0
-4641 y Ff(Y)-7 b(ou)28 b(can)f(also)f(create)h(a)g(new)h(set)f(based)g
-(on)h(the)f(deriv)n(ed)g(class,)g(F)-7 b(or)27 b(instance,)g(with)h
-(ical\034leset:)0 4854 y Fc(icalfileset*)38 b(icalfileset_new\(c)o(on)o
-(st)f(char*)42 b(path\);)0 4967 y(icalfileset*)c(icalfileset_new_o)o
-(pe)o(n\(c)o(on)o(st)f(char*)k(path,)h(int)g(flags,)f(mode_t)g(mode\);)
-0 5180 y Ff(Icaset_new_\034le)33 b(is)h(iden)n(tical)g(to)g
-(ical\034leset_new.)55 b(BOth)34 b(routines)g(will)g(op)r(en)g(an)g
-(existing)g(\034le)g(for)g(readinga)e(and)0 5294 y(writing,)24
-b(or)e(create)g(a)h(new)g(\034le)g(if)h(it)f(do)r(es)g(not)g(exist.)35
-b(Ical\034lset_new_op)r(en)22 b(tak)n(es)g(the)h(same)g(argumen)n(ts)f
-(as)g(the)i(op)r(en\(\))0 5407 y(system)j(routine)g(and)h(b)r(eha)n(v)n
-(es)e(in)i(the)g(same)f(w)n(a)n(y)-7 b(.)p eop
-%%Page: 18 18
-18 17 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(18)0 162 y(The)29 b(icalset)g(and)g(ical\034lset)g
-(ob)5 b(jects)29 b(are)f(somewhat)h(in)n(terc)n(hangable)e(\025)i(y)n
-(ou)f(can)h(use)g(an)g(ical\034leset*)g(as)f(an)h(argumen)n(t)0
-275 y(to)e(an)n(y)g(of)h(the)g(icalset)f(routines.)0
-432 y(The)d(follo)n(wing)f(examples)h(will)g(all)g(use)g(ical\034leset)
-g(routines;)g(using)g(the)h(other)e(icalset)h(deriv)n(ed)f(classess)g
-(will)h(b)r(e)h(similar.)0 704 y Fd(5.4.2)94 b(A)m(dding,)31
-b(Finding)g(and)h(Remo)m(ving)d(Comp)s(onen)m(ts)0 914
-y Ff(T)-7 b(o)27 b(add)h(comp)r(onen)n(ts)f(to)g(a)g(set,)h(use:)0
-1154 y Fc(icalerrorenum)38 b(icalfileset_add_)o(co)o(mpo)o(ne)o(nt)o
-(\(ic)o(al)o(fi)o(les)o(et)o(*)g(cluster,)i(icalcomponent*)d(child\);)0
-1393 y Ff(The)k(\034leset)h(k)n(eeps)e(an)h(inmemory)g(cop)n(y)f(of)h
-(the)h(comp)r(onen)n(ts,)i(and)d(this)g(set)h(m)n(ust)f(b)r(e)g
-(written)h(bac)n(k)e(to)h(the)h(\034le)0 1507 y(o)r(cassionally)-7
-b(.)35 b(There)27 b(are)f(t)n(w)n(o)h(routines)g(to)g(manage)g(this:)0
-1746 y Fc(void)42 b(icalfileset_mark)o(\(i)o(ca)o(lfi)o(le)o(se)o(t*)37
-b(cluster\);)0 1860 y(icalerrorenum)h(icalfileset_comm)o(it)o(\(ic)o
-(al)o(fi)o(les)o(et)o(*)f(cluster\);)0 2099 y Ff(Ical\034leset_mark)d
-(indicates)i(that)h(the)g(in-memory)e(comp)r(onen)n(ts)h(ha)n(v)n(e)f
-(c)n(hanged.)62 b(Calling)36 b(the)h(_add_comp)r(onen)n(t)0
-2212 y(routine)32 b(will)h(call)f(_mark)f(automatically)-7
-b(,)33 b(but)g(y)n(ou)f(ma)n(y)g(need)h(to)f(call)h(it)g(y)n(ourself)e
-(if)i(y)n(ou)f(ha)n(v)n(e)f(made)i(a)f(c)n(hange)f(to)0
-2326 y(an)g(existing)h(comp)r(onen)n(t.)49 b(The)32 b(_commit)f
-(routine)g(writes)h(the)g(data)f(base)g(to)h(disk,)g(but)h(only)e(if)h
-(it)g(is)g(mark)n(ed.)48 b(The)0 2440 y(_commit)27 b(routine)g(is)h
-(called)f(automatically)f(when)i(the)g(ical\034leset)f(is)h(freed.)0
-2596 y(T)-7 b(o)27 b(iterate)g(through)g(the)h(comp)r(onen)n(ts)f(in)h
-(a)f(set,)h(use:)0 2835 y Fc(icalcomponent*)38 b(icalfileset_get)o(_f)o
-(irs)o(t_)o(co)o(mpo)o(ne)o(nt)o(\(ic)o(al)o(fil)o(es)o(et)o(*)g
-(cluster\);)0 2949 y(icalcomponent*)g(icalfileset_get)o(_n)o(ext)o(_c)o
-(om)o(pon)o(en)o(t\()o(ica)o(lf)o(ile)o(se)o(t*)f(cluster\);)0
-3063 y(icalcomponent*)h(icalfileset_get)o(_c)o(urr)o(en)o(t_)o(com)o
-(po)o(ne)o(nt)f(\(icalfileset*)h(cluster\);)0 3302 y
-Ff(These)25 b(routines)g(w)n(ork)g(lik)n(e)g(the)h(corresp)r(onding)e
-(routines)h(from)g(icalcomp)r(onen)n(t,)g(except)h(that)g(their)f
-(output)i(is)e(\034ltered)0 3415 y(through)j(a)h(gauge.)39
-b(A)29 b(gauge)f(is)h(a)f(test)h(for)g(the)g(prop)r(erties)f(within)h
-(a)g(comp)r(onen)n(ts;)g(only)f(comp)r(onen)n(ts)g(that)i(pass)e(the)0
-3529 y(test)g(are)e(returned.)37 b(A)28 b(gauge)e(can)h(b)r(e)h
-(constructed)f(from)g(a)g(MINSQL)h(string)f(with:)0 3768
-y Fc(icalgauge*)39 b(icalgauge_new_fro)o(m_)o(sq)o(l\(c)o(ha)o(r*)e
-(sql\);)0 4008 y Ff(Then,)28 b(y)n(ou)f(can)g(add)g(the)h(gauge)e(to)i
-(the)g(set)f(with)h(:)0 4247 y Fc(icalerrorenum)38 b(icalfileset_sele)o
-(ct)o(\(ic)o(al)o(fi)o(les)o(et)o(*)f(store,)42 b(icalgauge*)d
-(gauge\);)0 4486 y Ff(Here)27 b(is)h(an)f(example)g(that)h(puts)g(all)f
-(of)h(these)f(routines)g(together:)0 4726 y Fc(void)42
-b(test_fileset\(\))174 4953 y(icalfileset)d(*fs;)174
-5066 y(icalcomponent)f(*c;)174 5180 y(int)43 b(i;)174
-5294 y(char)f(*path)g(=)h(test_fileset.ic)o(s;)174 5407
-y(icalgauge)84 b(*g)42 b(=)i(icalgauge_new_f)o(ro)o(m_)o(sql)o(\()p
-eop
-%%Page: 19 19
-19 18 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(19)349 162 y Fc(SELECT)41 b(*)i(FROM)f(VEVENT)f
-(WHERE)g(DTSTART)84 b('20000103T120000Z)o(')37 b(AND)43
-b(DTSTART)d(=)j('20000106T120000Z)o('\))o(;)174 389 y(fs)g(=)g
-(icalfileset_new\()o(pat)o(h\))o(;)174 616 y(for)g(\(i)f(=)h(0;)g(i!=)g
-(10;)f(i++\))349 730 y(c)h(=)g(make_component\(i)o(\);)37
-b(/*)43 b(Make)e(a)j(new)e(component)e(where)h(DTSTART)g(has)h(month)f
-(of)i(i)g(*/)349 843 y(icalfileset_add)o(_c)o(omp)o(on)o(en)o(t\(f)o
-(s,)o(c\))o(;)174 1184 y(icalfileset_commi)o(t\()o(fs)o(\);)37
-b(/*)43 b(Write)e(to)i(disk)f(*/)174 1411 y(icalfileset_selec)o(t\()o
-(fs)o(,g\))o(;)37 b(/*)43 b(Set)f(the)h(gauge)e(to)i(filter)e
-(components)e(*/)174 1638 y(for)k(\(c)f(=)h(icalfileset_get_f)o(ir)o
-(st_)o(co)o(mp)o(one)o(nt)o(\(f)o(s\);)392 1752 y(c)g(!=)g(0;)392
-1865 y(c)g(=)g(icalfileset_get_n)o(ex)o(t_c)o(om)o(po)o(nen)o(t\()o(fs)
-o(\)\))349 1979 y(struct)e(icaltimetype)d(t)43 b(=)g(icalcomponent_get)
-o(_d)o(tst)o(ar)o(t\()o(c\);)349 2206 y(printf\(sn,icalt)o(im)o(e_a)o
-(s_)o(ct)o(ime)o(\(t)o(\)\))o(;)174 2433 y(icalfileset_free\()o(fs)o
-(\);)0 2706 y Fd(5.4.3)94 b(Other)31 b(routines)0 2916
-y Ff(There)c(are)g(sev)n(eral)e(other)i(routines)g(in)h(the)g(icalset)f
-(in)n(terface,)g(but)h(they)g(not)f(fully)h(implemen)n(ted)h(y)n(et.)0
-3207 y Fb(5.5)112 b(Memory)37 b(Managemen)m(t)0 3417
-y Ff(Libical)25 b(relies)f(hea)n(vily)g(on)h(dynamic)g(allo)r(cation)f
-(for)h(b)r(oth)h(the)f(core)f(ob)5 b(jects)25 b(and)g(for)f(the)i
-(strings)e(used)h(to)g(hold)g(v)-5 b(alues.)0 3531 y(Some)34
-b(of)f(this)h(memory)f(the)h(library)f(caller)g(o)n(wns)g(and)g(m)n
-(ust)h(free,)h(and)f(some)f(of)h(the)g(memory)f(is)h(managed)e(b)n(y)i
-(the)0 3645 y(library)-7 b(.)36 b(Here)27 b(is)g(a)g(summary)g(of)h
-(the)g(memory)e(rules.)0 3884 y Fd(1\))208 4031 y Ff(If)40
-b(the)h(function)g(name)g(has)f(new)g(in)h(it,)j(the)d(caller)e(gets)h
-(con)n(trol)f(of)i(the)g(memory)-7 b(.)75 b(\()40 b(suc)n(h)h(as)e
-(icalcomp)r(o-)208 4144 y(nen)n(t_new\(\),)27 b(or)g(icalprop)r(ert)n
-(y_new_clone\(\))e(\))0 4324 y Fd(2\))208 4471 y Ff(If)j(y)n(ou)g(got)g
-(the)h(memory)f(from)g(a)g(routine)g(with)h(new)f(in)h(it,)g(y)n(ou)f
-(m)n(ust)h(call)f(the)h(corresp)r(onding)d(*_free)i(routine)208
-4585 y(to)f(free)g(the)h(memory)-7 b(.)36 b(\()28 b(Use)g(icalcomp)r
-(onen)n(t_free\(\))e(to)i(free)f(ob)5 b(jects)27 b(created)g(with)h
-(icalcomp)r(onen)n(t_new\(\)\))0 4765 y Fd(3\))208 4912
-y Ff(If)j(the)h(function)f(name)g(has)g(add)g(in)g(it,)i(the)f(caller)e
-(is)h(transferring)e(con)n(trol)h(of)h(the)h(memory)e(to)h(the)h
-(routine.)47 b(\()208 5025 y(icalprop)r(ert)n(y_add_parameter\(\))23
-b(\))0 5205 y Fd(4\))p eop
-%%Page: 20 20
-20 19 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(20)208 162 y(If)34 b(the)g(function)g(name)g(has)f
-(remo)n(v)n(e)f(in)i(it,)i(the)e(caller)f(passes)f(in)i(a)g(p)r(oin)n
-(ter)f(to)g(an)h(ob)5 b(ject)33 b(and)h(after)f(the)h(call)208
-275 y(returns,)e(the)h(caller)e(o)n(wns)g(the)h(ob)5
-b(ject.)50 b(So,)33 b(b)r(efore)f(y)n(ou)f(call)h(icalcomp)r(onen)n
-(t_remo)n(v)n(e_prop)r(ert)n(y\(comp,fo)r(o\),)208 389
-y(y)n(ou)26 b(do)i(not)f(o)n(wn)g(fo)r(o)g(and)h(after)f(the)h(call)f
-(returns,)g(y)n(ou)g(do.)0 561 y Fd(5\))208 703 y Ff(If)d(the)g
-(routine)f(returns)g(a)g(string,)h(libical)g(o)n(wns)f(the)h(memory)f
-(and)g(will)h(put)g(it)h(on)e(a)g(ring)g(bu\033er)h(to)g(reclaim)f
-(later.)208 817 y(F)-7 b(or)32 b(example,)i(icalcomp)r(onen)n
-(t_as_ical_string\(\).)50 b(Y)-7 b(ou'd)33 b(b)r(etter)g(strdup\(\))h
-(it)g(if)f(y)n(ou)f(w)n(an)n(t)h(to)g(k)n(eep)f(it,)j(and)208
-931 y(y)n(ou)26 b(don't)i(ha)n(v)n(e)e(to)i(delete)g(it.)0
-1219 y Fb(5.6)112 b(Error)36 b(Handling)0 1429 y Ff(Libical)25
-b(has)g(sev)n(eral)e(error)h(handling)h(mec)n(hanisms)f(for)h(the)h(v)
--5 b(arious)24 b(t)n(yp)r(es)h(of)g(programming,)f(seman)n(tic)h(and)g
-(syn)n(tactic)0 1542 y(errors)g(y)n(ou)i(ma)n(y)g(encoun)n(ter.)0
-1811 y Fd(5.6.1)94 b(Return)31 b(v)-5 b(alues)0 2022
-y Ff(Man)n(y)29 b(library)f(routines)g(signal)h(errors)e(through)h
-(their)h(return)g(v)-5 b(alues.)42 b(All)30 b(routines)e(that)i(return)
-f(a)f(p)r(oin)n(ter,)i(suc)n(h)f(as)0 2135 y(icalcomp)r(onen)n
-(t_new\(\),)36 b(will)f(return)f(0)g(\()h(zero)f(\))h(on)f(a)g(fatal)h
-(error.)56 b(Some)35 b(routines)f(will)g(return)h(a)f(v)-5
-b(alue)34 b(of)h(en)n(um)0 2249 y(icalerroren)n(um.)0
-2518 y Fd(5.6.2)94 b(icalerrno)0 2728 y Ff(Most)24 b(routines)f(will)i
-(set)f(the)g(global)f(error)f(v)-5 b(alue)24 b(icalerrno)f(on)h
-(errors.)33 b(This)24 b(v)-5 b(ariable)23 b(is)h(an)g(en)n(umeration;)g
-(p)r(ermissible)0 2841 y(v)-5 b(alues)35 b(can)f(b)r(e)h(found)h(in)f
-(libical/icalerror.h.)56 b(If)35 b(the)g(routine)g(returns)f(an)h(en)n
-(um)g(icalerroren)n(um,)f(then)h(the)h(return)0 2955
-y(v)-5 b(alue)27 b(will)h(b)r(e)f(the)h(same)f(as)f(icalerrno.)35
-b(Y)-7 b(ou)27 b(can)g(use)g(icalerror_strerror\(\))c(to)k(get)g(a)g
-(string)f(that)i(describ)r(es)e(the)i(error)0 3224 y
-Fd(5.6.3)94 b(X-LIC-ERR)m(OR)30 b(and)j(X-LIC-INV)-11
-b(ALID-COMPONENT)0 3434 y Ff(The)38 b(library)f(handles)g(seman)n(tic)g
-(and)h(syn)n(tactic)f(errors)f(in)i(comp)r(onen)n(ts)g(b)n(y)f
-(inserting)g(errors)f(prop)r(erties)h(in)n(to)h(the)0
-3548 y(comp)r(onen)n(ts.)k(If)30 b(the)g(parser)d(cannot)i(parse)g
-(incoming)g(text)g(\()h(a)f(syn)n(tactic)g(error)e(\))j(or)f(if)h(the)g
-(icalrestriction_c)n(hec)n(k\(\))0 3661 y(routine)h(indicates)g(that)h
-(the)f(comp)r(onen)n(t)g(do)r(es)g(not)h(meet)f(the)h(requiremen)n(ts)e
-(of)h(RF)n(C2446)f(\()h(a)g(seman)n(tic)g(error\))f(the)0
-3775 y(library)i(will)h(insert)g(prop)r(erties)f(of)h(the)h(t)n(yp)r(e)
-f(X-LIC-ERR)n(OR)g(to)g(describ)r(e)g(the)g(error.)52
-b(Here)33 b(is)g(an)g(example)g(of)g(the)0 3889 y(error)26
-b(prop)r(ert)n(y:)0 4108 y Fc(X-LIC-ERROR;X-LI)o(C-)o(ERR)o(OR)o(TY)o
-(PE=)o(IN)o(VA)o(LID)o(_I)o(TI)o(P)38 b(:Failed)i(iTIP)i(restrictions)d
-(for)j(property)e(DTSTART.)0 4221 y(Expected)g(1)j(instances)d(of)j
-(the)f(property)e(and)j(got)f(0)0 4441 y Ff(This)35 b(error)f(resulted)
-h(from)g(a)g(call)g(to)h(icalrestriction_c)n(hec)n(k\(\),)f(whic)n(h)g
-(disco)n(v)n(ered)e(that)j(the)g(comp)r(onen)n(t)f(do)r(es)g(not)0
-4554 y(ha)n(v)n(e)26 b(a)i(DTST)-7 b(AR)g(T)28 b(prop)r(ert)n(y)-7
-b(,)27 b(as)g(required)f(b)n(y)h(RF)n(C2445.)0 4711 y(There)g(are)g(a)g
-(few)h(routines)e(to)i(manipulate)f(error)f(prop)r(erties:)0
-4867 y(The)35 b(follo)n(wing)g(data)g(is)g(supp)r(osed)g(to)g(b)r(e)h
-(in)g(a)f(table.)60 b(It)36 b(lo)r(oks)e(OK)h(in)h(LyX,)f(but)h(do)r
-(es)f(not)g(format)g(prop)r(ertly)g(in)0 4981 y(output.)0
-5137 y(Routine)28 b(Purp)r(ose)f(v)n(oid)g(icalrestriction_c)n(hec)n
-(k\(\))e(Chec)n(k)i(a)g(comp)r(onen)n(t)g(against)g(RF)n(C2446)e(and)j
-(insert)0 5294 y(error)g(prop)r(erties)g(to)i(indicate)f(non)g
-(compliance)g(in)n(t)h(icalcomp)r(onen)n(t_coun)n(t_errors\(\))c
-(Return)j(the)h(n)n(um)n(b)r(er)g(of)f(error)0 5407 y(prop)r(erties)p
-eop
-%%Page: 21 21
-21 20 bop 0 -167 3900 5 v 0 -200 a Fd(5.)73 b(Using)32
-b(libical)3149 b Ff(21)0 162 y(in)28 b(a)f(comp)r(onen)n(t)g(v)n(oid)g
-(icalcomp)r(onen)n(t_strip_errors\(\))d(Remo)n(v)n(e)i(all)i(error)d
-(prop)r(erties)i(in)h(as)0 318 y(comp)r(onen)n(t)f(v)n(oid)g(icalcomp)r
-(onen)n(t_con)n(v)n(ert_errors\(\))c(Con)n(v)n(ert)j(some)h(error)e
-(prop)r(erties)i(in)n(to)0 475 y(REQUESTS-ST)-7 b(A)g(TUS)29
-b(proprties)e(to)g(indicate)h(the)g(inabilit)n(y)f(to)0
-631 y(pro)r(cess)f(the)i(comp)r(onen)n(t)g(as)e(an)i(iTIP)g(request.)0
-788 y(The)g(t)n(yp)r(es)f(of)h(errors)d(are)i(listed)g(in)h
-(icalerror.h.)35 b(They)27 b(are:)0 1027 y Fc(ICAL_XLICERRORTY)o(PE)o
-(_CO)o(MP)o(ON)o(ENT)o(PA)o(RS)o(EER)o(RO)o(R)0 1141
-y(ICAL_XLICERRORTY)o(PE)o(_PA)o(RA)o(ME)o(TER)o(VA)o(LU)o(EPA)o(RS)o
-(EE)o(RRO)o(R)0 1254 y(ICAL_XLICERRORTY)o(PE)o(_PA)o(RA)o(ME)o(TER)o
-(NA)o(ME)o(PAR)o(SE)o(ER)o(ROR)0 1368 y(ICAL_XLICERRORTY)o(PE)o(_PR)o
-(OP)o(ER)o(TYP)o(AR)o(SE)o(ERR)o(OR)0 1481 y(ICAL_XLICERRORTY)o(PE)o
-(_VA)o(LU)o(EP)o(ARS)o(EE)o(RR)o(OR)0 1595 y(ICAL_XLICERRORTY)o(PE)o
-(_UN)o(KV)o(CA)o(LPR)o(OP)0 1709 y(ICAL_XLICERRORTY)o(PE)o(_IN)o(VA)o
-(LI)o(DIT)o(IP)0 1948 y Ff(The)46 b(libical)f(parser)f(will)i(generate)
-e(the)i(error)d(that)j(end)g(in)g(P)-7 b(ARSEERR)n(OR)47
-b(when)e(it)h(encoun)n(ters)f(garbage)e(in)0 2062 y(the)d(input)g
-(steam.)72 b(ICAL_XLICERR)n(OR)-7 b(TYPE_INV)e(ALIDITIP)42
-b(is)d(inserted)g(b)n(y)g(icalrestriction_c)n(hec)n(k\(\),)h(and)0
-2175 y(ICAL_XLICERR)n(OR)-7 b(TYPE_UNKV)n(CALPR)n(OP)21
-b(is)e(generated)f(b)n(y)i(icalv)n(cal_con)n(v)n(ert\(\))c(when)k(it)g
-(encoun)n(ters)f(a)g(vCal)0 2289 y(prop)r(ert)n(y)26
-b(that)i(it)g(cannot)f(con)n(v)n(ert)f(or)h(do)r(es)g(not)h(kno)n(w)f
-(ab)r(out.)0 2445 y(Icalcomp)r(onen)n(t_con)n(v)n(ert_errors\(\))33
-b(con)n(v)n(erts)k(some)g(of)i(the)f(error)f(prop)r(erties)g(in)h(a)g
-(comp)r(onen)n(t)g(in)n(to)g(REQUEST-)0 2559 y(ST)-7
-b(A)g(TUS)29 b(prop)r(erties)e(that)h(indicate)g(a)g(failure.)38
-b(As)28 b(of)g(libical)g(v)n(ersion0.18,)e(this)i(routine)g(only)f(con)
-n(v)n(ert)g(*P)-7 b(ARSEER-)0 2672 y(R)n(OR)29 b(errors)d(and)j(it)h
-(alw)n(a)n(ys)d(generates)h(a)g(3.x)h(\()g(failure)g(\))g(co)r(de.)42
-b(This)29 b(mak)n(es)f(it)h(more)f(of)h(a)g(go)r(o)r(d)g(idea)f(than)h
-(a)g(really)0 2786 y(useful)f(bit)g(of)g(co)r(de.)0 3077
-y Fb(5.7)112 b(Naming)36 b(Standard)0 3288 y Ff(Structures)26
-b(that)i(y)n(ou)e(access)f(with)j(the)f("struct")f(k)n(eyw)n(ord,)f
-(suc)n(h)h(as)h("struct)f(icaltimet)n(yp)r(e")g(are)g(things)h(that)g
-(y)n(ou)f(are)0 3401 y(allo)n(w)n(ed)g(to)i(see)f(inside)g(and)h(p)r
-(ok)n(e)f(at.)0 3558 y(Structures)33 b(that)h(y)n(ou)e(access)g(though)
-i(a)f(t)n(yp)r(edef,)i(suc)n(h)e(as)g("icalcomp)r(onen)n(t")e(are)i
-(things)g(where)g(all)g(of)h(the)f(data)g(is)0 3671 y(hidden.)0
-3828 y(Comp)r(onen)n(t)28 b(names)g(that)h(start)f(with)h("V")f(are)f
-(part)h(of)h(RF)n(C)f(2445)f(or)g(another)h(iCal)g(standard.)38
-b(Comp)r(onen)n(t)29 b(names)0 3941 y(that)h(start)f(with)i("X")e(are)g
-(also)g(part)g(of)h(the)g(sp)r(ec,)g(but)h(they)f(are)f(not)h(actually)
-f(comp)r(onen)n(ts)g(in)h(the)g(sp)r(ec.)44 b(Ho)n(w)n(ev)n(er,)0
-4055 y(they)34 b(lo)r(ok)f(and)g(act)h(lik)n(e)f(comp)r(onen)n(ts,)h
-(so)f(they)h(are)f(comp)r(onen)n(ts)g(in)h(libical.)55
-b(Names)33 b(that)h(start)f(with)h("XLIC")f(or)0 4168
-y("X-LIC")26 b(are)h(not)h(part)f(of)g(an)n(y)g(iCal)g(sp)r(ec.)37
-b(They)27 b(are)g(used)h(in)n(ternally)e(b)n(y)i(libical.)0
-4325 y(En)n(ums)34 b(that)h(iden)n(tify)f(a)g(comp)r(onen)n(t,)h(prop)r
-(ert)n(y)-7 b(,)35 b(v)-5 b(alue)33 b(or)h(parameter)e(end)i(with)h
-("_COMPONENT,")e("_PR)n(OP-)0 4438 y(ER)-7 b(TY,")28
-b("_V)-9 b(ALUE,")27 b(or)g("_P)-7 b(ARAMETER"s)0 4595
-y(En)n(ums)31 b(that)f(iden)n(tify)h(a)f(parameter)f(v)-5
-b(alue)30 b(ha)n(v)n(e)f(the)i(name)f(of)h(the)f(parameter)f(as)h(the)h
-(second)e(w)n(ord.)45 b(F)-7 b(or)29 b(instance:)0 4708
-y(ICAL_R)n(OLE_REQP)-7 b(AR)g(TICIP)g(ANT)29 b(or)d(ICAL_P)-7
-b(AR)g(TST)g(A)g(T_A)n(CCEPTED.)0 4865 y(The)28 b(en)n(ums)f(for)g(the)
-h(parts)f(of)g(a)g(recurarance)e(rule)j(and)f(request)g(statuses)g(are)
-f(irregular.)p eop
-%%Page: 22 22
-22 21 bop 0 -167 3900 5 v 0 -200 a Fd(6.)73 b(Hac)m(ks)33
-b(and)f(Bugs)2997 b Ff(22)0 162 y Fe(6)131 b(Hac)l(ks)45
-b(and)e(Bugs)0 400 y Ff(There)24 b(are)f(a)g(lot)h(of)g(hac)n(ks)f(in)i
-(the)f(library)f(\025)h(bits)g(of)g(co)r(de)g(that)g(I)g(am)g(not)g
-(proud)g(of)g(and)g(should)g(probably)f(b)r(e)h(c)n(hanged.)0
-514 y(These)j(are)g(mark)n(ed)f(with)i(the)g(commen)n(t)g(string)e("HA)
-n(CK.")p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/libical/doc/UsingLibical.txt b/libical/doc/UsingLibical.txt
deleted file mode 100644
index 6b203d43d2..0000000000
--- a/libical/doc/UsingLibical.txt
+++ /dev/null
@@ -1,1384 +0,0 @@
-
-
-Using Libical
-
-Eric Busboom (eric@softwarestudio.org)
-
-January 2001
-
-
-
-1 Introduction
-
-Libical is an Open Source implementation of the iCalendar protocols
-and protocol data units. The iCalendar specification describes how
-calendar clients can communicate with calendar servers so users can
-store their calendar data and arrange meetings with other users.
-
-Libical implements RFC2445, RFC2446 and some of RFC2447 and the CAP
-draft.
-
-This documentation assumes that you are familiar with the iCalendar
-standards RFC2445 and RFC2446. these specifications are online on
-the CALSCH webpage at:
-
-http://www.imc.org/ietf-calendar/
-
-1.1 The libical project
-
-This code is under active development. If you would like to contribute
-to the project, you can contact me, Eric Busboom, at eric@softwarestudio.org.
-The project has a webpage at
-
-http://softwarestudio.org/libical/index.html
-
-and a mailing list that you can join by sending the following mail:
-
-To: minimalist@softwarestudio.org
-
-Subject: subscribe libical
-
-1.2 License
-
-The code and datafiles in this distribution are licensed under the
-Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html
-for a copy of the license. Alternately, you may use libical under
-the terms of the GNU Library General Public License. See http://www.fsf.org/copyleft/lesser.html
-for a copy of the LGPL.
-
-This dual license ensures that the library can be incorporated into
-both proprietary code and GPL'd programs, and will benefit from improvements
-made by programmers in both realms. I will only accept changes into
-my version of the library if they are similarly dual-licensed.
-
-1.3 Example Code
-
-A lot of the documentation for this library is in the form of example
-code. These examples are in the "examples" directory of the distribution.
-Also look in "src/test" for additional annotated examples.
-
-2 Building the Library
-
-Libical uses autoconf to generate makefiles. It should built with no
-adjustments on Linux, FreeBSD and Solaris under gcc. Some version
-have been successfully been build on MacOS, Solaris, UnixWare, And
-Tru64 UNIX without gcc, but you may run into problems with a particular
-later version.
-
-For a more complete guide to building the library, see the README file
-in the distribution.
-
-3 Structure
-
-The iCal calendar model is based on four types of objects: components,
-properties, values and parameters.
-
-Properties are the fundamental unit of information in iCal, and they
-work a bit like a hash entry, with a constant key and a variable value.
-Properties may also have modifiers, called parameters. In the iCal
-content line
-
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
-
-The property name is "ORGANIZER," the value of the property is "mrbig@host.com"
-and the "ROLE" parameter specifies that Mr Big is the chair of the
-meetings associated with this property.
-
-Components are groups of properties that represent the core objects
-of a calendar system, such as events or timezones. Components are
-delimited by "BEGIN" and "END" tags.
-
-When a component is sent across a network, if it is un-encrypted, it
-will look something like:
-
-BEGIN:VCALENDAR
-
-METHOD:REQUEST
-
-PRODID: -//hacksw/handcal//NONSGML v1.0//EN
-
-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
-
-Note that components can be nested; this example has both a VCALENDAR
-and a VEVENT component, one nested inside the other.
-
-3.1 Core iCal classes
-
-Libical is an object-based, data-oriented library. Nearly all of the
-routines in the library are associated with an opaque data types and
-perform some operation on that data type. Although the library does
-not actually have classes, we will use those terms since the behavior
-of these associations of data and routines is very similar to a class.
-
-3.1.1 Properties
-
-Properties are represented with the icalproperty class and its many
-"derived" classes with on "derived" class per property type in RFC2445.
-Again, there is no actual inheritance relations, but there are clusters
-of routines that make this term useful. A property is a container
-for a single value and a set of parameters.
-
-3.1.2 Components
-
-In libical, components are represented with the icalcomponent class.
-Icalcomponent is a container for a set of other components and properties.
-
-3.1.3 Values
-
-Values are represented in a similar way to properties; a base class
-and many "derived " classes. A value is essentially a abstract handle
-on a single fundamental type, a structure or a union.
-
-3.1.4 Parameters
-
-Parameters are represetned in a similar way to properties, except that
-they contain only one value
-
-3.2 Other elements of libical
-
-In addition to the core iCal classes, libical has many other types,
-structures, classes that aid in creating and using iCal components.
-
-3.2.1 Enumerations and types
-
-Libical is strongly typed, soo every component, property, parameter,
-and value type has an enumeration, and some have an associated structure
-or union.
-
-3.2.2 The parser
-
-The libical parser offers a variety of ways to convert RFC2445 text
-into a libical iinsteral component structure. the parser can parse
-blocks of text as a string, or it can parse lin-by-line.
-
-3.2.3 Error objects
-
-Libical has a substantial error reporting system for both programming
-errors and component usage errors.
-
-3.2.4 Memory Management
-
-Since many of libicals interfaces return strings, the library has its
-own memory management system to elimiate the need to free every string
-returned from the libraru.
-
-3.2.5 Storage classes
-
-The library also offers several classes to store components to flies,
-memory or databases.
-
-4 Differences From RFCs
-
-Libical has been designed to follow the standards as closely as possible,
-so that the key objects in the standards are also key objects in the
-library. However, there are a few areas where the specifications are
-(arguably) irregular, and following them exactly would result in an
-unfriendly interface. These deviations make libical easier to use
-by maintaining a self-similar interface.
-
-4.1 Pseudo Components
-
-Libical defines components for groups of properties that look and act
-like components, but are not defined as components in the specification.
-XDAYLIGHT and XSTANDARD are notable examples. These pseudo components
-group properties within the VTIMEZONE components. For instanace, the
-timezone properties associated with daylight savings time starts with
-"BEGIN:DAYLIGHT" and ends with "END:DAYLIGHT, just like other components,
-but is not defined as a component in RFC2445. ( See RFC2445, page
-61 ) In Libical,this grouping is represented by the XDAYLIGHT component.
-Standard iCAL components all start with the letter "V," while pseudo
-components start with"X."
-
-There are also pseudo components that are conceptually derived classes
-of VALARM. RFC2446 defines what properties may be included in each
-component, and for VALARM, the set of properties it may have depends
-on the value of the ACTION property.
-
-For instance, if a VALARM component has an ACTION property with the
-value of "AUDIO," the component must also have an "ATTACH" property.
-However, if the ACTION value is "DISPLAY," the component must have
-a DESCRIPTION property.
-
-To handle these various, complex restrictions, libical has pseudo components
-for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and
-XPROCEDUREALARM.
-
-4.2 Combined Values
-
-Many values can take more than one type. TRIGGER, for instance, can
-have a value type of with DURATION or of DATE-TIME. These multiple
-types make it difficult to create routines to return the value associated
-with a property.
-
-It is natural to have interfaces that would return the value of a property,
-but it is cumbersome for a single routine to return multiple types.
-So, in libical, properties that can have multiple types are given
-a single type that is the union of their RFC2445 types. For instance,
-in libical, the value of the TRIGGER property resolves to struct icaltriggertype.
-This type is a union of a DURATION and a DATE-TIME.
-
-4.3 Multi-Valued Properties
-
-Some properties, such as CATEGORIES have only one value type, but each
-CATEGORIES property can have multiple value instances. This also results
-in a cumbersome interface -- CATEGORIES accessors would have to return
-a list while all other accessors returned a single value. In libical,
-all properties have a single value, and multi-valued properties are
-broken down into multiple single valued properties during parsing.
-That is, an input line like,
-
-CATEGORIES: work, home
-
-becomes in libical's internal representation
-
-CATEGORIES: work
-
-CATEGORIES: home
-
-Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY
-) to exist as both a multi-values property and as multiple single
-value properties, while others ( like CATEGORIES ) can only exist
-as single multi-valued properties. This makes the internal representation
-for CATEGORIES illegal. However when you convert a component to a
-string, the library will collect all of the CATEGORIES properties
-into one.
-
-5 Using libical
-
-5.1 Creating Components
-
-There are three ways to create components in Libical: creating individual
-objects and assembling them, building entire objects in massive vaargs
-calls, and parsing a text file containing iCalendar data.
-
-5.1.1 Constructor Interfaces
-
-Using constructor interfaces, you create each of the objects separately
-and then assemble them in to components:
-
-icalcomponent *event;
-
-icalproperty *prop;
-
-icalparameter *param;
-
-struct icaltimetype atime;
-
-event = icalcomponent_new(ICAL_VEVENT_COMPONENT);
-
-prop = icalproperty_new_dtstamp(atime) ;
-
-icalcomponent_add_property(event, prop);
-
-prop = icalproperty_new_uid(''guid-1.host1.com'') );
-
-icalcomponent_add_property(event,prop);
-
-prop=icalproperty_new_organizer(''mrbig@host.com'');
-
-param = icalparameter_new_role(ICAL_ROLE_CHAIR)
-
-icalproperty_add_parameter(prop, param);
-
-icalcomponent_add_property(event,prop);
-
-Notice that libical uses a semi-object-oriented style of interface.
-Most things you work with are objects, that are instantiated with
-a constructor that has "new" in the name. Also note that, other than
-the object reference, most structure data is passed in to libical
-routines by value. Libical has some complex but very regular memory
-handling rules. These are detailed in section [sec:memory].
-
-If any of the constructors fail, they will return 0. If you try to
-insert 0 into a property or component, or use a zero-valued object
-reference, libical will either silently ignore the error or will abort
-with an error message. This behavior is controlled by a compile time
-flag (ICAL_ERRORS_ARE_FATAL), and will abort by default.
-
-5.1.2 vaargs Constructors
-
-There is another way to create complex components, which is arguably
-more elegant, if you are not horrified by varargs. The varargs constructor
-interface allows you to create intricate components in a single block
-of code. Here is the previous examples in the vaargs style.
-
- calendar =
-
- icalcomponent_vanew(
-
- ICAL_VCALENDAR_COMPONENT,
-
- icalproperty_new_version(''2.0''),
-
- icalproperty_new_prodid(
-
- ''-//RDU Software//NONSGML HandCal//EN''),
-
- icalcomponent_vanew(
-
- ICAL_VEVENT_COMPONENT,
-
- icalproperty_new_dtstamp(atime),
-
- icalproperty_new_uid(''guid-1.host1.com''),
-
- icalproperty_vanew_organizer(
-
- ''mrbig@host.com''),
-
- icalparameter_new_role(ICAL_ROLE_CHAIR),
-
- 0
-
- ),
-
- icalproperty_vanew_attendee(
-
- ''employee-A@host.com'',
-
- icalparameter_new_role(
-
- ICAL_ROLE_REQPARTICIPANT),
-
- icalparameter_new_rsvp(1),
-
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP),
-
- 0
-
- ),
-
- icalproperty_new_location(
-
- "1CP Conference Room 4350"),
-
- 0
-
- ),
-
- 0
-
- );
-
-This form is similar to the constructor form , except that the constructors
-have "vanew" instead of "new" in the name. The arguments are similar
-too, except that the component constructor can have a list of properties,
-and the property constructor can have a list of parameters. Be sure
-to terminate every list with a '0', or your code will crash, if you
-are lucky.
-
-5.1.3 Parsing Text Files
-
-The final way to create components will probably be the most common;
-you can create components from RFC2445 compliant text. If you have
-the string in memory, use
-
-icalcomponent* icalparser_parse_string(char* str);
-
-If the string contains only one component, the parser will return the
-component in libical form. If the string contains multiple components,
-the multiple components will be returned as the children of an ICAL_XROOT_COMPONENT
-component.
-
-Parsing a whole string may seem wasteful if you want to pull a large
-component off of the network or from a file; you may prefer to parse
-the component line by line. This is possible too by using:
-
-icalparser* icalparser_new();
-
-void icalparser_free(icalparser* parser);
-
-icalparser_get_line(parser,read_stream);
-
-icalparser_add_line(parser,line);
-
-icalparser_set_gen_data(parser,stream)
-
-These routines will construct a parser object to which you can add
-lines of input and retrieve any components that the parser creates
-from the input. These routines work by specifing an adaptor routine
-to get string data from a source. For an example:
-
-char* read_stream(char *s, size_t size, void *d)
-
-{
-
- char *c = fgets(s,size, (FILE*)d);
-
- return c;
-
-}
-
-main() {
-
- char* line;
-
- icalcomponent *c;
-
- icalparser *parser = icalparser_new();
-
- FILE* stream = fopen(argv[1],"r");
-
- icalparser_set_gen_data(parser,stream);
-
- do{
-
- line = icalparser_get_line(parser,read_stream);
-
- c = icalparser_add_line(parser,line);
-
- if (c != 0){
-
- printf("%s",icalcomponent_as_ical_string(c));
-
- icalparser_claim(parser);
-
- printf("\n---------------\n");
-
- icalcomponent_free(c);
-
- }
-
- } while ( line != 0);
-
-}
-
-The parser object parameterizes the routine used to get input lines
-with icalparser_set_gen_data() and icalparser_get_line(). In this
-example, the routine read_stream() will fetch the next line from a
-stream, with the stream passed in as the void* parameter d. The parser
-calls read_stream() from icalparser_get_line(), but it also needs
-to know what stream to use. This is set by the call to icalparser_set_gen_data().
-By using a different routine for read_stream or passing in different
-data with icalparser_set_gen_data, you can connect to any data source.
-
-Using the same mechanism, other implementations could read from memory
-buffers, sockets or other interfaces.
-
-Since the example code is a very common way to use the parser, there
-is a convenience routine;
-
-icalcomponent* icalparser_parse(icalparser *parser,
-
- char* (*line_gen_func)(char *s, size_t size, void*
-d))
-
-To use this routine, you still must construct the parser object and
-pass in a reference to a line reading routine. If the parser can create
-a single component from the input, it will return a pointer to the
-newly constructed component. If the parser can construct multiple
-components from the input, it will return a reference to an XROOT
-component ( of type ICAL_XROOT_COMPONENT.) This XROOT component will
-hold all of the components constructed from the input as children.
-
-5.2 Accessing Components
-
-Given a reference to a component, you probably will want to access
-the properties, parameters and values inside. Libical interfaces let
-you find sub-component, add and remove sub-components, and do the
-same three operations on properties.
-
-5.2.1 Finding Components
-
-To find a sub-component of a component, use:
-
-icalcomponent* icalcomponent_get_first_component(
-
- icalcomponent* component,
-
- icalcomponent_kind kind);
-
-This routine will return a reference to the first component of the
-type 'kind.' The key kind values, listed in icalenums.h are:
-
-ICAL_ANY_COMPONENT
-
-ICAL_VEVENT_COMPONENT
-
-ICAL_VTODO_COMPONENT
-
-ICAL_VJOURNAL_COMPONENT
-
-ICAL_VCALENDAR_COMPONENT
-
-ICAL_VFREEBUSY_COMPONENT
-
-ICAL_VALARM_COMPONENT
-
-These are only the most common components; there are many more listed
-in icalenums.h.
-
-As you might guess, if there is more than one subcomponent of the type
-you have chosen, this routine will return only the first. to get at
-the others, you need to iterate through the component.
-
-5.2.2 Iterating Through Components
-
-Iteration requires a second routine to get the next subcomponent after
-the first:
-
-icalcomponent* icalcomponent_get_next_component(
-
- icalcomponent* component,
-
- icalcomponent_kind kind);
-
-With the 'first' and 'next' routines, you can create a for loop to
-iterate through all of a components subcomponents
-
- for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
-
- c != 0;
-
- c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT))
-
-{
-
- do_something(c);
-
-}
-
-This code bit wil iterate through all of the subcomponents in 'comp'
-but you can select a specific type of component by changing ICAL_ANY_COMPONENT
-to another component type.
-
-5.2.3 Using Component Iterators
-
-The iteration model in the previous section requires the component
-to keep the state of the iteration. So, you could not use this model
-to perform a sorting operations, since you'd need two iterators and
-there is only space for one. If you ever call icalcomponent_get_first_component()
-when an iteration is in progress, the pointer will be reset to the
-beginning.
-
-To solve this problem, there are also external iterators for components.
-The routines associated with these external iterators are:
-
-icalcompiter icalcomponent_begin_component(icalcomponent* component,
-icalcomponent_kind kind);
-
-icalcompiter icalcomponent_end_component(icalcomponent* component,
-icalcomponent_kind kind);
-
-icalcomponent* icalcompiter_next(icalcompiter* i);
-
-icalcomponent* icalcompiter_prior(icalcompiter* i);
-
-icalcomponent* icalcompiter_deref(icalcompiter* i);
-
-The _begin_() and _end_() routines return a new iterator that points
-to the beginning and ending of the list of subcomponent for the given
-component, and the kind argument works like the kind argument for
-internal iterators.
-
-After creating an iterators, use _next_() and _prior_() to step forward
-and backward through the list and get the component that the iterator
-points to, and use _deref() to return the component that the iterator
-points to without moving the iterator. All routines will return 0
-when they move to point off the end of the list.
-
-Here is an example of a loop using these routines:
-
-for(
-
- i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT);
-
- icalcompiter_deref(&i)!= 0;
-
- icalcompiter_next(&i)
-
-) {
-
- icalcomponent *this = icalcompiter_deref(&i);
-
-}
-
-5.2.4 Removing Components
-
-Removing an element from a list while iterating through the list with
-the internal iterators can cause problems, since you will probably
-be removing the element that the internal iterator points to. The
-_remove() routine will keep the iterator valid by moving it to the
-next component, but in a normal loop, this will result in two advances
-per iteration, and you will remove only every other component. To
-avoid the problem, you will need to step the iterator ahead of the
-element you are going to remove, like this:
-
-for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT);
-
- c != 0;
-
- c = next
-
-{
-
- next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT);
-
- icalcomponent_remove_component(parent_comp,c);
-
-}
-
-Another way to remove components is to rely on the side effect of icalcomponent_remove_component:
-if component iterator in the parent component is pointing to the child
-that will be removed, it will move the iterator to the component after
-the child. The following code will exploit this behavior:
-
-icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT);
-
-while((c=icalcomponent_get_current_component(c)) != 0 ){
-
- if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){
-
- icalcomponent_remove_component(parent_comp,inner);
-
- } else {
-
- icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT);
-
- }
-
-}
-
-5.2.5 Working with properties and parameters
-
-Finding, iterating and removing properties works the same as it does
-for components, using the property-specific or parameter-specific
-interfaces:
-
-icalproperty* icalcomponent_get_first_property(
-
- icalcomponent* component,
-
- icalproperty_kind kind);
-
-icalproperty* icalcomponent_get_next_property(
-
- icalcomponent* component,
-
- icalproperty_kind kind);
-
-void icalcomponent_add_property(
-
- icalcomponent* component,
-
- icalproperty* property);
-
-void icalcomponent_remove_property(
-
- icalcomponent* component,
-
- icalproperty* property);
-
-For parameters:
-
-icalparameter* icalproperty_get_first_parameter(
-
- icalproperty* prop,
-
- icalparameter_kind kind);
-
-icalparameter* icalproperty_get_next_parameter(
-
- icalproperty* prop,
-
- icalparameter_kind kind);
-
-void icalproperty_add_parameter(
-
- icalproperty* prop,
-
- icalparameter* parameter);
-
-void icalproperty_remove_parameter(
-
- icalproperty* prop,
-
- icalparameter_kind kind);
-
-Note that since there should be only one parameter of each type in
-a property, you will rarely need to use icalparameter_get_nect_paameter.
-
-5.2.6 Working with values
-
-Values are typically part of a property, although they can exist on
-their own. You can manipulate them either as part of the property
-or independently.
-
-The most common way to work with values to is to manipulate them from
-they properties that contain them. This involves fewer routine calls
-and intermediate variables than working with them independently, and
-it is type-safe.
-
-For each property, there are a _get_ and a _set_ routine that access
-the internal value. For instanace, for the UID property, the routines
-are:
-
-void icalproperty_set_uid(icalproperty* prop, const char* v)
-
-const char* icalproperty_get_uid(icalproperty* prop)
-
-For multi-valued properties, like ATTACH, the value type is usually
-a struct or union that holds both possible types.
-
-If you want to work with the underlying value object, you can get and
-set it with:
-
-icalvalue* icalproperty_get_value (icalproperty* prop)
-
-void icalproperty_set_value(icalproperty* prop, icalvalue* value);
-
-Icalproperty_get_value() will return a reference that you can manipulate
-with other icalvalue routines. Most of the time, you will have to
-know what the type of the value is. For instance, if you know that
-the value is a DATETIME type, you can manipulate it with:
-
-struct icaltimetype icalvalue_get_datetime(icalvalue* value);
-
-void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v);
-
-When working with an extension property or value (and X-PROPERTY or
-a property that has the parameter VALUE=x-name ) the value type is
-always a string. To get and set the value, use:
-
-void icalproperty_set_x(icalproperty* prop, char* v);
-
-char* icalproperty_get_x(icalproperty* prop);
-
-All X properties have the type of ICAL_X_PROPERTY, so you will need
-these routines to get and set the name of the property:
-
-char* icalproperty_get_x_name(icalproperty* prop)
-
-void icalproperty_set_x_name(icalproperty* prop, char* name);
-
-5.2.7 Checking Component Validity
-
-RFC 2446 defines rules for what properties must exist in a component
-to be used for transferring scheduling data. Most of these rules relate
-to the existence of properties relative to the METHOD property, which
-declares what operation a remote receiver should use to process a
-component. For instance, if the METHOD is REQUEST and the component
-is a VEVENT, the sender is probably asking the receiver to join in
-a meeting. In this case, RFC2446 says that the component must specify
-a start time (DTSTART) and list the receiver as an attendee (ATTENDEE).
-
-Libical can check these restrictions with the routine:
-
-int icalrestriction_check(icalcomponent* comp);
-
-This routine returns 0 if the component does not pass RFC2446 restrictions,
-or if the component is malformed. The component you pass in must be
-a VCALENDAR, with one or more children, like the examples in RFC2446.
-
-When this routine runs, it will insert new properties into the component
-to indicate any errors it finds. See section 6.5.3, X-LIC-ERROR for
-more information about these error properties.
-
-5.2.8 Converting Components to Text
-
-To create an RFC2445 compliant text representation of an object, use
-one of the *_as_ical_string() routines:
-
-char* icalcomponent_as_ical_string (icalcomponent* component)
-
-char* icalproperty_as_ical_string (icalproperty* property)
-
-char* icalparameter_as_ical_string (icalparameter* parameter)
-
-char* icalvalue_as_ical_string (icalvalue* value)
-
-In most cases, you will only use icalcomponent_as_ical_string (), since
-it will cascade and convert all of the parameters, properties and
-values that are attached to the root component.
-
-Icalproperty_as_ical_string() will terminate each line with the RFC2445
-specified line terminator "\\n" However, if you compile with the symbol
-ICAL_UNIX_NEWLINE undefined, ( it is defined by default) it will terminate
-lines with "\\n\\r"
-
-Remember that the string returned by these routines is owned by the
-library, and will eventually be re-written. You should copy it if
-you want to preserve it.
-
-5.3 Time
-
-5.3.1 Time structure
-
-LIbical defines it's own time structure for storing all dates and times.
-It would have been nice to re-use the C library's struct tm, but that
-structure does not differentiate between dates and times, and between
-local time and UTC. The libical structure is:
-
-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. */ };
-
-The year, month, day, hour, minute and second fields hold the broken-out
-time values. The is_utc field distinguishes between times in UTC and
-a local time zone. The is_date field indicates if the time should
-be interpreted only as a date. If it is a date, the hour, minute and
-second fields are assumed to be zero, regardless of their actual vaules.
-
-5.3.2 Creating time structures
-
-There are several ways to create a new icaltimetype structure:
-
-struct icaltimetype icaltime_from_string(const char* str);
-
-struct icaltimetype icaltime_from_timet(time_t v, int is_date);
-
-struct icaltimetype icaltime_from_int(int v, int is_date, int is_utc);
-
-Icaltime_from_string takes any RFC2445 compliant time string:
-
-struct icaltimetype tt = icaltime_from_string("19970101T103000");
-
-Icaltime_from_timet takes a timet value, representing seconds past
-the POSIX epoch, and a flag to indicate if the time is a date. Dates
-have an identical structure to a time, but the time portion ( hours,
-minuts and seconds ) is always 00:00:00. Dates act differently in
-sorting an comparision, and they have a different string representation
-in RFC2445.
-
-The icaltime_from_int is like icaltime_from_timet, but with an arbitrary
-epoch. This routine was a mistake and is deprecated.
-
-5.3.3 Time manipulating routines
-
-The null time value is used to indicate that the data in the structure
-is not a valid time.
-
-struct icaltimetype icaltime_null_time(void);
-
-int icaltime_is_null_time(struct icaltimetype t);
-
-It is sensible for the broken-out time fields to contain values that
-are not permitted in an ISO compliant time string. For instance, the
-seconds field can hold values greater than 59, and the hours field
-can hold values larger than 24. The excessive values will be rolled
-over into the next larger field when the structure is normalized.
-
-struct icaltimetype icaltime_normalize(struct icaltimetype t);
-
-Normalizing allows you to do arithmetic operations on time values.
-
-struct icaltimetype tt = icaltime_from_string("19970101T103000");
-
-tt.days +=3
-
-tt.second += 70;
-
-tt = icaltime_normalize(tt);
-
-There are several routines to get the day of the week or month, etc,
-from a time structure.
-
-short icaltime_day_of_year(struct icaltimetype t);
-
-struct icaltimetype icaltime_from_day_of_year(short doy, short year);
-
-short icaltime_day_of_week(struct icaltimetype t);
-
-short icaltime_start_doy_of_week(struct icaltimetype t);
-
-short icaltime_week_number(short day_of_month, short month, short year);
-
-struct icaltimetype icaltime_from_week_number(short week_number, short
-year);
-
-short icaltime_days_in_month(short month,short year);
-
-Two routines convert time structures to and from the number of seconds
-since the POSIX epoch. The is_date field indicates whether or not
-the hour, minute and second fields should be used in the conversion.
-
-struct icaltimetype icaltime_from_timet(time_t v, int is_date);
-
-time_t icaltime_as_timet(struct icaltimetype);
-
-The compare routine works exactly like strcmp, but on time structures.
-
-int icaltime_compare(struct icaltimetype a,struct icaltimetype b);
-
-The following routines convert between UTC and a named timezone. The
-tzid field must be a timezone name from the Olsen database, such as
-"America/Los_Angeles."
-
-The utc_offset routine returns the offset of the named time zone from
-UTC, in seconds.
-
-The tt parameter in the following routines indicates the date on which
-the conversion should be made. The tt parameter is necessary because
-timezones have many different rules for when daylight savings time
-is used, and these rules can change over time. So, for a single timezone
-one year may have daylight savings time on March 15, but for other
-years March 15 may be standard time, and some years may have standard
-time all year.
-
-int icaltime_utc_offset(struct icaltimetype tt, char* tzid);
-
-int icaltime_local_utc_offset();
-
-struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid);
-
-struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid);
-
-struct icaltimetype icaltime_as_local(struct icaltimetype tt);
-
-5.4 Storing Objects
-
-The libical distribution includes a separate library, libicalss, that
-allows you to store iCal component data to disk in a variety of ways.
-This library also includes code to implement the CSTP protocol of
-CAP and has some routines for deciphering incomming messages.
-
-The file storage routines are organized in an inheritance heirarchy
-that is rooted in icalset, with the derived class icalfileset and
-icaldirset. Icalfileset stores components to a file, while icaldirset
-stores components to multiple files, one per month based on DTSTAMP.
-Other storages classess, for storage to a heap or a mysql database
-are planned for the future.
-
-All of the icalset derived classes have the same interface:
-
-icaldirset* icaldirset_new(const char* path);
-
-void icaldirset_free(icaldirset* store);
-
-const char* icaldirset_path(icaldirset* store);
-
-void icaldirset_mark(icaldirset* store);
-
-icalerrorenum icaldirset_commit(icaldirset* store);
-
-icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent*
-comp);
-
-icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent*
-comp);
-
-int icaldirset_count_components(icaldirset* store, icalcomponent_kind
-kind);
-
-icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge);
-
-void icaldirset_clear(icaldirset* store);
-
-icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid);
-
-int icaldirset_has_uid(icaldirset* store, const char* uid);
-
-icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent
-*c);
-
-icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc,
-icalcomponent *newc);
-
-icalcomponent* icaldirset_get_current_component(icaldirset* store);
-
-icalcomponent* icaldirset_get_first_component(icaldirset* store);
-
-icalcomponent* icaldirset_get_next_component(icaldirset* store);
-
-5.4.1 Creating a new set
-
-You can create a new set from either the base class or the direved
-class. From the base class use one of:
-
-icalset* icalset_new_file(const char* path);
-
-icalset* icalset_new_dir(const char* path);
-
-icalset* icalset_new_heap(void);
-
-icalset* icalset_new_mysql(const char* path);
-
-You can also create a new set based on the derived class, For instance,
-with icalfileset:
-
-icalfileset* icalfileset_new(const char* path);
-
-icalfileset* icalfileset_new_open(const char* path, int flags, mode_t
-mode);
-
-Icaset_new_file is identical to icalfileset_new. BOth routines will
-open an existing file for readinga and writing, or create a new file
-if it does not exist. Icalfilset_new_open takes the same arguments
-as the open() system routine and behaves in the same way.
-
-The icalset and icalfilset objects are somewhat interchangable -- you
-can use an icalfileset* as an argument to any of the icalset routines.
-
-The following examples will all use icalfileset routines; using the
-other icalset derived classess will be similar.
-
-5.4.2 Adding, Finding and Removing Components
-
-To add components to a set, use:
-
-icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent*
-child);
-
-The fileset keeps an inmemory copy of the components, and this set
-must be written back to the file ocassionally. There are two routines
-to manage this:
-
-void icalfileset_mark(icalfileset* cluster);
-
-icalerrorenum icalfileset_commit(icalfileset* cluster);
-
-Icalfileset_mark indicates that the in-memory components have changed.
-Calling the _add_component routine will call _mark automatically,
-but you may need to call it yourself if you have made a change to
-an existing component. The _commit routine writes the data base to
-disk, but only if it is marked. The _commit routine is called automatically
-when the icalfileset is freed.
-
-To iterate through the components in a set, use:
-
-icalcomponent* icalfileset_get_first_component(icalfileset* cluster);
-
-icalcomponent* icalfileset_get_next_component(icalfileset* cluster);
-
-icalcomponent* icalfileset_get_current_component (icalfileset* cluster);
-
-These routines work like the corresponding routines from icalcomponent,
-except that their output is filtered through a gauge. A gauge is a
-test for the properties within a components; only components that
-pass the test are returned. A gauge can be constructed from a MINSQL
-string with:
-
-icalgauge* icalgauge_new_from_sql(char* sql);
-
-Then, you can add the gauge to the set with :
-
-icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge);
-
-Here is an example that puts all of these routines together:
-
-void test_fileset()
-
-{
-
- icalfileset *fs;
-
- icalcomponent *c;
-
- int i;
-
- char *path = "test_fileset.ics";
-
- icalgauge *g = icalgauge_new_from_sql(
-
- "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND
-DTSTART <= '20000106T120000Z'");
-
-
-
- fs = icalfileset_new(path);
-
-
-
- for (i = 0; i!= 10; i++){
-
- c = make_component(i); /* Make a new component where DTSTART
-has month of i */
-
- icalfileset_add_component(fs,c);
-
- }
-
- icalfileset_commit(fs); /* Write to disk */
-
- icalfileset_select(fs,g); /* Set the gauge to filter components
-*/
-
-
-
- for (c = icalfileset_get_first_component(fs);
-
- c != 0;
-
- c = icalfileset_get_next_component(fs)){
-
- struct icaltimetype t = icalcomponent_get_dtstart(c);
-
-
-
- printf("%s\n",icaltime_as_ctime(t));
-
- }
-
- icalfileset_free(fs);
-
-}
-
-5.4.3 Other routines
-
-There are several other routines in the icalset interface, but they
-not fully implemented yet.
-
-5.5 <sec:memory>Memory Management
-
-Libical relies heavily on dynamic allocation for both the core objects
-and for the strings used to hold values. Some of this memory the library
-caller owns and must free, and some of the memory is managed by the
-library. Here is a summary of the memory rules.
-
-1) If the function name has "new" in it, the caller gets control
- of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone()
- )
-
-2) If you got the memory from a routine with new in it, you must
- call the corresponding *_free routine to free the memory. ( Use
- icalcomponent_free() to free objects created with icalcomponent_new())
-
-3) If the function name has "add" in it, the caller is transferring
- control of the memory to the routine. ( icalproperty_add_parameter() )
-
-4) If the function name has "remove" in it, the caller passes in
- a pointer to an object and after the call returns, the caller owns
- the object. So, before you call icalcomponent_remove_property(comp,foo),
- you do not own "foo" and after the call returns, you do.
-
-5) If the routine returns a string, libical owns the memory and will
- put it on a ring buffer to reclaim later. For example, icalcomponent_as_ical_string().
- You'd better strdup() it if you want to keep it, and you don't have
- to delete it.
-
-5.6 Error Handling
-
-Libical has several error handling mechanisms for the various types
-of programming, semantic and syntactic errors you may encounter.
-
-5.6.1 Return values
-
-Many library routines signal errors through their return values. All
-routines that return a pointer, such as icalcomponent_new(), will
-return 0 ( zero ) on a fatal error. Some routines will return a value
-of enum icalerrorenum.
-
-5.6.2 icalerrno
-
-Most routines will set the global error value icalerrno on errors.
-This variable is an enumeration; permissible values can be found in
-libical/icalerror.h. If the routine returns an enum icalerrorenum,
-then the return value will be the same as icalerrno. You can use icalerror_strerror()
-to get a string that describes the error. The enumerations are:
-
-* ICAL_BADARG_ERROR -- One of the argument to a routine was bad. Typically
- for a null pointer.
-
-* ICAL_NEWFAILED_ERROR -- A new() or malloc() failed
-
-* ICAL_MALFORMEDDATA_ERROR -- An input string was not in the correct
- format
-
-* ICAL_PARSE_ERROR -- The parser failed to parse an incomming component
-
-* ICAL_INTERNAL_ERROR -- Largely equivalent to an assert
-
-* ICAL_FILE_ERROR -- A file operation failed. Check errno for more
- detail.
-
-* ICAL_ALLOCATION_ERROR -- ?
-
-* ICAL_USAGE_ERROR -- ?
-
-* ICAL_NO_ERROR -- No error
-
-* ICAL_MULTIPLEINCLUSION_ERROR -- ?
-
-* ICAL_TIMEDOUT_ERROR -- For CSTP and acquiring locks
-
-* ICAL_UNKNOWN_ERROR -- ?
-
-5.6.3 X-LIC-ERROR and X-LIC-INVALID-COMPONENT
-
-The library handles semantic and syntactic errors in components by
-inserting errors properties into the components. If the parser cannot
-parse incoming text ( a syntactic error ) or if the icalrestriction_check()
-routine indicates that the component does not meet the requirements
-of RFC2446 ( a semantic error) the library will insert properties
-of the type X-LIC-ERROR to describe the error. Here is an example
-of the error property:
-
-X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions
-for property DTSTART.
-
-Expected 1 instances of the property and got 0
-
-This error resulted from a call to icalrestriction_check(), which discovered
-that the component does not have a DTSTART property, as required by
-RFC2445.
-
-There are a few routines to manipulate error properties:
-
-[ The following data is supposed to be in a table. It looks OK in LyX,
-but does not format propertly in output. ]
-
-+-------------------------------------+---------------------------------------------------------+
-| Routine | Purpose |
-+-------------------------------------+---------------------------------------------------------+
-| void icalrestriction_check() | Check a component against RFC2446 and insert |
-+-------------------------------------+---------------------------------------------------------+
-| | error properties to indicate non compliance |
-+-------------------------------------+---------------------------------------------------------+
-| int icalcomponent_count_errors() | Return the number of error properties |
-+-------------------------------------+---------------------------------------------------------+
-| | in a component |
-+-------------------------------------+---------------------------------------------------------+
-| void icalcomponent_strip_errors() | Remove all error properties in as |
-+-------------------------------------+---------------------------------------------------------+
-| | component |
-+-------------------------------------+---------------------------------------------------------+
-| void icalcomponent_convert_errors() | Convert some error properties into |
-+-------------------------------------+---------------------------------------------------------+
-| | REQUESTS-STATUS proprties to indicate the inability to |
-+-------------------------------------+---------------------------------------------------------+
-| | process the component as an iTIP request. |
-+-------------------------------------+---------------------------------------------------------+
-
-
-The types of errors are listed in icalerror.h. They are:
-
-ICAL_XLICERRORTYPE_COMPONENTPARSEERROR
-
-ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR
-
-ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR
-
-ICAL_XLICERRORTYPE_PROPERTYPARSEERROR
-
-ICAL_XLICERRORTYPE_VALUEPARSEERROR
-
-ICAL_XLICERRORTYPE_UNKVCALPROP
-
-ICAL_XLICERRORTYPE_INVALIDITIP
-
-The libical parser will generate the error that end in PARSEERROR when
-it encounters garbage in the input steam. ICAL_XLICERRORTYPE_INVALIDITIP
-is inserted by icalrestriction_check(), and ICAL_XLICERRORTYPE_UNKVCALPROP
-is generated by icalvcal_convert() when it encounters a vCal property
-that it cannot convert or does not know about.
-
-Icalcomponent_convert_errors() converts some of the error properties
-in a component into REQUEST-STATUS properties that indicate a failure.
-As of libical version0.18, this routine only convert *PARSEERROR errors
-and it always generates a 3.x ( failure ) code. This makes it more
-of a good idea than a really useful bit of code.
-
-5.6.4 ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal
-
-If the global variable icalerror_errors_are_fatal is set to 1, then
-any error condition will cause the program to abort. The abort occurs
-in icalerror_set_errno(), and is done with an assert(0) if NDEBUG
-is undefined, and with icalerror_crash_here if NDEBUG is defined.
-The default value of icalerror_errors_are_fatal is 1 when ICAL_ERRORS_ARE_FATAL
-is defined, and 0 otherwise. Since ICAL_ERRORS_ARE_FATAL is defined
-by default, icalerror_errors_are_fatal is also defined by default.
-
-5.7 Naming Standard
-
-Structures that you access with the "struct" keyword, such as "struct
-icaltimetype" are things that you are allowed to see inside and poke
-at.
-
-Structures that you access though a typedef, such as "icalcomponent"
-are things where all of the data is hidden.
-
-Component names that start with "V" are part of RFC 2445 or another
-iCal standard. Component names that start with "X" are also part of
-the spec, but they are not actually components in the spec. However,
-they look and act like components, so they are components in libical.
-Names that start with "XLIC" or "X-LIC" are not part of any iCal spec.
-They are used internally by libical.
-
-Enums that identify a component, property, value or parameter end with
-"_COMPONENT," "_PROPERTY," "_VALUE," or "_PARAMETER"s
-
-Enums that identify a parameter value have the name of the parameter
-as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED.
-
-The enums for the parts of a recurarance rule and request statuses
-are irregular.
-
-6 Hacks and Bugs
-
-There are a lot of hacks in the library -- bits of code that I am not
-proud of and should probably be changed. These are marked with the
-comment string "HACK."
-
-7 Library Reference
-
-7.1 Manipulating struct icaltimetype
-
-7.1.1 Struct icaltimetype
-
-struct icaltimetype
-
-{
-
- int year;
-
- int month;
-
- int day;
-
- int hour;
-
- int minute;
-
- int second;
-
- int is_utc;
-
- int is_date;
-
- const char* zone;
-
-};
diff --git a/libical/examples/.cvsignore b/libical/examples/.cvsignore
deleted file mode 100644
index 194ade0e6c..0000000000
--- a/libical/examples/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile.in
-Makefile
-.deps
-.libs
-*.lo
-*.la
-doesnothing
diff --git a/libical/examples/Makefile.am b/libical/examples/Makefile.am
deleted file mode 100644
index c9adbe07ba..0000000000
--- a/libical/examples/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-
-noinst_PROGRAMS = doesnothing
-
-if WITH_BDB4
-doesnothing_LDADD = ../src/libical/libical-evolution.la ../src/libicalss/libicalss-evolution.la ../src/libicalvcal/libicalvcal-evolution.la @BDB_DIR_LIB@/@BDB_LIB@
-else
-doesnothing_LDADD = ../src/libical/libical-evolution.la ../src/libicalss/libicalss-evolution.la ../src/libicalvcal/libicalvcal-evolution.la
-endif
-
-LIBS = @PTHREAD_LIBS@
-
-INCLUDES = -I. -I$(top_srcdir)/src
-
-doesnothing_SOURCES = \
- access_components.c \
- access_properties_and_parameters.c \
- errors.c \
- main.c \
- parse_text.c
-
diff --git a/libical/examples/access-usecases.txt b/libical/examples/access-usecases.txt
deleted file mode 100644
index 9bcb7544c3..0000000000
--- a/libical/examples/access-usecases.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-Usecases
----------
-
-1) iMIP based CUA uses a local, file-based store
-
-2) CAP based CUA uses one or more remote CAP servers
-
-3) CAP based CUA uses a local cache that synchronizes with one or more
-CAP servers.
-
-4) CUA imports and exports from a file
-
-Scenarios.
----------
-
-1 Open a connection to a store.
-
-2 Create a new calendar for which user Bob can read and user Alice can
-read an write.
-
-3 Create several new calendars
-
-4 Delete a calendar
-
-5 Change the calid of a calendar
-
-6 Delete all calendars belonging to user bob
-
-7 Get three new UIDs from the store
-
-8 Store a new VEVENT in the store.
-
-9 Find all components for which the LOCATION is "West Conference Room"
-and change them to "East Conference Room"
-
-10 Find the component with UID X and add a GEO property to it.
-
-11 Delete all VEVENTS which have a METHOD that is not CREATED
-
-12 Retrieve all VEVENTS which have a METHOD that is not CREATED
-
-13 Retrieve the capabilities of the store
-
-14 Retrieve/Modify/Add/Delete properties of a store
-
-15 Retrieve/Modify/Add/Delete VCARs of a store
-
-16 Retrieve/Modify/Add/Delete VTIMEZONEs of a store
-
-17 Retrieve/Modify/Add/Delete properties of a calendar
-
-18 Retrieve/Modify/Add/Delete VCARs of a calendar
-
-19 Retrieve/Modify/Add/Delete VTIMEZONEs of a calendar
-
-20 Translate a CALID into one or more UPNs
-
-21 Expand a group UPN into all of the members of the group \ No newline at end of file
diff --git a/libical/examples/access_components.c b/libical/examples/access_components.c
deleted file mode 100644
index 796ce4759d..0000000000
--- a/libical/examples/access_components.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/* Access_component.c */
-
-#include <libical/ical.h>
-
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-
-void do_something(icalcomponent *c);
-
-/* Creating iCal Components
-
- There are two ways to create new component in libical. You can
- build the component from primitive parts, or you can create it
- from a string.
-
- There are two variations of the API for building the component from
- primitive parts. In the first variation, you add each parameter and
- value to a property, and then add each property to a
- component. This results in a long series of function calls. This
- style is show in create_new_component()
-
- The second variation uses vargs lists to nest many primitive part
- constructors, resulting in a compact, neatly formated way to create
- components. This style is shown in create_new_component_with_va_args()
-
-
-
-*/
-
-icalcomponent* create_new_component()
-{
-
- /* variable definitions */
- icalcomponent* calendar;
- icalcomponent* event;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
- struct icalperiodtype rtime;
- icalproperty* property;
-
- /* Define a time type that will use as data later. */
- rtime.start = icaltime_from_timet( time(0),0);
- rtime.end = icaltime_from_timet( time(0),0);
- rtime.end.hour++;
-
- /* Create calendar and add properties */
-
- calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
-
- /* Nearly every libical function call has the same general
- form. The first part of the name defines the 'class' for the
- function, and the first argument will be a pointer to a struct
- of that class. So, icalcomponent_ functions will all take
- icalcomponent* as their first argument. */
-
- /* The next call creates a new proeprty and immediately adds it to the
- 'calendar' component. */
-
- icalcomponent_add_property(
- calendar,
- icalproperty_new_version("2.0")
- );
-
-
- /* Here is the short version of the memory rules:
-
- If the routine name has "new" in it:
- Caller owns the returned memory.
- If you pass in a string, the routine takes the memory.
-
- If the routine name has "add" in it:
- The routine takes control of the component, property,
- parameter or value memory.
-
- If the routine returns a string ( "get" and "as_ical_string" )
- The library owns the returned memory.
-
- There are more rules, so refer to the documentation for more
- details.
-
- */
-
- icalcomponent_add_property(
- calendar,
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN")
- );
-
- /* Add an event */
-
- event = icalcomponent_new(ICAL_VEVENT_COMPONENT);
-
- icalcomponent_add_property(
- event,
- icalproperty_new_dtstamp(atime)
- );
-
- /* In the previous call, atime is a struct, and it is passed in by value.
- This is how all compound types of values are handled. */
-
- icalcomponent_add_property(
- event,
- icalproperty_new_uid("guid-1.host1.com")
- );
-
- /* add a property that has parameters */
- property = icalproperty_new_organizer("mailto:mrbig@host.com");
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_role(ICAL_ROLE_CHAIR)
- );
-
- icalcomponent_add_property(event,property);
-
- /* In this style of component creation, you need to use an extra
- call to add parameters to properties, but the form of this
- operation is the same as adding a property to a component */
-
- /* add another property that has parameters */
- property = icalproperty_new_attendee("mailto:employee-A@host.com");
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT)
- );
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_rsvp(1)
- );
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP)
- );
-
- icalcomponent_add_property(event,property);
-
-
- /* more properties */
-
- icalcomponent_add_property(
- event,
- icalproperty_new_description("Project XYZ Review Meeting")
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_categories("MEETING")
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_class(ICAL_CLASS_PUBLIC)
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_created(atime)
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_summary("XYZ Project Review")
- );
-
- property = icalproperty_new_dtstart(atime);
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_tzid("US-Eastern")
- );
-
- icalcomponent_add_property(event,property);
-
-
- property = icalproperty_new_dtend(atime);
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_tzid("US-Eastern")
- );
-
- icalcomponent_add_property(event,property);
-
- icalcomponent_add_property(
- event,
- icalproperty_new_location("1CP Conference Room 4350")
- );
-
- icalcomponent_add_component(calendar,event);
-
- return calendar;
-}
-
-
-/* Now, create the same component as in the previous routine, but use
-the constructor style. */
-
-icalcomponent* create_new_component_with_va_args()
-{
-
- /* This is a similar set up to the last routine */
- icalcomponent* calendar;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
- struct icalperiodtype rtime;
-
- rtime.start = icaltime_from_timet( time(0),0);
- rtime.end = icaltime_from_timet( time(0),0);
- rtime.end.hour++;
-
- /* Some of these routines are the same as those in the previous
- routine, but we've also added several 'vanew' routines. These
- 'vanew' routines take a list of properties, parameters or
- values and add each of them to the parent property or
- component. */
-
- calendar =
- icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstamp(atime),
- icalproperty_new_uid("guid-1.host1.com"),
- icalproperty_vanew_organizer(
- "mailto:mrbig@host.com",
- icalparameter_new_role(ICAL_ROLE_CHAIR),
- 0
- ),
- icalproperty_vanew_attendee(
- "mailto:employee-A@host.com",
- icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT),
- icalparameter_new_rsvp(1),
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP),
- 0
- ),
- icalproperty_new_description("Project XYZ Review Meeting"),
-
- icalproperty_new_categories("MEETING"),
- icalproperty_new_class(ICAL_CLASS_PUBLIC),
- icalproperty_new_created(atime),
- icalproperty_new_summary("XYZ Project Review"),
- icalproperty_vanew_dtstart(
- atime,
- icalparameter_new_tzid("US-Eastern"),
- 0
- ),
- icalproperty_vanew_dtend(
- atime,
- icalparameter_new_tzid("US-Eastern"),
- 0
- ),
- icalproperty_new_location("1CP Conference Room 4350"),
- 0
- ),
- 0
- );
-
-
- /* Note that properties with no parameters can use the regular
- 'new' constructor, while those with parameters use the 'vanew'
- constructor. And, be sure that the last argument in the 'vanew'
- call is a zero. Without, your program will probably crash. */
-
- return calendar;
-}
-
-
-void find_sub_components(icalcomponent* comp)
-{
- icalcomponent *c;
-
- /* The second parameter to icalcomponent_get_first_component
- indicates the type of component to search for. This will
- iterate through all sub-components */
- for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){
-
- do_something(c);
- }
-
- /* This will iterate only though VEVENT sub-components */
-
- for(c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT)){
-
- do_something(c);
- }
-
-}
-
-/* Ical components only have one internal iterator, so removing the
- object that the iterator points to can cause problems. Here is the
- right way to remove components */
-
-void remove_vevent_sub_components(icalcomponent* comp){
-
- icalcomponent *c, *next;
-
- for( c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT);
- c != 0;
- c = next)
- {
- next = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT);
-
- icalcomponent_remove_component(comp,c);
-
- do_something(c);
- }
-
-}
-
diff --git a/libical/examples/access_properties_and_parameters.c b/libical/examples/access_properties_and_parameters.c
deleted file mode 100644
index 1d8ff0b6d1..0000000000
--- a/libical/examples/access_properties_and_parameters.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* access_properties_and_parameters.c */
-
-#include <libical/ical.h>
-#include <string.h>
-
-/* Get a particular parameter out of a component. This routine will
- return a list of strings of all attendees who are required. Note
- that this routine assumes that the component that we pass in is a
- VEVENT. */
-
-void get_required_attendees(icalcomponent* event)
-{
- icalproperty* p;
- icalparameter* parameter;
-
- assert(event != 0);
- assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT);
-
- /* This loop iterates over all of the ATTENDEE properties in the
- event */
-
- /* The iteration routines save their state in the event
- struct, so the are not thread safe unless you lock the whole
- component. */
-
- for(
- p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY)
- ) {
-
- /* Get the first ROLE parameter in the property. There should
- only be one, so we won't bother to iterate over them. But,
- you can iterate over parameters just like with properties */
-
- parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER);
-
- /* If the parameter indicates the participant is required, get
- the attendees name and stick a copy of it into the output
- array */
-
- if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT)
- {
- /* Remember, the caller does not own this string, so you
- should strdup it if you want to change it. */
- const char *attendee = icalproperty_get_attendee(p);
- }
- }
-
-}
-
-/* Here is a similar example. If an attendee has a PARTSTAT of
- NEEDSACTION or has no PARTSTAT parameter, change it to
- TENTATIVE. */
-
-void update_attendees(icalcomponent* event)
-{
- icalproperty* p;
- icalparameter* parameter;
-
- assert(event != 0);
- assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT);
-
- for(
- p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY)
- ) {
-
- parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER);
-
- if (parameter == 0) {
-
- /* There was no PARTSTAT parameter, so add one. */
- icalproperty_add_parameter(
- p,
- icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE)
- );
-
- } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) {
- /* Remove the NEEDSACTION parameter and replace it with
- TENTATIVE */
-
- icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER);
-
- /* Don't forget to free it */
- icalparameter_free(parameter);
-
- /* Add a new one */
- icalproperty_add_parameter(
- p,
- icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE)
- );
- }
-
- }
-}
-
-/* Here are some examples of manipulating properties */
-
-void test_properties()
-{
- icalproperty *prop;
- icalparameter *param;
- icalvalue *value;
-
- icalproperty *clone;
-
- /* Create a new property */
- prop = icalproperty_vanew_comment(
- "Another Comment",
- icalparameter_new_cn("A Common Name 1"),
- icalparameter_new_cn("A Common Name 2"),
- icalparameter_new_cn("A Common Name 3"),
- icalparameter_new_cn("A Common Name 4"),
- 0);
-
- /* Iterate through all of the parameters in the property */
- for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER);
- param != 0;
- param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) {
-
- printf("Prop parameter: %s\n",icalparameter_get_cn(param));
- }
-
- /* Get a string representation of the property's value */
- printf("Prop value: %s\n",icalproperty_get_comment(prop));
-
- /* Spit out the property in its RFC 2445 representation */
- printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop));
-
- /* Make a copy of the property. Caller owns the memory */
- clone = icalproperty_new_clone(prop);
-
- /* Get a reference to the value within the clone property */
- value = icalproperty_get_value(clone);
-
- printf("Value: %s",icalvalue_as_ical_string(value));
-
- /* Free the original and the clone */
- icalproperty_free(clone);
- icalproperty_free(prop);
-
-}
diff --git a/libical/examples/access_store.c b/libical/examples/access_store.c
deleted file mode 100644
index fc2f5b01e2..0000000000
--- a/libical/examples/access_store.c
+++ /dev/null
@@ -1,210 +0,0 @@
-
-
-void acess_cap(void) {
-
- /* Note, all routines that are prefixed with "caller_" are
- implemented by the caller of libical */
-
-/* 1 Open a connection to a store. */
-
- /* The caller is responsible for getting a socket to the server
- and negotiating the first stages of the CAP exchange. These can
- be fairly complex and varied for different operating systems,
- local vs remote usage, and for different authentication
- schemes, so the API does not try to simplify them. */
-
- int sock = caller_create_socket_to_server();
- icalcstp *cstp = icalcstp_new(0,sock,sock);
-
- caller_authenticate(cstp);
-
- icalcsdb *csdb = icalcsdb_new(cstp);
-
-/* 2 Create a new calendar for which user Bill can read and user Mary can
-read and write. See CAP draft 7.2.1.1.1. for the text of this example*/
-
- /* This case requires setting up a TARGET, multiple OWNERs and
- multiple VCARs, so it creates a component and uses CSTP that
- than the CSDB interface.
-
- icalcomponent *create = icalcaputil_new_create();
-
- icalcomponent_add_property(create,
- icalproperty_new_target(
- strdup("cap://cal.example.com/relcal8")
- ));
-
- icalcomponent *cal =
- icalcomponent_vanew_vcalendar(
- icalproperty_new_relcalid(strdup("relcalid")),
- icalproperty_new_name(strdup("Bill & Mary's cal")),
- icalproperty_new_owner(strdup("bill")),
- icalproperty_new_owner(strdup("mary")),
- icalproperty_new_calmaster(strdup("mailto:bill@example.com")),
- icalcomponent_vanew_vcar(
- icalproperty_new_grant(strdup("UPN=bill;ACTION=*;OBJECT=*")),
- icalproperty_new_grant(strdup("UPN=bill;ACTION=*;OBJECT=*"))
- 0)
- 0);
-
- error = icalcomponent_add_component(create,cal);
-
- /* Send the data */
- error = icalcstp_senddata(cstp,10,create);
-
-
- /* Get the response */
- icalcstp_response response = icalcstp_get_first_response(cstp);
-
- /* Do something with the response*/
-
- if(icalenum_reqstat_major(response.code) != 2){
- /* do something with the error */
- }
-
- icalcomponent_free(create);
-
-
-/* 3 Create several new calendars */
-
- /* Same as #2, but insert more TARGET properties and read more responses*/
-
-/* 4 Delete a calendar */
-
- error = icalcsdb_delete(csdb,"uid12345-example.com");
-
-/* 5 Change the calid of a calendar */
-
- erorr = icalcsdb_move(csdb,"uid12345-old-example.com",
- "uid12345-new-example.com");
-
-
-/* 6 Delete all calendars belonging to user bob */
-
- icalproperty *p;
- /* First expand bob's UPN into a set of CALIDs */
- icalcomponent *calids = icalcsdb_expand_upn("bob@example.com");
-
- /* Then, create a message to delete all of them */
- icalcomponent *delete = icalcaputil_new_create();
-
-
- for(p = icalcomponent_get_first_property(calids,ICAL_CALID_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(calids,ICAL_CALID_PROPERTY)){
-
- char* = icalproperty_get_calid(p);
-
- icalcomponent_add_target(delete,p);
-
- }
-
- /* Send the message */
-
- error = icalcstp_senddata(cstp,10,delete);
-
- /* Finally, read the responses */
-
- for(response = icalcstp_get_first_response(cstp);
- response.code != ICAL_UNKNOWN_STATUS;
- response = icalcstp_get_next_response(cstp)){
-
- if(icalenum_reqstat_major(response.code) != 2){
- /* do something with the error */
- }
- }
-
-
-/* 7 Get three new UIDs from the store */
-
- /* libical owns the returned memory. Copy before using */
- char* uid1 = icalcsdb_generateuid(csdb);
- char* uid2 = icalcsdb_generateuid(csdb);
- char* uid3 = icalcsdb_generateuid(csdb);
-
-/* 8 Store a new VEVENT in the store. */
-
- /* Very similar to case #2 */
-
-/* 9 Find all components for which the LOCATION is "West Conference
-Room" and change them to "East Conference Room" */
-
- icalcomponent *modify = icalcaputil_new_modify();
-
- icalcaputil_modify_add_old_prop(modify,
- icalproperty_new_location(
- strdup("West Conference Room")));
-
- icalcaputil_modify_add_new_prop(modify,
- icalproperty_new_location(
- strdup("East Conference Room")));
-
- icalcaputil_add_target(modify,"relcal2");
-
- /* Send the component */
- error = icalcstp_senddata(cstp,10,delete);
-
- /* Get the response */
- icalcstp_response response = icalcstp_get_first_response(cstp);
-
- /* Do something with the response*/
-
- if(icalenum_reqstat_major(response.code) != 2){
- /* do something with the error */
- }
-
- icalcomponent_free(modify);
-
-/* 10 Find the component with UID X and add a GEO property to it. */
-
-
- icalcomponent *modify = icalcaputil_new_modify();
-
- icalcaputil_modify_add_query(modify,
- "SELECT UID FROM VEVENT WHERE UID = 'X'");
-
- icalcaputil_modify_add_new_prop(modify,
- icalproperty_new_geo(
- strdup("-117;32")));
-
- icalcaputil_add_target(modify,"relcal2");
-
- /* Send the component */
- error = icalcstp_senddata(cstp,10,delete);
-
- /* Get the response */
- icalcstp_response response = icalcstp_get_first_response(cstp);
-
- /* Do something with the response*/
-
- if(icalenum_reqstat_major(response.code) != 2){
- /* do something with the error */
- }
-
- icalcomponent_free(modify);
-
-
-/* 11 Delete all VEVENTS which have a METHOD that is not CREATED */
-
-
-/* 12 Retrieve all VEVENTS which have a METHOD that is not CREATED */
-
- /* Nearly the same at #11 */
-
-/* 13 Retrieve the capabilities of the store */
-
-/* 14 Retrieve/Modify/Add/Delete properties of a store */
-
-/* 15 Retrieve/Modify/Add/Delete VCARs of a store */
-
-/* 16 Retrieve/Modify/Add/Delete VTIMEZONEs of a store */
-
-/* 17 Retrieve/Modify/Add/Delete properties of a calendar */
-
-/* 18 Retrieve/Modify/Add/Delete VCARs of a calendar */
-
-/* 19 Retrieve/Modify/Add/Delete VTIMEZONEs of a calendar */
-
-/* 20 Translate a CALID into one or more UPNs */
-
-/* 21 Expand a group UPN into all of the members of the group */
diff --git a/libical/examples/changenames.pl b/libical/examples/changenames.pl
deleted file mode 100644
index 4adf84b9c0..0000000000
--- a/libical/examples/changenames.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-s/icalcluster/icalfileset/g;
-s/ICALCLUSTER/ICALFILESET/g;
-s/icalstore/icaldirset/g;
-s/ICALSTORE/ICALDIRSET/g;
diff --git a/libical/examples/errors.c b/libical/examples/errors.c
deleted file mode 100644
index 2ff316dd20..0000000000
--- a/libical/examples/errors.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* errors.c */
-
-#include <libical/ical.h>
-#include <stdio.h>
-
-void program_errors()
-{
- /*Most routines will set icalerrno on errors. This is an
- enumeration defined in icalerror.h */
-
- icalcomponent *c;
-
- icalerror_clear_errno();
-
- c = icalcomponent_new(ICAL_VEVENT_COMPONENT);
-
- if (icalerrno != ICAL_NO_ERROR){
-
- fprintf(stderr,"Horrible libical error: %s\n",
- icalerror_strerror(icalerrno));
-
- }
-
-}
-
-void component_errors(icalcomponent *comp)
-{
- int errors;
- icalproperty *p;
-
- /* presume that we just got this component from the parser */
-
- errors = icalcomponent_count_errors(comp);
-
- printf("This component has %d parsing errors\n", errors);
-
- /* Print out all of the parsing errors. This is not strictly
- correct, because it does not descend into any sub-components,
- as icalcomponent_count_errors() does. */
-
- for(p = icalcomponent_get_first_property(comp,ICAL_XLICERROR_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(comp,ICAL_XLICERROR_PROPERTY))
- {
-
- printf("-- The error is %s:\n",icalproperty_get_xlicerror(p));
- }
-
-
-
- /* Check the component for iTIP compilance, and add more
- X-LIC-ERROR properties if it is non-compilant. */
- icalrestriction_check(comp);
-
-
- /* Count the new errors. */
- if(errors != icalcomponent_count_errors(comp)){
- printf(" -- The component also has iTIP restriction errors \n");
- }
-
- /* Since there are iTIP restriction errors, it may be impossible
- to process this component as an iTIP request. In this case, the
- X-LIC-ERROR proeprties should be expressed as REQUEST-STATUS
- properties in the reply. This following routine makes this
- conversion */
-
-
- icalcomponent_convert_errors(comp);
-
-}
diff --git a/libical/examples/main.c b/libical/examples/main.c
deleted file mode 100644
index 3d8d7777a3..0000000000
--- a/libical/examples/main.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This is just to make the code in the example directory link properly. */
-#include <libical/ical.h>
-
-int main()
-{
-
- return 1;
-}
-
-
-void do_something(icalcomponent* comp){
-}
diff --git a/libical/examples/parse_text.c b/libical/examples/parse_text.c
deleted file mode 100644
index 84bdd9adfd..0000000000
--- a/libical/examples/parse_text.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* parse_text.c
-
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <libical/ical.h>
-
-#include <stdlib.h>
-
-/* The icalparser_get_line routine will create a single *content* line
-out of one or more input lines. The content line is all of the
-properties and values for a single property, and it can span several
-input lines. So, icalparser_get_line will need to be able to get more
-data on its own. Read_string is a routine that does this. You can
-write your own version of read stream to get data from other types of
-files, sockets, etc. */
-
-char* read_stream(char *s, size_t size, void *d)
-{
- char *c = fgets(s,size, (FILE*)d);
-
- return c;
-
-}
-
-void parse_text(int argc, char* argv[])
-{
-
- char* line;
- FILE* stream;
- icalcomponent *c;
-
- /* Create a new parser object */
- icalparser *parser = icalparser_new();
-
- stream = fopen(argv[1],"r");
-
- assert(stream != 0);
-
- /* Tell the parser what input routie it should use. */
- icalparser_set_gen_data(parser,stream);
-
- do{
-
- /* Get a single content line by making one or more calls to
- read_stream()*/
- line = icalparser_get_line(parser,read_stream);
-
- /* Now, add that line into the parser object. If that line
- completes a component, c will be non-zero */
- c = icalparser_add_line(parser,line);
-
-
- if (c != 0){
- printf("%s",icalcomponent_as_ical_string(c));
-
- printf("\n---------------\n");
-
- icalcomponent_free(c);
- }
-
- } while ( line != 0);
-
-
- icalparser_free(parser);
-}
diff --git a/libical/examples/usecases.c b/libical/examples/usecases.c
deleted file mode 100644
index dfa0d9cd5c..0000000000
--- a/libical/examples/usecases.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: usecases.c
- CREATOR: eric 03 April 1999
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (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
- The original code is usecases.c
-
-
- ======================================================================*/
-
-#include <libical/ical.h>
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-
-char str[] = "BEGIN:VCALENDAR\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\
-VERSION:2.0\
-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\
-CREATED:19980309T130000Z\
-SUMMARY:XYZ Project Review\
-DTSTART;TZID=US-Eastern:19980312T083000\
-DTEND;TZID=US-Eastern:19980312T093000\
-END:VEVENT\
-END:VCALENDAR";
-
-
-
-
-/* Here are some ways to work with values. */
-void test_values()
-{
- icalvalue *v;
- icalvalue *copy;
-
- v = icalvalue_new_caladdress("cap://value/1");
- printf("caladdress 1: %s\n",icalvalue_get_caladdress(v));
-
- icalvalue_set_caladdress(v,"cap://value/2");
- printf("caladdress 2: %s\n",icalvalue_get_caladdress(v));
- printf("String: %s\n",icalvalue_as_ical_string(v));
-
- copy = icalvalue_new_clone(v);
- printf("Clone: %s\n",icalvalue_as_ical_string(v));
- icalvalue_free(v);
- icalvalue_free(copy);
-
-
-}
-
-void test_parameters()
-{
- icalparameter *p;
-
- p = icalparameter_new_cn("A Common Name");
-
- printf("Common Name: %s\n",icalparameter_get_cn(p));
-
- printf("As String: %s\n",icalparameter_as_ical_string(p));
-}
-
-
diff --git a/libical/scripts/.cvsignore b/libical/scripts/.cvsignore
deleted file mode 100644
index dc4caac801..0000000000
--- a/libical/scripts/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/scripts/Makefile.am b/libical/scripts/Makefile.am
deleted file mode 100644
index c61eaefdce..0000000000
--- a/libical/scripts/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-EXTRA_DIST = \
-mkderivedcomponents.pl \
-mkderivedparameters.pl \
-mkderivedproperties.pl \
-mkderivedvalues.pl \
-mkparameterrestrictions.pl \
-mkrestrictionrecords.pl \
-mkrestrictiontable.pl \
-readvaluesfile.pl
diff --git a/libical/scripts/mkderivedcomponents.pl b/libical/scripts/mkderivedcomponents.pl
deleted file mode 100755
index 31743c3ba3..0000000000
--- a/libical/scripts/mkderivedcomponents.pl
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/bin/env perl
-
-use Getopt::Std;
-getopts('chspi:');
-
-
-# ARG 0 is components.txt
-open(PV,"$ARGV[0]") || die "Can't open components file $ARGV[0]:$!";
-
-my @components;
-
-while (<PV>){
-
- s/#.*//;
-
- chop;
-
- push(@components,$_);
-
-}
-
-close PV;
-
-# Write the file inline by copying everything before a demarcation
-# line, and putting the generated data after the demarcation
-
-if ($opt_i) {
-
- open(IN,$opt_i) || die "Can't open input file \"$opt_i\"";
-
- while(<IN>){
-
- if (/Do not edit/){
- last;
- }
-
- print;
-
- }
-
- if($opt_i){
- print "# Everything below this line is machine generated. Do not edit. \n";
- } else {
- print "/* Everything below this line is machine generated. Do not edit. */\n";
- }
-
-}
-
-if ($opt_c or $opt_h and !$opt_i){
-
-print <<EOM;
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalderivedproperties.{c,h}
- CREATOR: eric 09 May 1999
-
- \044Id:\044
-
- (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.
-
-
- ======================================================================*/
-
-/*
- * THIS FILE IS MACHINE GENERATED DO NOT EDIT
- */
-
-#include <stdarg.h> /* for va_arg functions */
-
-EOM
-
-}
-
-if ($opt_p and !$opt_i){
-
-print <<EOM;
-
-EOM
-
-}
-
-
-foreach $comp (@components) {
-
- next if !$comp;
-
- my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$comp));
- my $lc = lc($ucf);
- my $uc = uc($lc);
-
- if($opt_c) { # Make C source
- print<<EOM;
-
-/* $comp */
-
-icalcomponent* icalcomponent_new_${lc}()
-{
- return (icalcomponent*)icalcomponent_new_impl(ICAL_${uc}_COMPONENT);
-}
-
-icalcomponent* icalcomponent_vanew_${lc}(...)
-{
- va_list args;
- struct icalcomponent_impl *impl = icalcomponent_new_impl(ICAL_${uc}_component);
-
- va_start(args,v);
- icalcomponent_add_properties(impl, args);
- va_end(args);
-
- return (icalcomponent*)impl;
-}
-
-EOM
-
-
- } elsif ($opt_h) { # Make a C header
- print<<EOM;
-
-/* $comp */
-icalcomponent* icalcomponent_new_${lc}();
-icalcomponent* icalcomponent_vanew_${lc}(...);
-EOM
-
-} elsif ($opt_s) { # Make something for a switch statement
-
-print <<EOM;
-case ICAL_${uc}_PROPERTY:
-EOM
-
-} elsif ($opt_p) { # make perl source
-
-print <<EOM;
-
-# $comp
-package Net::ICal::Component::${ucf};
-\@ISA=qw(Net::ICal::Component);
-
-sub new
-{
- my \$package = shift;
- my \$c = Net::ICal::icalcomponent_new(\$Net::ICal::ICAL_${uc}_COMPONENT);
-
- my \$self = Net::ICal::Component::new_from_ref(\$c);
- Net::ICal::Component::_add_elements(\$self,\\\@_);
-
- # Self is blessed in new_from_ref
-
- return \$self;
-
-}
-EOM
-
-}
-
-
-
-}
-
-
diff --git a/libical/scripts/mkderivedparameters.pl b/libical/scripts/mkderivedparameters.pl
deleted file mode 100755
index 5439509aa8..0000000000
--- a/libical/scripts/mkderivedparameters.pl
+++ /dev/null
@@ -1,332 +0,0 @@
-#!/usr/bin/env perl
-
-require "readvaluesfile.pl";
-
-use Getopt::Std;
-getopts('chspi:');
-
-%no_xname = (RELATED=>1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1);
-
-%params = read_parameters_file($ARGV[0]);
-
-
-# Write the file inline by copying everything before a demarcation
-# line, and putting the generated data after the demarcation
-
-if ($opt_i) {
-
- open(IN,$opt_i) || die "Can't open input file $opt_i";
-
- while(<IN>){
- if (/<insert_code_here>/){
- insert_code();
- } else {
- print;
- }
-
- }
-
- if($opt_p){
- print "# Everything below this line is machine generated. Do not edit. \n";
- } else {
- print "/* Everything below this line is machine generated. Do not edit. */\n";
- }
-
-}
-
-sub insert_code
-{
-
-# Write parameter enumerations and datatypes
-
-if($opt_h){
- print "typedef enum icalparameter_kind {\n ICAL_ANY_PARAMETER = 0,\n";
- foreach $param (sort keys %params) {
-
- next if !$param;
-
- next if $param eq 'NO' or $param eq 'ANY';
-
- my $uc = join("",map {uc($_);} split(/-/,$param));
-
- my @enums = @{$params{$param}->{'enums'}};
-
- print " ICAL_${uc}_PARAMETER, \n";
-
- }
- print " ICAL_NO_PARAMETER\n} icalparameter_kind;\n\n";
-
- # Now create enumerations for parameter values
- $idx = 20000;
-
- print "#define ICALPARAMETER_FIRST_ENUM $idx\n\n";
-
- foreach $param (sort keys %params) {
-
- next if !$param;
-
- next if $param eq 'NO' or $prop eq 'ANY';
-
- my $type = $params{$param}->{"C"};
- my $ucv = join("",map {uc(lc($_));} split(/-/,$param));
- my @enums = @{$params{$param}->{'enums'}};
-
- if(@enums){
-
- print "typedef enum $type {\n";
- my $first = 1;
-
- unshift(@enums,"X");
-
- push(@enums,"NONE");
-
- foreach $e (@enums) {
- if (!$first){
- print ",\n";
- } else {
- $first = 0;
- }
-
- my $uce = join("",map {uc(lc($_));} split(/-/,$e));
-
- print " ICAL_${ucv}_${uce} = $idx";
-
- $idx++;
- }
- $c_type =~ s/enum //;
-
- print "\n} $type;\n\n";
- }
- }
-
- print "#define ICALPARAMETER_LAST_ENUM $idx\n\n";
-
-}
-
-if ($opt_c){
-
-
- # Create the icalparameter_value to icalvalue_kind conversion table
- my $count = 0;
- my $out;
-
- foreach $enum (@{$params{'VALUE'}->{'enums'}}){
- next if $enum eq 'NO' or $enum eq 'ERROR';
- $uc = join("",map {uc(lc($_));} split(/-/,$enum));
- $out.=" {ICAL_VALUE_${uc},ICAL_${uc}_VALUE},\n";
- $count++;
- }
-
- $count+=2;
- print "static struct icalparameter_value_kind_map value_kind_map[$count] = {\n";
- print $out;
- print " {ICAL_VALUE_X,ICAL_X_VALUE},\n";
- print " {ICAL_VALUE_NONE,ICAL_NO_VALUE}\n};\n\n";
-
- #Create the parameter Name map
-
- $out="";
- $count=0;
- foreach $param (sort keys %params) {
-
- next if !$param;
-
- next if $param eq 'NO' or $prop eq 'ANY';
-
- my $lc = join("",map {lc($_);} split(/-/,$param));
- my $uc = join("",map {uc(lc($_));} split(/-/,$param));
-
- $count++;
- $out.=" {ICAL_${uc}_PARAMETER,\"$param\"},\n";
-
- }
- $count+=1;
- print "static struct icalparameter_kind_map parameter_map[$count] = { \n";
- print $out;
- print " { ICAL_NO_PARAMETER, \"\"}\n};\n\n";
-
- # Create the parameter value map
- $out ="";
- $count=0;
- foreach $param (sort keys %params) {
-
- next if !$param;
-
- next if $param eq 'NO' or $prop eq 'ANY';
-
- my $type = $params{$param}->{"C"};
- my $uc = join("",map {uc(lc($_));} split(/-/,$param));
- my @enums = @{$params{$param}->{'enums'}};
-
- if(@enums){
-
- foreach $e (@enums){
- my $uce = join("",map {uc(lc($_));} split(/-/,$e));
-
- $count++;
- $out.=" {ICAL_${uc}_PARAMETER,ICAL_${uc}_${uce},\"$e\"},\n";
- }
-
- }
- }
-
- $count+=3;
- print "static struct icalparameter_map icalparameter_map[] = {\n";
- print "{ICAL_ANY_PARAMETER,0,\"\"},\n";
- print $out;
- print " {ICAL_NO_PARAMETER,0,\"\"}};\n\n";
-
-}
-
-foreach $param (keys %params){
-
- my $type = $params{$param}->{'C'};
-
- my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param));
-
- my $lc = lc($ucf);
- my $uc = uc($lc);
-
- my $charorenum;
- my $set_code;
- my $pointer_check;
- my $pointer_check_v;
- my $xrange;
-
- if ($type=~/char/ ) {
-
- $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return param->string;";
-
- $set_code = "((struct icalparameter_impl*)param)->string = icalmemory_strdup(v);";
-
- $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");";
- $pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");";
-
- } else {
-
- $xrange =" if (param->string != 0){\n return ICAL_${uc}_X;\n }\n" if !exists $no_xname{$uc};
-
- $charorenum= "icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn ($type)(param->data);";
-
- $pointer_check = "icalerror_check_arg_rz(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rz(v < ICAL_${uc}_NONE,\"v\");";
-
- $pointer_check_v = "icalerror_check_arg_rv(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rv(v < ICAL_${uc}_NONE,\"v\");";
-
- $set_code = "((struct icalparameter_impl*)param)->data = (int)v;";
-
- }
-
-
-
- if ($opt_c) {
-
- print <<EOM;
-/* $param */
-icalparameter* icalparameter_new_${lc}($type v)
-{
- struct icalparameter_impl *impl;
- icalerror_clear_errno();
- $pointer_check
- impl = icalparameter_new_impl(ICAL_${uc}_PARAMETER);
- if (impl == 0) {
- return 0;
- }
-
- icalparameter_set_${lc}((icalparameter*) impl,v);
- if (icalerrno != ICAL_NO_ERROR) {
- icalparameter_free((icalparameter*) impl);
- return 0;
- }
-
- return (icalparameter*) impl;
-}
-
-${type} icalparameter_get_${lc}(const icalparameter* param)
-{
- icalerror_clear_errno();
-$charorenum
-}
-
-void icalparameter_set_${lc}(icalparameter* param, ${type} v)
-{
- $pointer_check_v
- icalerror_check_arg_rv( (param!=0), "param");
- icalerror_clear_errno();
-
- $set_code
-}
-
-EOM
-
- } elsif( $opt_h) {
-
- print <<EOM;
-/* $param */
-icalparameter* icalparameter_new_${lc}($type v);
-${type} icalparameter_get_${lc}(const icalparameter* value);
-void icalparameter_set_${lc}(icalparameter* value, ${type} v);
-
-EOM
-
-}
-
-if ($opt_p) {
-
- print <<EOM;
-
-# $param
-
-package Net::ICal::Parameter::${ucf};
-\@ISA=qw(Net::ICal::Parameter);
-
-sub new
-{
- my \$self = [];
- my \$package = shift;
- my \$value = shift;
-
- bless \$self, \$package;
-
- my \$p;
-
- if (\$value) {
- \$p = Net::ICal::icalparameter_new_from_string(\$Net::ICal::ICAL_${uc}_PARAMETER,\$value);
- } else {
- \$p = Net::ICal::icalparameter_new(\$Net::ICal::ICAL_${uc}_PARAMETER);
- }
-
- \$self->[0] = \$p;
-
- return \$self;
-}
-
-sub get
-{
- my \$self = shift;
- my \$impl = \$self->_impl();
-
- return Net::ICal::icalparameter_as_ical_string(\$impl);
-
-}
-
-sub set
-{
- # This is hard to implement, so I've punted for now.
- die "Set is not implemented";
-}
-
-EOM
-
-}
-
-}
-
-if ($opt_h){
-
-print <<EOM;
-#endif /*ICALPARAMETER_H*/
-
-EOM
-}
-
-}
diff --git a/libical/scripts/mkderivedproperties.pl b/libical/scripts/mkderivedproperties.pl
deleted file mode 100755
index 59ec4b6430..0000000000
--- a/libical/scripts/mkderivedproperties.pl
+++ /dev/null
@@ -1,258 +0,0 @@
-#!/usr/bin/env perl
-
-require "readvaluesfile.pl";
-
-use Getopt::Std;
-getopts('chspmi:');
-
-# ARG 0 is properties.csv
-%propmap = read_properties_file($ARGV[0]);
-
-# ARG 1 is value-types.txt
-%valuemap = read_values_file($ARGV[1]);
-
-
-$include_vanew = 1;
-
-# Write the file inline by copying everything before a demarcation
-# line, and putting the generated data after the demarcation
-
-if ($opt_i) {
-
- open(IN,$opt_i) || die "Can't open input file $opt_i";
-
- while(<IN>){
-
- if (/<insert_code_here>/){
- insert_code();
- } else {
- print;
- }
-
- }
-
-}
-
-sub fudge_data {
- my $prop = shift;
-
- my $value = $propmap{$prop}->{'lic_value'};
-
- if (!$value){
- die "Can't find value for property \"$prop\"\n";
- }
- my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$prop));
- my $lc = lc($ucf);
- my $uc = uc($lc);
-
- my $ucfvalue = join("",map {ucfirst(lc($_));} split(/-/,$value));
- my $lcvalue = lc($ucfvalue);
- my $ucvalue = uc($lcvalue);
-
- my $type = $valuemap{$value}->{C}->[1];
-
- return ($uc,$lc,$lcvalue,$ucvalue,$type);
-
-}
-
-sub insert_code {
-
-# Create the property map data
-if($opt_c){
-
-
- my @props = sort keys %propmap;
- my $count = scalar(@props);
-
-
- print "static struct icalproperty_map property_map[$count] = {\n";
-
- foreach $prop (@props) {
-
- next if !$prop;
-
- next if $prop eq 'NO';
-
- my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop);
-
- print "{ICAL_${uc}_PROPERTY,\"$prop\",ICAL_${ucvalue}_VALUE},\n";
-
- }
-
- $prop = "NO";
-
- my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop);
-
- print "{ICAL_${uc}_PROPERTY,\"\",ICAL_NO_VALUE}};\n\n";
-
- $idx = 10000;
- $count = 1;
- my $out = "";
-
- foreach $value (sort keys %valuemap) {
-
- next if !$value;
- next if $value eq 'NO' or $prop eq 'ANY';
-
- my $ucv = join("",map {uc(lc($_));} split(/-/,$value));
- my @enums = @{$valuemap{$value}->{'enums'}};
-
- if(@enums){
-
- my ($c_autogen,$c_type) = @{$valuemap{$value}->{'C'}};
-
- unshift(@enums,"X");
- push(@enums,"NONE");
-
- foreach $e (@enums) {
-
- my $uce = join("",map {uc(lc($_));} split(/-/,$e));
-
- if($e ne "X" and $e ne "NONE"){
- $str = $e;
- } else {
- $str = "";
- }
-
- $out.=" {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_${uce},\"$str\" }, /*$idx*/\n";
-
- $idx++;
- $count++;
- }
-
- }
- }
-
- $count++;
- print "static struct icalproperty_enum_map enum_map[$count] = {\n";
- print $out;
- print " {ICAL_NO_PROPERTY,0,\"\"}\n};\n\n";
-
-
-
-}
-
-
-if($opt_h){
-
- # Create the property enumerations list
- print "typedef enum icalproperty_kind {\n ICAL_ANY_PROPERTY = 0,\n";
- foreach $prop (sort keys %propmap) {
-
- next if !$prop;
-
- next if $prop eq 'NO' or $prop eq 'ANY';
-
- my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop);
-
- print " ICAL_${uc}_PROPERTY, \n";
-
- }
- print " ICAL_NO_PROPERTY\n} icalproperty_kind;\n\n";
-
-
-}
-
-
-foreach $prop (sort keys %propmap) {
-
- next if !$prop;
-
- next if $prop eq 'NO' or $prop eq 'ANY';
-
- my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop);
-
-
- my $pointer_check;
- if ($type =~ /\*/){
- $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/;
- } elsif ( $type eq "void" ){
- $pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/;
-
- }
-
- my $set_pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/;
-
- if($opt_c) { # Generate C source
-
- if ($include_vanew) {
- print<<EOM;
-icalproperty* icalproperty_vanew_${lc}($type v, ...){
- va_list args;
- struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check
- icalproperty_set_${lc}((icalproperty*)impl,v);
- va_start(args,v);
- icalproperty_add_parameters(impl, args);
- va_end(args);
- return (icalproperty*)impl;
-}
-EOM
-}
- print<<EOM;
-
-/* $prop */
-icalproperty* icalproperty_new_${lc}($type v) {
- struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check
- icalproperty_set_${lc}((icalproperty*)impl,v);
- return (icalproperty*)impl;
-}
-
-EOM
- # Allow DTSTART, DTEND, DUE, EXDATE and RECURRENCE-ID to take DATE values.
- if ($lc eq "dtstart" || $lc eq "dtend" || $lc eq "due" || $lc eq "exdate"
- || $lc eq "recurrenceid") {
- print<<EOM;
-void icalproperty_set_${lc}(icalproperty* prop, $type v){
- icalvalue *value;
- $set_pointer_check
- icalerror_check_arg_rv( (prop!=0),"prop");
- if (v.is_date)
- value = icalvalue_new_date(v);
- else
- value = icalvalue_new_datetime(v);
- icalproperty_set_value(prop,value);
-}
-EOM
- } else {
-
- print<<EOM;
-void icalproperty_set_${lc}(icalproperty* prop, $type v){
- $set_pointer_check
- icalerror_check_arg_rv( (prop!=0),"prop");
- icalproperty_set_value(prop,icalvalue_new_${lcvalue}(v));
-}
-EOM
- }
- print<<EOM;
-$type icalproperty_get_${lc}(const icalproperty* prop){
- icalerror_check_arg( (prop!=0),"prop");
- return icalvalue_get_${lcvalue}(icalproperty_get_value(prop));
-}
-EOM
- } elsif ($opt_h) { # Generate C Header file
-
-
- print "\
-/* $prop */\
-icalproperty* icalproperty_new_${lc}($type v);\
-void icalproperty_set_${lc}(icalproperty* prop, $type v);\
-$type icalproperty_get_${lc}(const icalproperty* prop);";
-
-
-if ($include_vanew){
- print "icalproperty* icalproperty_vanew_${lc}($type v, ...);\n";
-}
-
-}
-
-
-} # This brace terminates the main loop
-
-
-
-if ($opt_h){
-
-print "\n\n#endif /*ICALPROPERTY_H*/\n"
-}
-
-}
diff --git a/libical/scripts/mkderivedvalues.pl b/libical/scripts/mkderivedvalues.pl
deleted file mode 100755
index 308a2c8ac0..0000000000
--- a/libical/scripts/mkderivedvalues.pl
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/usr/bin/perl
-
-use lib '.';
-
-require 'readvaluesfile.pl';
-
-use Getopt::Std;
-getopts('chi:');
-
- #Options
- # c -> generate c code file
- # h-> generate header file
-
- # Open with value-types.txt
-
-my %h = read_values_file($ARGV[0]);
-
-
- # Write the file inline by copying everything before a demarcation
- # line, and putting the generated data after the demarcation
-
-if ($opt_i) {
-
- open(IN,$opt_i) || die "Can't open input file $opt_i";
-
- while(<IN>){
- if (/<insert_code_here>/){
- insert_code();
- } else {
- print;
- }
-
-
- }
-}
-
-sub insert_code
-{
- # Map type names to the value in the icalvalue_impl data union */
-
-%union_map = (
- BOOLEAN => 'int',
- CALADDRESS=>'string',
- DATE=>'time',
- DATETIME=>'time',
- DATETIMEDATE=>'time',
- DATETIMEPERIOD=>'period',
- DURATION=>'duration',
- INTEGER=>'int',
- TEXT=>'string',
- URI=>'string',
- UTCOFFSET=>'int',
- QUERY=>'string',
- BINARY=>'string',
- X=>'string'
- );
-
-
-if($opt_h){
-
- # First print out the value enumerations
- $idx = 5000;
- print "typedef enum icalvalue_kind {\n";
- print " ICAL_ANY_VALUE=$idx,\n";
-
- foreach $value (keys %h) {
-
- $idx++;
- my $ucv = join("",map {uc(lc($_));} split(/-/,$value));
-
- next if $value eq "NO";
-
- print " ICAL_${ucv}_VALUE=$idx,\n";
- }
-
- $idx++;
- print " ICAL_NO_VALUE=$idx\n} icalvalue_kind ;\n\n";
-
- # Now create enumerations for property values
- $idx = 10000;
-
- print "#define ICALPROPERTY_FIRST_ENUM $idx\n\n";
-
- foreach $value (sort keys %h) {
-
- next if !$value;
-
- next if $value eq 'NO' or $prop eq 'ANY';
-
- my $ucv = join("",map {uc(lc($_));} split(/-/,$value));
- my @enums = @{$h{$value}->{'enums'}};
-
- if(@enums){
-
- my ($c_autogen,$c_type) = @{$h{$value}->{'C'}};
- print "typedef $c_type {\n";
- my $first = 1;
-
- unshift(@enums,"X");
-
- push(@enums,"NONE");
-
- foreach $e (@enums) {
- if (!$first){
- print ",\n";
- } else {
- $first = 0;
- }
-
- my $uce = join("",map {uc(lc($_));} split(/-/,$e));
-
- print " ICAL_${ucv}_${uce} = $idx";
-
- $idx++;
- }
-
- $c_type =~ s/enum //;
-
- print "\n} $c_type;\n\n";
- }
- }
-
- print "#define ICALPROPERTY_LAST_ENUM $idx\n\n";
-
-}
-
-
-if($opt_c){
-
- # print out the value to string map
-
- my $count = scalar(keys %h) + 1;
- print "static struct icalvalue_kind_map value_map[$count]={\n";
-
- foreach $value (keys %h) {
-
- $idx++;
- my $ucv = join("",map {uc(lc($_));} split(/-/,$value));
-
- next if $value eq "NO";
-
- print " {ICAL_${ucv}_VALUE,\"$value\"},\n";
- }
-
-
- print " {ICAL_NO_VALUE,\"\"}\n};";
-
-}
-
-
-foreach $value (keys %h) {
-
- my $autogen = $h{$value}->{C}->[0];
- my $type = $h{$value}->{C}->[1];
-
- my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$value));
-
- my $lc = lc($ucf);
- my $uc = uc($lc);
-
- my $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/;
- my $pointer_check_rv = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/;
-
- my $assign;
-
- if ($type =~ /char/){
- $assign = "icalmemory_strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n";
- } else {
- $assign = "v;";
- }
-
- my $union_data;
-
- if(@{$h{$value}->{'enums'}}){
- $union_data = 'enum';
-
- } elsif (exists $union_map{$uc} ){
- $union_data=$union_map{$uc};
- } else {
- $union_data = $lc;
- }
-
- if ($opt_c && $autogen) {
-
- print "\n\n\
-icalvalue* icalvalue_new_${lc} ($type v){\
- struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\
- $pointer_check\
- icalvalue_set_${lc}((icalvalue*)impl,v);\
- return (icalvalue*)impl;\
-}\
-void icalvalue_set_${lc}(icalvalue* value, $type v) {\
- struct icalvalue_impl* impl; \
- icalerror_check_arg_rv( (value!=0),\"value\");\
- $pointer_check_rv\
- icalerror_check_value_type(value, ICAL_${uc}_VALUE);\
- impl = (struct icalvalue_impl*)value;\n";
-
- if( $union_data eq 'string') {
-
- print " if(impl->data.v_${union_data}!=0) {free((void*)impl->data.v_${union_data});}\n";
- }
-
-
- print "\n\
- impl->data.v_$union_data = $assign \n\
- icalvalue_reset_kind(impl);\n}\n";
-
- print "$type\ icalvalue_get_${lc}(const icalvalue* value)\ {\n\
- icalerror_check_arg( (value!=0),\"value\");\
- icalerror_check_value_type(value, ICAL_${uc}_VALUE);\
- return ((struct icalvalue_impl*)value)->data.v_${union_data};\n}\n";
-
-
- } elsif($opt_h && $autogen) {
-
- print "\n /* $value */ \
-icalvalue* icalvalue_new_${lc}($type v); \
-$type icalvalue_get_${lc}(const icalvalue* value); \
-void icalvalue_set_${lc}(icalvalue* value, ${type} v);\n\n";
-
- }
-
-}
-
-
-if ($opt_h){
- print "#endif /*ICALVALUE_H*/\n";
- }
-
-
-}
diff --git a/libical/scripts/mkinclude.sh b/libical/scripts/mkinclude.sh
deleted file mode 100644
index a77c8d74a8..0000000000
--- a/libical/scripts/mkinclude.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-#
-# Given a list of headers, combine them into one, excluding certain lines
-#
-OUTFILE="/dev/stdout"
-COMBINEDHEADERS=""
-EXCLUDES=""
-
-while [ $# -gt 0 ]
-do
- case $1 in
- -o) OUTFILE=$2; shift;;
- -e) EXCLUDES="$EXCLUDES $2"; shift;;
- *) COMBINEDHEADERS="$COMBINEDHEADERS $1";
- esac
- shift
-done
-
-echo '#ifdef __cplusplus' > $OUTFILE
-echo 'extern "C" {' >> $OUTFILE
-echo '#endif' >> $OUTFILE
-echo '/*' >> $OUTFILE
-echo " \$Id\$" >> $OUTFILE
-echo '*/' >> $OUTFILE
-cat $COMBINEDHEADERS >> file.temp1
-for exclude in $EXCLUDES
-do
- cp file.temp1 file.temp2
- egrep -v "$exclude" file.temp2 > file.temp1
-done
-cat file.temp1 >> $OUTFILE
-rm -f file.temp1
-rm -f file.temp2
-echo '#ifdef __cplusplus' >> $OUTFILE
-echo '};' >> $OUTFILE
-echo '#endif' >> $OUTFILE
-
-
diff --git a/libical/scripts/mkneticali.pl b/libical/scripts/mkneticali.pl
deleted file mode 100755
index 937de49908..0000000000
--- a/libical/scripts/mkneticali.pl
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/local/bin/perl
-
-$pr = 1;
-$ignore = 0;
-
-
-print<<EOM;
-/* -*- 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
-
-%{
-#include "ical.h"
-
-#include <sys/types.h> /* for size_t */
-#include <time.h>
-
-%}
-
-EOM
-
-foreach $f (@ARGV)
-{
- @f = split(/\//,$f);
- $fn = pop(@f);
-
- $fn=~/pvl/ && next;
- $fn=~/sspm/ && next;
- $fn=~/cstp/ && next;
- $fn=~/csdb/ && next;
- $fn=~/vcal/ && next;
- $fn=~/yacc/ && next;
- $fn=~/lex/ && next;
-
- print "\n/**********************************************************************\n";
-
- print "\t$fn\n";
- print "**********************************************************************/\n\n";
-
-
- open F, $f;
-
- while(<F>){
-
- s/^#.*//;
-
- s/\/\*.*\*\///;
-
- /^\/\// && next;
-
- next if /^$/;
-
- if(/\/\*/){ $pr = 0;}
-
- /icalparser_parse\(/ and $ignore = 1;
- /vanew/ and $ignore = 1;
- /_stub/ and $ignore = 1;
- /_response/ and $ignore = 1;
- /line_gen_func/ and $ignore = 1;
- /extern/ and $ignore = 1;
- /sspm/ and $ignore = 1;
- /icalrecur/ and $ignore = 1;
-
- if ($pr == 1 && $ignore == 0){
- print ;
- }
-
-
- if(/\*\//){ $pr = 1;}
-
- if (/\;/){ $ignore = 0; }
-
- }
-
-}
-
-
diff --git a/libical/scripts/mkparameterrestrictions.pl b/libical/scripts/mkparameterrestrictions.pl
deleted file mode 100755
index 2c57eb4ca5..0000000000
--- a/libical/scripts/mkparameterrestrictions.pl
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/perl
-
-# Version: 1.0
-# Script last updated: 30May1999 GMD
-# Change log:
-# <none>
-
-
-# usually open params-in-prop.txt
-open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!";
-
-print <<EOM;
-/*
- ======================================================================
- File: parameterrestrictions.c
-
- (C) COPYRIGHT 1999 Graham Davison
- mailto:g.m.davison\@computer.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.
-
-
- ======================================================================*/
-
-/*
- * THIS FILE IS MACHINE GENERATED DO NOT EDIT
- */
-
-
-int icalrestriction_is_parameter_allowed(icalproperty_kind prop,icalparameter_kind param)
-{
- switch (prop)
- {
-EOM
-
-while(<F>)
-{
- chop;
-
- # split line by whitespace
- my @v = split(/\s+/,$_);
- # property is first item on line
- my $prop = shift @v;
- my $prop_name = $prop;
- if (substr($prop,0,1) eq "X") { $prop = "X"; }
- $prop = join("",split(/-/,$prop));
-
-print <<EOM;
-
- /* ${prop_name} */
- case ICAL_${prop}_PROPERTY:
- switch (param)
- {
-EOM
-
- foreach $param (@v)
- {
- $param = join("",split(/-/,$param));
- print "\t\t\t\tcase ICAL_${param}_PARAMETER:\n";
- }
-
-print <<EOM;
- return 1;
- default:
- return 0;
- }
-
-EOM
-
-}
-
-print <<EOM;
- }
-
- return 0;
-}
-EOM
diff --git a/libical/scripts/mkrestrictionrecords.pl b/libical/scripts/mkrestrictionrecords.pl
deleted file mode 100755
index dd28d77708..0000000000
--- a/libical/scripts/mkrestrictionrecords.pl
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env perl
-
-# Version: 1.0
-# Script last updated: 30May1999 GMD
-# Change log:
-# <none>
-
-# usually open restrictions.csv
-open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!";
-
-print <<EOM;
-/*
- ======================================================================
- File: restrictionrecords.c
-
- (C) COPYRIGHT 1999 Graham Davison
- mailto:g.m.davison\@computer.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.
-
-
- ======================================================================*/
-
-
-/*
- * THIS FILE IS MACHINE GENERATED DO NOT EDIT
- */
-
-
-typedef struct icalrestriction_record {
- icalproperty_method method;
- icalcomponent_kind component;
- icalproperty_kind property;
- icalcomponent_kind subcomponent;
- icalrestriction_kind restriction;
-} icalrestriction_record;
-
-
-icalrestriction_record icalrestriction_records[] =
-{
-EOM
-
-my $last_method = "";
-my $last_component = "";
-my $last_property = "";
-my $need_header = 0;
-
-while(<F>)
-{
- chop;
-
- # split line at commas
- my ($method,$component,$property,$subcomponent,$restriction)=split(/\,/,$_);
-
- #
- #put in code to generate comments here!
- #
- if ($method ne $last_method)
- {
- $need_header = 1;
- $last_method = $method;
- }
- if ($component ne $last_component)
- {
- $need_header = 1;
- $last_component = $component;
- }
-
- if ($need_header)
- {
- print "\n\t/* METHOD: ${method}, COMPONENT: ${component} */\n";
- $need_header = 0;
- }
-
- foreach $item ($component,$property,$subcomponent,$restriction)
- {
- # handle special cases.
- if ($item eq "NONE")
- { $item = "NO"; }
- else { if (substr($item,0,1) eq "X")
- { $item = "X"; }}
-
- # strip out dashes
- $item = join("",split(/-/,$item));
- }
- # strip leading V from component names
- $component =~ s/^(V?)(\w+?)((SAVINGS)?)((TIME)?)$/$2/;
- $subcomponent =~ s/^V(\w+)/$1/;
-
- print "\t\{ICAL_METHOD_${method},ICAL_${component}_COMPONENT,";
- print "ICAL_${property}_PROPERTY,ICAL_${subcomponent}_COMPONENT,";
- print "ICAL_RESTRICTION_${restriction}\},\n";
-
-}
-
-print <<EOM;
-
- /* END */
- {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}
-};
-EOM
diff --git a/libical/scripts/mkrestrictiontable.pl b/libical/scripts/mkrestrictiontable.pl
deleted file mode 100755
index e02c55b2f9..0000000000
--- a/libical/scripts/mkrestrictiontable.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env perl
-
-use Getopt::Std;
-getopts('i:');
-
-# the argument should be the path to the restriction datafile, usually
-# design-data/restrictions.csv
-open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!";
-
-# Write the file inline by copying everything before a demarcation
-# line, and putting the generated data after the demarcation
-
-if ($opt_i) {
-
- open(IN,$opt_i) || die "Can't open input file $opt_i";
-
- while(<IN>){
-
- if (/Do not edit/){
- last;
- }
-
- print;
-
- }
-
- print "/* Everything below this line is machine generated. Do not edit. */\n";
-
-
- close IN;
-}
-
-# First build the property restriction table
-print "icalrestriction_property_record icalrestriction_property_records[] = {\n";
-
-while(<F>)
-{
-
- chop;
-
- s/\#.*$//;
-
- my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_);
-
- next if !$method;
-
- if(!$sub) {
- $sub = "0";
- } else {
- $sub = "icalrestriction_".$sub;
- }
-
- if($prop ne "NONE"){
- print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub},\n");
- }
-
-}
-
-
-# Print the terminating line
-print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE}\n";
-
-print "};\n";
-
-print "icalrestriction_component_record icalrestriction_component_records[] = {\n";
-
-
-# Go back through the entire file and build the component restriction table
-close(F);
-open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!";
-
-while(<F>)
-{
-
- chop;
-
- s/\#.*$//;
-
- my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_);
-
- next if !$method;
-
- if(!$sub) {
- $sub = "0";
- } else {
- $sub = "icalrestriction_".$sub;
- }
-
-
- if($subcomp ne "NONE"){
- print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr},$sub\},\n");
- }
-
-}
-
-# print the terminating line
-print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}\n";
-print "};\n";
diff --git a/libical/scripts/readvaluesfile.pl b/libical/scripts/readvaluesfile.pl
deleted file mode 100644
index cb40db84ff..0000000000
--- a/libical/scripts/readvaluesfile.pl
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-sub read_values_file {
-
- my $path = shift;
- my %h;
-
- open(F,$path) || die "Can't open values file $path";
-
- while(<F>){
-
- chop;
-
- s/#.*$//g;
- s/\"//g;
- s/\r//g;
-
- next if ! $_;
-
- @column = split(/,/,$_);
-
- my $value_name = $column[0];
-
- my $c_type_str = $column[1];
- my $c_autogen = ($c_type_str =~ /\(a\)/);
-
- my $c_type = $c_type_str;
- $c_type =~ s/\(.\)//;
-
- my $python_type = $column[2];
- my $components = $column[3];
- my $enum_values = $column[4];
-
- my @components;
- if($components ne "unitary"){
- @components = split(/;/,$components);
- } else {
- @components = ();
- }
-
- my @enums;
- if($enum_values) {
- @enums = split(/;/,$enum_values);
-
- } else {
- @enums = ();
- }
-
- $h{$value_name} = { C => [$c_autogen,$c_type],
- perl => $perl_type,
- python => $python_type,
- components=>[@components],
- enums=>[@enums]
- };
- }
-
- return %h;
-}
-
-sub read_properties_file {
-
- my $path = shift;
- my %h;
-
- open(F,$path) || die "Can't open properties file $path";
-
- while(<F>){
-
- chop;
-
- s/#.*$//g;
- s/\"//g;
- s/\r//g;
-
- next if ! $_;
-
- @column = split(/,/,$_);
-
- my $property_name = $column[0];
-
- my $lic_value = $column[1];
- my $default_value = $column[2];
-
- $h{$property_name} = { lic_value => $lic_value,
- default_value => $default_value
- };
- }
-
- return %h;
-}
-
-sub read_parameters_file {
-
- my $path = shift;
- my %h;
-
- open(F,$path) || die "Can't open parameters file $path";
-
- while(<F>){
-
- chop;
-
- s/#.*$//g;
- s/\"//g;
- s/\r//g;
-
- next if ! $_;
-
- @column = split(/\,/,$_);
-
- my $parameter_name = $column[0];
-
- my $data_type = $column[1];
- my $enum_string = $column[2];
-
- my @enums;
- if($enum_string){
- @enums = split(/;/,$enum_string);
- }
-
- $h{$parameter_name} = { C => $data_type,
- enums => [@enums]
- };
- }
-
- close(F);
-
- return %h;
-}
-
-
-
-1;
diff --git a/libical/src/.cvsignore b/libical/src/.cvsignore
deleted file mode 100644
index dc4caac801..0000000000
--- a/libical/src/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/src/Makefile.am b/libical/src/Makefile.am
deleted file mode 100644
index 5e5cd331db..0000000000
--- a/libical/src/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-if WITH_PYTHON
-PYTHON_DIR = python
-else
-PYTHON_DIR =
-endif
-
-if WITH_JAVA
-JAVA_DIR = java
-else
-JAVA_DIR =
-endif
-
-if WITH_CAP
-LIBICALCAP_DIR = libicalcap
-else
-LIBICALCAP_DIR =
-endif
-
-SUBDIRS = libical libicalss $(LIBICALCAP_DIR) libicalvcal $(PYTHON_DIR) $(JAVA_DIR) test
diff --git a/libical/src/Net-ICal-Libical/MANIFEST b/libical/src/Net-ICal-Libical/MANIFEST
deleted file mode 100644
index 1a6880e8b4..0000000000
--- a/libical/src/Net-ICal-Libical/MANIFEST
+++ /dev/null
@@ -1,16 +0,0 @@
-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
deleted file mode 100644
index f46c61bc02..0000000000
--- a/libical/src/Net-ICal-Libical/Makefile.PL
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/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
deleted file mode 100644
index b4b4b9c8b9..0000000000
--- a/libical/src/Net-ICal-Libical/README
+++ /dev/null
@@ -1,7 +0,0 @@
-
-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
deleted file mode 100644
index a9b15f3855..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm
+++ /dev/null
@@ -1,386 +0,0 @@
-#!/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
deleted file mode 100644
index c25297c111..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/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
deleted file mode 100644
index 13ec9c437e..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm
+++ /dev/null
@@ -1,160 +0,0 @@
-#=============================================================================
-#
-# 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
deleted file mode 100644
index ecf29f3370..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm
+++ /dev/null
@@ -1,359 +0,0 @@
-#!/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
deleted file mode 100644
index 0aef347c43..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/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
deleted file mode 100644
index 76969ac60d..0000000000
--- a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm
+++ /dev/null
@@ -1,468 +0,0 @@
-#!/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
deleted file mode 100644
index 9d380dcec1..0000000000
--- a/libical/src/Net-ICal-Libical/netical.i
+++ /dev/null
@@ -1,317 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 32eee6f80b..0000000000
--- a/libical/src/Net-ICal-Libical/netical_wrap.c
+++ /dev/null
@@ -1,3054 +0,0 @@
-/*
- * 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.2 2003/10/21 18:28:33 ettore
- * Merge new-ui-branch to the trunk.
- *
- * Revision 1.1.2.1 2003/09/23 19:43:57 ettore
- * Sync with trunk, and fixicate a bit so it still works.
- *
- * 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
deleted file mode 100644
index 41616c00da..0000000000
--- a/libical/src/Net-ICal-Libical/netical_wrap.doc
+++ /dev/null
@@ -1,393 +0,0 @@
-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
deleted file mode 100644
index 919bfc423f..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/2446.mime
+++ /dev/null
@@ -1,3426 +0,0 @@
-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
deleted file mode 100644
index aa0efce1b4..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/error
+++ /dev/null
@@ -1,58 +0,0 @@
-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
deleted file mode 100644
index 5fb7c55c82..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/mail-examples
+++ /dev/null
@@ -1,262 +0,0 @@
-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
deleted file mode 100644
index f5b5ce995d..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/no-error
+++ /dev/null
@@ -1,26 +0,0 @@
-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
deleted file mode 100644
index f225f26331..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/rfc2445.ics
+++ /dev/null
@@ -1,321 +0,0 @@
-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
deleted file mode 100644
index 8bf5c7e8f3..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/rfc2446.ics
+++ /dev/null
@@ -1,1004 +0,0 @@
-
-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
deleted file mode 100644
index 6a368d9997..0000000000
--- a/libical/src/Net-ICal-Libical/test-data/single-with-error
+++ /dev/null
@@ -1,39 +0,0 @@
-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
deleted file mode 100644
index 2fdaf41d65..0000000000
--- a/libical/src/Net-ICal-Libical/test/component.pl
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/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
deleted file mode 100755
index 9499dd9850..0000000000
--- a/libical/src/Net-ICal-Libical/test/libical.pl
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/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
deleted file mode 100755
index 939f5ce936..0000000000
--- a/libical/src/Net-ICal-Libical/test/swig.pl
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/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";
diff --git a/libical/src/java/.cvsignore b/libical/src/java/.cvsignore
deleted file mode 100644
index 282522db03..0000000000
--- a/libical/src/java/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/libical/src/java/ICalDurationType.java b/libical/src/java/ICalDurationType.java
deleted file mode 100644
index 2dcc23442e..0000000000
--- a/libical/src/java/ICalDurationType.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*======================================================================
- FILE: ICalDurationType.java
- CREATOR: structConverter 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-/** struct icaldurationtype */
-public class ICalDurationType
-{
- /**
- * Constructor for pre-existing native icaldurationtype.
- * @param obj c++ pointer
- */
- ICalDurationType(long obj)
- {
- init(obj);
- }
-
- /**
- * Constructor for default ICalDurationType
- */
- public ICalDurationType()
- {
- }
-
- public void setIs_neg(int lcl_arg0)
- {
- is_neg = lcl_arg0;
- }
- public int getIs_neg()
- {
- return is_neg;
- }
-
- public void setDays(long lcl_arg0)
- {
- days = lcl_arg0;
- }
- public long getDays()
- {
- return days;
- }
-
- public void setWeeks(long lcl_arg0)
- {
- weeks = lcl_arg0;
- }
- public long getWeeks()
- {
- return weeks;
- }
-
- public void setHours(long lcl_arg0)
- {
- hours = lcl_arg0;
- }
- public long getHours()
- {
- return hours;
- }
-
- public void setMinutes(long lcl_arg0)
- {
- minutes = lcl_arg0;
- }
- public long getMinutes()
- {
- return minutes;
- }
-
- public void setSeconds(long lcl_arg0)
- {
- seconds = lcl_arg0;
- }
- public long getSeconds()
- {
- return seconds;
- }
-
- // --------------------------------------------------------
- // Initialization
- // --------------------------------------------------------
-
- /**
- * native code inits from an existing struct.
- */
- private native void init(long aDuration);
-
- /**
- * optimization: init field id cache,
- */
- private native static void initFIDs();
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- initFIDs();
- }
-
- // --------------------------------------------------------
- // Fields
- // --------------------------------------------------------
-
- private int is_neg;
- private long days; // unsigned int
- private long weeks; // unsigned int
- private long hours; // unsigned int
- private long minutes; // unsigned int
- private long seconds; // unsigned int
-}
diff --git a/libical/src/java/ICalParameter.java b/libical/src/java/ICalParameter.java
deleted file mode 100644
index 74bf3db84e..0000000000
--- a/libical/src/java/ICalParameter.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*======================================================================
- FILE: ICalParameter.java
- CREATOR: gnorman 01/09/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class ICalParameter
-{
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalParameterKind
- {
- // icalparameter_kind
- int ICAL_ANY_PARAMETER = 0;
- int ICAL_ALTREP_PARAMETER = 1;
- int ICAL_CN_PARAMETER = 2;
- int ICAL_CUTYPE_PARAMETER = 3;
- int ICAL_DELEGATEDFROM_PARAMETER = 4;
- int ICAL_DELEGATEDTO_PARAMETER = 5;
- int ICAL_DIR_PARAMETER = 6;
- int ICAL_ENCODING_PARAMETER = 7;
- int ICAL_FBTYPE_PARAMETER = 8;
- int ICAL_FMTTYPE_PARAMETER = 9;
- int ICAL_LANGUAGE_PARAMETER = 10;
- int ICAL_MEMBER_PARAMETER = 11;
- int ICAL_PARTSTAT_PARAMETER = 12;
- int ICAL_RANGE_PARAMETER = 13;
- int ICAL_RELATED_PARAMETER = 14;
- int ICAL_RELTYPE_PARAMETER = 15;
- int ICAL_RIGHTREF_PARAMETER = 16;
- int ICAL_ROLE_PARAMETER = 17;
- int ICAL_RSVP_PARAMETER = 18;
- int ICAL_SENTBY_PARAMETER = 19;
- int ICAL_TZID_PARAMETER = 20;
- int ICAL_VALUE_PARAMETER = 21;
- int ICAL_WKST_PARAMETER = 22;
- int ICAL_X_PARAMETER = 23;
- int ICAL_XLICCOMPARETYPE_PARAMETER = 24;
- int ICAL_XLICERRORTYPE_PARAMETER = 25;
- int ICAL_NO_PARAMETER = 26;
- }
-
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalParameterEncoding
- {
- // icalparameter_encoding
- int ICAL_ENCODING_X = 20007;
- int ICAL_ENCODING_8BIT = 20008;
- int ICAL_ENCODING_BASE64 = 20009;
- int ICAL_ENCODING_NONE = 20010;
- }
-
- public interface ICalParameterPartStat {
- int ICAL_PARTSTAT_X = 20017;
- int ICAL_PARTSTAT_NEEDSACTION = 20018;
- int ICAL_PARTSTAT_ACCEPTED = 20019;
- int ICAL_PARTSTAT_DECLINED = 20020;
- int ICAL_PARTSTAT_TENTATIVE = 20021;
- int ICAL_PARTSTAT_DELEGATED = 20022;
- int ICAL_PARTSTAT_COMPLETED = 20023;
- int ICAL_PARTSTAT_INPROCESS = 20024;
- int ICAL_PARTSTAT_NONE = 20025;
- }
-
- public interface ICalParameterRole {
- int ICAL_ROLE_X = 20047;
- int ICAL_ROLE_CHAIR = 20048;
- int ICAL_ROLE_REQPARTICIPANT = 20049;
- int ICAL_ROLE_OPTPARTICIPANT = 20050;
- int ICAL_ROLE_NONPARTICIPANT = 20051;
- int ICAL_ROLE_NONE = 20052;
- }
-
- /**
- * Constructor for ICalParameter
- * @param obj c++ pointer
- */
- private ICalParameter(long obj)
- {
- init(obj);
- }
-
- /**
- * Constructor for ICalParameter
- */
- public ICalParameter()
- {
- init();
- }
-
- /**
- * Create instance from a string of form "PARAMNAME=VALUE"
- */
- public ICalParameter(String str)
- {
- init(str);
- }
-
- /**
- * Create from just the value, the part after the "="
- */
- public ICalParameter(/* ICalParameterKind */ int kind, String str)
- {
- init(kind,str);
- }
-
- /**
- * Create empty value for specified kind
- */
- public ICalParameter(/* ICalParameterKind */ int kind)
- {
- init(kind);
- }
-
- /**
- * Return ical String representation
- */
- public native String as_ical_string();
-
- /**
- * Return true if this instance is valid
- */
- //public native boolean is_valid();
-
- /**
- * Return what kind of parameter this instance represents
- */
- public native /* ICalParameterKind */ int isa();
-
- /**
- * Return true if this is a parameter
- */
- public native boolean isa_parameter(Object parameter);
-
- /* Convert enumerations */
- //public native static String kind_to_string(/* ICalParameterKind */ int kind);
- //public native static /* ICalParameterKind */ int string_to_kind(String str);
-
- /* DELEGATED-FROM */
- //public native String get_delegatedfrom();
- //public native void set_delegatedfrom(String v);
-
- /* RELATED */
- //public native icalparameter_related get_related();
- //public native void set_related(icalparameter_related v);
-
- /* SENT-BY */
- //public native String get_sentby();
- //public native void set_sentby(String v);
-
- /* LANGUAGE */
- public native String get_language();
- public native void set_language(String v);
-
- /* RELTYPE */
- //public native icalparameter_reltype get_reltype();
- //public native void set_reltype(icalparameter_reltype v);
-
- /* ENCODING */
- public native /* ICalParameterEncoding */ int get_encoding();
- public native void set_encoding(/* ICalParameterEncoding */ int v);
-
- /* ALTREP */
- //public native String get_altrep();
- //public native void set_altrep(String v);
-
- /* FMTTYPE */
- //public native String get_fmttype();
- //public native void set_fmttype(String v);
-
- /* FBTYPE */
- //public native icalparameter_fbtype get_fbtype();
- //public native void set_fbtype(icalparameter_fbtype v);
-
- /* RSVP */
- //public native icalparameter_rsvp get_rsvp();
- //public native void set_rsvp(icalparameter_rsvp v);
-
- /* RANGE */
- //public native icalparameter_range get_range();
- //public native void set_range(icalparameter_range v);
-
- /* DELEGATED-TO */
- //public native String get_delegatedto();
- //public native void set_delegatedto(String v);
-
- /* CN */
- //public native String get_cn();
- //public native void set_cn(String v);
-
- /* ROLE */
- public native /* ICalParameterRole */ int get_role();
- public native void set_role(/* ICalParameterRole */ int v);
-
- /* X-LIC-COMPARETYPE */
- //public native icalparameter_xliccomparetype get_xliccomparetype();
- //public native void set_xliccomparetype(icalparameter_xliccomparetype v);
-
- /* PARTSTAT */
- public native /* ICalParameterPartStat */ int get_partstat();
- public native void set_partstat(/* ICalParameterPartStat */ int v);
-
- /* X-LIC-ERRORTYPE */
- //public native icalparameter_xlicerrortype get_xlicerrortype();
- //public native void set_xlicerrortype(icalparameter_xlicerrortype v);
-
- /* MEMBER */
- //public native String get_member();
- //public native void set_member(String v);
-
- /* X */
- //public native String get_x();
- //public native void set_x(String v);
-
- /* CUTYPE */
- //public native icalparameter_cutype get_cutype();
- //public native void set_cutype(icalparameter_cutype v);
-
- /* TZID */
- //public native String get_tzid();
- //public native void set_tzid(String v);
-
- /* VALUE */
- //public native /* ICalParameterValue */ int get_value();
- //public native void set_value(/* ICalParameterValue */ int v);
-
- /* DIR */
- //public native String get_dir();
- //public native void set_dir(String v);
-
- /**
- * init the native class
- */
- private void init(long obj)
- {
- m_Obj = obj;
- }
-
- private native void init();
- private native void init(String str);
- private native void init(/* ICalParameterKind */ int kind, String str);
- private native void init(/* ICalParameterKind */ int kind);
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- }
-
- public static void main(String[] args)
- {
- System.out.println("*** ICalParameter main called ok.");
- }
-
- /** pointer to C++ object */
- private long m_Obj = 0;
-}
diff --git a/libical/src/java/ICalPeriodType.java b/libical/src/java/ICalPeriodType.java
deleted file mode 100644
index 204ff2a141..0000000000
--- a/libical/src/java/ICalPeriodType.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*======================================================================
- FILE: ICalPeriodType.java
- CREATOR: structConverter 01/11/02
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class ICalPeriodType
-{
- public ICalPeriodType(long obj)
- {
- init(obj);
- }
-
- public ICalPeriodType()
- {
- }
-
- public ICalPeriodType(long aStart, long aEnd, long aDuration)
- {
- init(aStart, aEnd, aDuration);
- }
-
- public void setStart(ICalTimeType lcl_arg0)
- {
- start = lcl_arg0;
- }
- public ICalTimeType getStart()
- {
- return start;
- }
-
- public void setEnd(ICalTimeType lcl_arg0)
- {
- end = lcl_arg0;
- }
- public ICalTimeType getEnd()
- {
- return end;
- }
-
- public void setDuration(ICalDurationType lcl_arg0)
- {
- duration = lcl_arg0;
- }
- public ICalDurationType getDuration()
- {
- return duration;
- }
-
- private void init(long aStart, long aEnd, long aDuration)
- {
- start = new ICalTimeType(aStart);
- end = new ICalTimeType(aEnd);
- duration = new ICalDurationType(aDuration);
- }
-
- private native void init(long obj);
-
- private native static void initFIDs();
-
- static {
- System.loadLibrary("ical_jni");
- initFIDs();
- }
-
- private ICalTimeType start = new ICalTimeType();
- private ICalTimeType end = new ICalTimeType();
- private ICalDurationType duration = new ICalDurationType();
-}
-
diff --git a/libical/src/java/ICalProperty.java b/libical/src/java/ICalProperty.java
deleted file mode 100644
index 02bb2912f1..0000000000
--- a/libical/src/java/ICalProperty.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*======================================================================
- FILE: ICalProperty.java
- CREATOR: gnorman 01/09/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class ICalProperty
-{
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalPropertyMethod
- {
- // icalproperty_method
- int ICAL_METHOD_X = 10011;
- int ICAL_METHOD_PUBLISH = 10012;
- int ICAL_METHOD_REQUEST = 10013;
- int ICAL_METHOD_REPLY = 10014;
- int ICAL_METHOD_ADD = 10015;
- int ICAL_METHOD_CANCEL = 10016;
- int ICAL_METHOD_REFRESH = 10017;
- int ICAL_METHOD_COUNTER = 10018;
- int ICAL_METHOD_DECLINECOUNTER = 10019;
- int ICAL_METHOD_CREATE = 10020;
- int ICAL_METHOD_READ = 10021;
- int ICAL_METHOD_RESPONSE = 10022;
- int ICAL_METHOD_MOVE = 10023;
- int ICAL_METHOD_MODIFY = 10024;
- int ICAL_METHOD_GENERATEUID = 10025;
- int ICAL_METHOD_DELETE = 10026;
- int ICAL_METHOD_NONE = 10027;
- }
-
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalPropertyAction
- {
- // icalproperty_action
- int ICAL_ACTION_X = 10000;
- int ICAL_ACTION_AUDIO = 10001;
- int ICAL_ACTION_DISPLAY = 10002;
- int ICAL_ACTION_EMAIL = 10003;
- int ICAL_ACTION_PROCEDURE = 10004;
- int ICAL_ACTION_NONE = 10005;
- }
-
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalPropertyKind
- {
- // icalproperty_kind
- int ICAL_ANY_PROPERTY = 0;
- int ICAL_ACTION_PROPERTY=1;
- int ICAL_ALLOWCONFLICT_PROPERTY=2;
- int ICAL_ATTACH_PROPERTY=3;
- int ICAL_ATTENDEE_PROPERTY=4;
- int ICAL_CALID_PROPERTY=5;
- int ICAL_CALMASTER_PROPERTY=6;
- int ICAL_CALSCALE_PROPERTY=7;
- int ICAL_CARID_PROPERTY=8;
- int ICAL_CATEGORIES_PROPERTY=9;
- int ICAL_CLASS_PROPERTY=10;
- int ICAL_COMMENT_PROPERTY=11;
- int ICAL_COMPLETED_PROPERTY=12;
- int ICAL_CONTACT_PROPERTY=13;
- int ICAL_CREATED_PROPERTY=14;
- int ICAL_DATEFORMAT_PROPERTY=15;
- int ICAL_DECREED_PROPERTY=16;
- int ICAL_DEFAULTCHARSET_PROPERTY=17;
- int ICAL_DEFAULTLOCALE_PROPERTY=18;
- int ICAL_DEFAULTTZID_PROPERTY=19;
- int ICAL_DESCRIPTION_PROPERTY=20;
- int ICAL_DTEND_PROPERTY=21;
- int ICAL_DTSTAMP_PROPERTY=22;
- int ICAL_DTSTART_PROPERTY=23;
- int ICAL_DUE_PROPERTY=24;
- int ICAL_DURATION_PROPERTY=25;
- int ICAL_EXDATE_PROPERTY=26;
- int ICAL_EXPAND_PROPERTY=27;
- int ICAL_EXRULE_PROPERTY=28;
- int ICAL_FREEBUSY_PROPERTY=29;
- int ICAL_GEO_PROPERTY=30;
- int ICAL_GRANT_PROPERTY=31;
- int ICAL_LASTMODIFIED_PROPERTY=32;
- int ICAL_LOCATION_PROPERTY=33;
- int ICAL_MAXRESULTS_PROPERTY=34;
- int ICAL_MAXRESULTSSIZE_PROPERTY=35;
- int ICAL_METHOD_PROPERTY=36;
- int ICAL_ORGANIZER_PROPERTY=37;
- int ICAL_OWNER_PROPERTY=38;
- int ICAL_PERCENTCOMPLETE_PROPERTY=39;
- int ICAL_PRIORITY_PROPERTY=40;
- int ICAL_PRODID_PROPERTY=41;
- int ICAL_QUERY_PROPERTY=42;
- int ICAL_QUERYNAME_PROPERTY=43;
- int ICAL_RDATE_PROPERTY=44;
- int ICAL_RECURRENCEID_PROPERTY=45;
- int ICAL_RELATEDTO_PROPERTY=46;
- int ICAL_RELCALID_PROPERTY=47;
- int ICAL_REPEAT_PROPERTY=48;
- int ICAL_REQUESTSTATUS_PROPERTY=49;
- int ICAL_RESOURCES_PROPERTY=50;
- int ICAL_RRULE_PROPERTY=51;
- int ICAL_SCOPE_PROPERTY=52;
- int ICAL_SEQUENCE_PROPERTY=53;
- int ICAL_STATUS_PROPERTY=54;
- int ICAL_SUMMARY_PROPERTY=55;
- int ICAL_TARGET_PROPERTY=56;
- int ICAL_TIMEFORMAT_PROPERTY=57;
- int ICAL_TRANSP_PROPERTY=58;
- int ICAL_TRIGGER_PROPERTY=59;
- int ICAL_TZID_PROPERTY=60;
- int ICAL_TZNAME_PROPERTY=61;
- int ICAL_TZOFFSETFROM_PROPERTY=62;
- int ICAL_TZOFFSETTO_PROPERTY=63;
- int ICAL_TZURL_PROPERTY=64;
- int ICAL_UID_PROPERTY=65;
- int ICAL_URL_PROPERTY=66;
- int ICAL_VERSION_PROPERTY=67;
- int ICAL_X_PROPERTY=68;
- int ICAL_XLICCLASS_PROPERTY=69;
- int ICAL_XLICCLUSTERCOUNT_PROPERTY=70;
- int ICAL_XLICERROR_PROPERTY=71;
- int ICAL_XLICMIMECHARSET_PROPERTY=72;
- int ICAL_XLICMIMECID_PROPERTY=73;
- int ICAL_XLICMIMECONTENTTYPE_PROPERTY=74;
- int ICAL_XLICMIMEENCODING_PROPERTY=75;
- int ICAL_XLICMIMEFILENAME_PROPERTY=76;
- int ICAL_XLICMIMEOPTINFO_PROPERTY=77;
- int ICAL_NO_PROPERTY=78;
- }
-
- public interface ICalPropertyStatus
- {
- // icalproperty_status
- int ICAL_STATUS_X = 10028;
- int ICAL_STATUS_TENTATIVE = 10029;
- int ICAL_STATUS_CONFIRMED = 10030;
- int ICAL_STATUS_COMPLETED = 10031;
- int ICAL_STATUS_NEEDSACTION = 10032;
- int ICAL_STATUS_CANCELLED = 10033;
- int ICAL_STATUS_INPROCESS = 10034;
- int ICAL_STATUS_DRAFT = 10035;
- int ICAL_STATUS_FINAL = 10036;
- int ICAL_STATUS_NONE = 10037;
- }
-
- /**
- * Constructor for ICalProperty
- * @param obj c++ pointer
- */
- private ICalProperty(long obj)
- {
- init(obj);
- }
-
- public ICalProperty()
- {
- init();
- }
-
- public ICalProperty(String str)
- {
- init(str);
- }
-
- public ICalProperty(/* ICalPropertyKind */ int kind)
- {
- init(kind);
- }
-
- public native String as_ical_string();
- public native /* ICalPropertyKind */ int isa();
- public native boolean isa_property(Object property);
-
- public native void add_parameter(ICalParameter parameter);
- public native void set_parameter(ICalParameter parameter);
- public native void set_parameter_from_string(String name, String val);
- public native String get_parameter_as_string(String name);
- public native void remove_parameter(/* ICalParameterKind */ int kind);
- public native int count_parameters();
-
- /* Iterate through the parameters */
- public native ICalParameter get_first_parameter(/* ICalParameterKind */ int kind);
- public native ICalParameter get_next_parameter(/* ICalParameterKind */ int kind);
-
- /* Access the value of the property */
- public native void set_value(ICalValue val);
- public native void set_value_from_string(String val, String kind);
-
- public native ICalValue get_value();
- public native String get_value_as_string();
-
- /* Return the name of the property -- the type name converted to a
- String, or the value of get_x_name if the type is X property
- */
- public native String get_name();
-
- /* Deal with X properties */
- //static void set_x_name(ICalProperty prop, String name);
- //static String get_x_name(ICalProperty prop);
-
- //public native static /* ICalValueKind */ int icalparameter_value_to_value_kind(/* ICalParameterValue */ int val);
-
- /* Convert kinds to String and get default value type */
- //public native static /* ICalValueKind */ int kind_to_value_kind(/* ICalPropertyKind */ int kind);
- //public native static /* ICalValueKind */ int value_kind_to_kind(/* ICalValueKind */ int kind);
- //public native static String kind_to_string(/* ICalPropertyKind */ int kind);
- //public native static /* ICalPropertyKind */ int string_to_kind(String str);
-
- //public native static /* ICalPropertyMethod */ int string_to_method(String str);
- //public native static String method_to_string(/* ICalPropertyMethod */ int method);
-
- //public native static String enum_to_string(int e);
- //public native static int string_to_enum(String str);
-
- //public native static String status_to_string(/* ICalPropertyStatus */ int status);
- //public native static /* ICalPropertyStatus */ int string_to_status(String str);
-
- //public native static int enum_belongs_to_property(/* ICalPropertyKind */ int kind, int e);
-
- /* ACTION */
- public native void set_action(/* ICalPropertyAction */ int v);
- public native /* ICalPropertyAction */ int get_action();
-
- /* ATTACH */
- //void set_attach(struct icalattachtype v);
- //struct icalattachtype get_attach();
-
- /* ATTENDEE */
- public native void set_attendee(String val);
- public native String get_attendee();
-
- /* CALSCALE */
- //public native void set_calscale(String val);
- //public native String get_calscale();
-
- /* CATEGORIES */
- //public native void set_categories(String val);
- //public native String get_categories();
-
- /* CLASS */
- //public native void set_class(String val);
- //public native String get_class();
-
- /* COMMENT */
- public native void set_comment(String val);
- public native String get_comment();
-
- /* COMPLETED */
- //void set_completed(ICalTimeType val);
- //ICalTimeType get_completed();
-
- /* CONTACT */
- //public native void set_contact(String val);
- //public native String get_contact();
-
- /* CREATED */
- //void set_created(ICalTimeType val);
- //ICalTimeType get_created();
-
- /* DESCRIPTION */
- public native void set_description(String val);
- public native String get_description();
-
- /* DTEND */
- public native void set_dtend(ICalTimeType val);
- public native ICalTimeType get_dtend();
-
- /* DTSTAMP */
- public native void set_dtstamp(ICalTimeType val);
- public native ICalTimeType get_dtstamp();
-
- /* DTSTART */
- public native void set_dtstart(ICalTimeType val);
- public native ICalTimeType get_dtstart();
-
- /* DUE */
- public native void set_due(ICalTimeType val);
- public native ICalTimeType get_due();
-
- /* DURATION */
- public native void set_duration(ICalDurationType val);
- public native ICalDurationType get_duration();
-
- /* EXDATE */
- public native void set_exdate(ICalTimeType val);
- public native ICalTimeType get_exdate();
-
- /* EXRULE */
- public native void set_exrule(ICalRecurrenceType val);
- public native ICalRecurrenceType get_exrule();
-
- /* EXPAND */
- public void set_expand(int val) {} // @-@:p0 TMA TODO
- public int get_expand() {return 0;} // @-@:p0 TMA TODO
-
- /* FREEBUSY */
- public native void set_freebusy(ICalPeriodType val);
- public native ICalPeriodType get_freebusy();
-
- /* GEO */
- //void set_geo(struct icalgeotype val);
- //struct icalgeotype get_geo();
-
- /* LAST-MODIFIED */
- //void set_lastmodified(ICalTimeType val);
- //ICalTimeType get_lastmodified();
-
- /* LOCATION */
- public native void set_location(String val);
- public native String get_location();
-
- /* MAXRESULTS */
- //public native void set_maxresults(int val);
- //public native int get_maxresults();
-
- /* MAXRESULTSSIZE */
- //public native void set_maxresultsize(int val);
- //public native int get_maxresultsize();
-
- /* METHOD */
- public native void set_method(/* ICalPropertyMethod */ int val);
- public native /* ICalPropertyMethod */ int get_method();
-
- /* ORGANIZER */
- public native void set_organizer(String val);
- public native String get_organizer();
-
- /* OWNER */
- public native void set_owner(String val);
- public native String get_owner();
-
- /* PERCENT-COMPLETE */
- //void set_percentcomplete(int val);
- //int get_percentcomplete();
-
- /* PRIORITY */
- //void set_priority(int val);
- //int get_priority();
-
- /* PRODID */
- public native void set_prodid(String val);
- public native String get_prodid();
-
- /* QUERY */
- public native void set_query(String val);
- public native String get_query();
-
- /* QUERYNAME */
- public native void set_queryname(String val);
- public native String get_queryname();
-
- /* RDATE */
- //void set_rdate(struct icaldatetimeperiodtype val);
- //struct icaldatetimeperiodtype get_rdate();
-
- /* RECURRENCE-ID */
- public native void set_recurrenceid(ICalTimeType val);
- public native ICalTimeType get_recurrenceid();
-
- /* RELATED-TO */
- //public native void set_relatedto(String val);
- //public native String get_relatedto();
-
- /* RELCALID */
- public native void set_relcalid(String val);
- public native String get_relcalid();
-
- /* REPEAT */
- public native void set_repeat(int val);
- public native int get_repeat();
-
- /* REQUEST-STATUS */
- //public native void set_requeststatus(String val);
- //public native String get_requeststatus();
-
- /* RESOURCES */
- //public native void set_resources(String val);
- //public native String get_resources();
-
- /* RRULE */
- public native void set_rrule(ICalRecurrenceType val);
- public native ICalRecurrenceType get_rrule();
-
- /* SCOPE */
- //public native void set_scope(String val);
- //public native String get_scope();
-
- /* SEQUENCE */
- //public native void set_sequence(int val);
- //public native int get_sequence();
-
- /* STATUS */
- public native void set_status(/* ICalPropertyStatus */ int val);
- public native /* ICalPropertyStatus */ int get_status();
-
- /* SUMMARY */
- public native void set_summary(String val);
- public native String get_summary();
-
- /* TARGET */
- public native void set_target(String val);
- public native String get_target();
-
- /* TRANSP */
- //public native void set_transp(String val);
- //public native String get_transp();
-
- /* TRIGGER */
- public native void set_trigger(ICalTriggerType val);
- public native ICalTriggerType get_trigger();
-
- /* TZID */
- public native void set_tzid(String val);
- public native String get_tzid();
-
- /* TZNAME */
- //public native void set_tzname(String val);
- //public native String get_tzname();
-
- /* TZOFFSETFROM */
- //public native void set_tzoffsetfrom(int val);
- //public native int get_tzoffsetfrom();
-
-
- /* TZOFFSETTO */
- //public native void set_tzoffsetto(int val);
- //public native int get_tzoffsetto();
-
- /* TZURL */
- //public native void set_tzurl(String val);
- //public native String get_tzurl();
-
- /* UID */
- public native void set_uid(String val);
- public native String get_uid();
-
- /* URL */
- //public native void set_url(String val);
- //public native String get_url();
-
- /* VERSION */
- //public native void set_version(String val);
- //public native String get_version();
-
- /* X */
- //void set_x(String val);
- //String get_x();
-
- /* X-LIC-CLUSTERCOUNT */
- //void set_xlicclustercount(String val);
- //String get_xlicclustercount();
-
- /* X-LIC-ERROR */
- //void set_xlicerror(String val);
- //String get_xlicerror();
-
- /* X-LIC-MIMECHARSET */
- //void set_xlicmimecharset(String val);
- //String get_xlicmimecharset();
-
- /* X-LIC-MIMECID */
- //void set_xlicmimecid(String val);
- //String get_xlicmimecid();
-
- /* X-LIC-MIMECONTENTTYPE */
- //void set_xlicmimecontenttype(String val);
- //String get_xlicmimecontenttype();
-
- /* X-LIC-MIMEENCODING */
- //void set_xlicmimeencoding(String val);
- //String get_xlicmimeencoding();
-
- /* X-LIC-MIMEFILENAME */
- //void set_xlicmimefilename(String val);
- //String get_xlicmimefilename();
-
- /* X-LIC-MIMEOPTINFO */
- //void set_xlicmimeoptinfo(String val);
- //String get_xlicmimeoptinfo();
-
- /**
- * init the native class
- */
- private void init(long obj)
- {
- m_Obj = obj;
- }
-
- private native void init();
- private native void init(String str);
- private native void init(/* ICalPropertyKind */ int kind);
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- }
-
- public static void main(String[] args)
- {
- System.out.println("*** ICalProperty main called ok.");
- }
-
- /** pointer to C++ object */
- private long m_Obj = 0;
-}
diff --git a/libical/src/java/ICalRecurrenceType.java b/libical/src/java/ICalRecurrenceType.java
deleted file mode 100644
index cfe27911ab..0000000000
--- a/libical/src/java/ICalRecurrenceType.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*======================================================================
- FILE: ICalRecurrenceType.java
- CREATOR: structConverter 01/11/02
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class ICalRecurrenceType
-{
- public interface ICalRecurrenceTypeFrequency
- {
- int ICAL_SECONDLY_RECURRENCE=0;
- int ICAL_MINUTELY_RECURRENCE=1;
- int ICAL_HOURLY_RECURRENCE=2;
- int ICAL_DAILY_RECURRENCE=3;
- int ICAL_WEEKLY_RECURRENCE=4;
- int ICAL_MONTHLY_RECURRENCE=5;
- int ICAL_YEARLY_RECURRENCE=6;
- int ICAL_NO_RECURRENCE=7;
- }
-
- public interface ICalRecurrenceTypeWeekday
- {
- int ICAL_NO_WEEKDAY=0;
- int ICAL_SUNDAY_WEEKDAY=1;
- int ICAL_MONDAY_WEEKDAY=2;
- int ICAL_TUESDAY_WEEKDAY=3;
- int ICAL_WEDNESDAY_WEEKDAY=4;
- int ICAL_THURSDAY_WEEKDAY=5;
- int ICAL_FRIDAY_WEEKDAY=6;
- int ICAL_SATURDAY_WEEKDAY=7;
- }
-
- ICalRecurrenceType(long obj)
- {
- init(obj);
- }
-
- public ICalRecurrenceType()
- {
- }
-
- public void setUntil(ICalTimeType lcl_arg0)
- {
- until = lcl_arg0;
- }
- public ICalTimeType getUntil()
- {
- return until;
- }
-
- public void setFreq(int lcl_arg0)
- {
- freq = lcl_arg0;
- }
- public int getFreq()
- {
- return freq;
- }
-
- public void setWeek_start(int lcl_arg0)
- {
- week_start = lcl_arg0;
- }
- public int getWeek_start()
- {
- return week_start;
- }
-
- public void setCount(int lcl_arg0)
- {
- count = lcl_arg0;
- }
- public int getCount()
- {
- return count;
- }
-
- public void setInterval(short lcl_arg0)
- {
- interval = lcl_arg0;
- }
- public short getInterval()
- {
- return interval;
- }
-
- public void setBy_second(short[] lcl_arg0)
- {
- by_second = lcl_arg0;
- }
-
- public void setBy_secondIndexed(int ix,short lcl_arg0)
- {
- by_second[ix] = lcl_arg0;
- }
- public short[] getBy_second()
- {
- return by_second;
- }
- public short getBy_secondIndexed(int ix)
- {
- return by_second[ix];
- }
-
- public void setBy_minute(short[] lcl_arg0)
- {
- by_minute = lcl_arg0;
- }
-
- public void setBy_minuteIndexed(int ix,short lcl_arg0)
- {
- by_minute[ix] = lcl_arg0;
- }
- public short[] getBy_minute()
- {
- return by_minute;
- }
- public short getBy_minuteIndexed(int ix)
- {
- return by_minute[ix];
- }
-
- public void setBy_hour(short[] lcl_arg0)
- {
- by_hour = lcl_arg0;
- }
-
- public void setBy_hourIndexed(int ix,short lcl_arg0)
- {
- by_hour[ix] = lcl_arg0;
- }
- public short[] getBy_hour()
- {
- return by_hour;
- }
- public short getBy_hourIndexed(int ix)
- {
- return by_hour[ix];
- }
-
- public void setBy_day(short[] lcl_arg0)
- {
- by_day = lcl_arg0;
- }
-
- public void setBy_dayIndexed(int ix,short lcl_arg0)
- {
- by_day[ix] = lcl_arg0;
- }
- public short[] getBy_day()
- {
- return by_day;
- }
- public short getBy_dayIndexed(int ix)
- {
- return by_day[ix];
- }
-
- public void setBy_month_day(short[] lcl_arg0)
- {
- by_month_day = lcl_arg0;
- }
-
- public void setBy_month_dayIndexed(int ix,short lcl_arg0)
- {
- by_month_day[ix] = lcl_arg0;
- }
- public short[] getBy_month_day()
- {
- return by_month_day;
- }
- public short getBy_month_dayIndexed(int ix)
- {
- return by_month_day[ix];
- }
-
- public void setBy_year_day(short[] lcl_arg0)
- {
- by_year_day = lcl_arg0;
- }
-
- public void setBy_year_dayIndexed(int ix,short lcl_arg0)
- {
- by_year_day[ix] = lcl_arg0;
- }
- public short[] getBy_year_day()
- {
- return by_year_day;
- }
- public short getBy_year_dayIndexed(int ix)
- {
- return by_year_day[ix];
- }
-
- public void setBy_week_no(short[] lcl_arg0)
- {
- by_week_no = lcl_arg0;
- }
-
- public void setBy_week_noIndexed(int ix,short lcl_arg0)
- {
- by_week_no[ix] = lcl_arg0;
- }
- public short[] getBy_week_no()
- {
- return by_week_no;
- }
- public short getBy_week_noIndexed(int ix)
- {
- return by_week_no[ix];
- }
-
- public void setBy_month(short[] lcl_arg0)
- {
- by_month = lcl_arg0;
- }
-
- public void setBy_monthIndexed(int ix,short lcl_arg0)
- {
- by_month[ix] = lcl_arg0;
- }
- public short[] getBy_month()
- {
- return by_month;
- }
- public short getBy_monthIndexed(int ix)
- {
- return by_month[ix];
- }
-
- public void setBy_set_pos(short[] lcl_arg0)
- {
- by_set_pos = lcl_arg0;
- }
-
- public void setBy_set_posIndexed(int ix,short lcl_arg0)
- {
- by_set_pos[ix] = lcl_arg0;
- }
- public short[] getBy_set_pos()
- {
- return by_set_pos;
- }
- public short getBy_set_posIndexed(int ix)
- {
- return by_set_pos[ix];
- }
-
- private native void init(long obj);
-
- private native static void initFIDs();
-
- static {
- System.loadLibrary("ical_jni");
- initFIDs();
- }
-
- private /* ICalRecurrenceTypeFrequency */ int freq;
- private /* ICalRecurrenceTypeWeekday */ int week_start;
- private int count;
- private short interval;
- private short[] by_second = new short[ICAL_BY_SECOND_SIZE]; // Converted from short[61]
- private short[] by_minute = new short[ICAL_BY_MINUTE_SIZE]; // Converted from short[61]
- private short[] by_hour = new short[ICAL_BY_HOUR_SIZE]; // Converted from short[25]
- private short[] by_day = new short[ICAL_BY_DAY_SIZE]; // Converted from short[364]
- private short[] by_month_day = new short[ICAL_BY_MONTHDAY_SIZE]; // Converted from short[32]
- private short[] by_year_day = new short[ICAL_BY_YEARDAY_SIZE]; // Converted from short[367]
- private short[] by_week_no = new short[ICAL_BY_WEEKNO_SIZE]; // Converted from short[54]
- private short[] by_month = new short[ICAL_BY_MONTH_SIZE]; // Converted from short[13]
- private short[] by_set_pos = new short[ICAL_BY_SETPOS_SIZE]; // Converted from short[367]
- private ICalTimeType until = new ICalTimeType();
-
- public static final int ICAL_BY_SECOND_SIZE = 61;
- public static final int ICAL_BY_MINUTE_SIZE = 61;
- public static final int ICAL_BY_HOUR_SIZE = 25;
- public static final int ICAL_BY_DAY_SIZE = 364;
- public static final int ICAL_BY_MONTHDAY_SIZE = 32;
- public static final int ICAL_BY_YEARDAY_SIZE = 367;
- public static final int ICAL_BY_WEEKNO_SIZE = 54;
- public static final int ICAL_BY_MONTH_SIZE = 13;
- public static final int ICAL_BY_SETPOS_SIZE = 367;
-}
-
diff --git a/libical/src/java/ICalTimeType.java b/libical/src/java/ICalTimeType.java
deleted file mode 100644
index cf4ee40747..0000000000
--- a/libical/src/java/ICalTimeType.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*======================================================================
- FILE: ICalTimeType.java
- CREATOR: structConverter 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-/** struct icaltimetype */
-public class ICalTimeType
-{
- /**
- * Constructor for pre-existing native icaltimetype
- * @param obj c++ pointer
- */
- ICalTimeType(long obj)
- {
- init(obj);
- }
-
- /**
- * Constructor for default ICalTimeType
- */
- public ICalTimeType()
- {
- }
-
- public void setYear(int lcl_arg0)
- {
- year = lcl_arg0;
- }
- public int getYear()
- {
- return year;
- }
-
- public void setMonth(int lcl_arg0)
- {
- month = lcl_arg0;
- }
- public int getMonth()
- {
- return month;
- }
-
- public void setDay(int lcl_arg0)
- {
- day = lcl_arg0;
- }
- public int getDay()
- {
- return day;
- }
-
- public void setHour(int lcl_arg0)
- {
- hour = lcl_arg0;
- }
- public int getHour()
- {
- return hour;
- }
-
- public void setMinute(int lcl_arg0)
- {
- minute = lcl_arg0;
- }
- public int getMinute()
- {
- return minute;
- }
-
- public void setSecond(int lcl_arg0)
- {
- second = lcl_arg0;
- }
- public int getSecond()
- {
- return second;
- }
-
- public void setIs_utc(boolean lcl_arg0)
- {
- is_utc = lcl_arg0 ? 1 : 0;
- }
- public boolean getIs_utc()
- {
- return is_utc == 0 ? false : true;
- }
-
- public void setIs_date(boolean lcl_arg0)
- {
- is_date = lcl_arg0 ? 1 : 0;
- }
- public boolean getIs_date()
- {
- return is_date == 0 ? false : true;
- }
-
- public void setZone(String lcl_arg0)
- {
- zone = lcl_arg0;
- }
- public String getZone()
- {
- return zone;
- }
-
- // --------------------------------------------------------
- // Initialization
- // --------------------------------------------------------
-
- /**
- * copy data from an existing struct.
- */
- private native void init(long obj);
-
- /**
- * optimization: init field id cache,
- */
- private native static void initFIDs();
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- initFIDs();
- }
-
- // --------------------------------------------------------
- // Fields
- // --------------------------------------------------------
-
- private int month;
- private int day;
- private int year;
- private int hour;
- private int minute;
- private int second;
- private int is_utc;
- private int is_date;
- private String zone = new String(); // Converted from char*
-}
-
diff --git a/libical/src/java/ICalTriggerType.java b/libical/src/java/ICalTriggerType.java
deleted file mode 100644
index e2ef7a72e0..0000000000
--- a/libical/src/java/ICalTriggerType.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*======================================================================
- FILE: ICalTriggerType.java
- CREATOR: structConverter 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-/** struct icaltriggertype */
-public class ICalTriggerType
-{
- /**
- * Constructor for pre-existing native icaltriggertype
- * @param obj c++ pointer
- */
- ICalTriggerType(long obj)
- {
- init(obj);
- }
-
- /**
- * Constructor for pre-existing native icaltriggertype
- * @param aTime c++ pointer
- * @param aDuration c++ pointer
- */
- ICalTriggerType(long aTime, long aDuration)
- {
- init(aTime, aDuration);
- }
-
- /**
- * Constructor for default ICalTriggerType
- */
- public ICalTriggerType()
- {
- }
-
- public void setTime(ICalTimeType lcl_arg0)
- {
- time = lcl_arg0;
- }
- public ICalTimeType getTime()
- {
- return time;
- }
-
- public void setDuration(ICalDurationType lcl_arg0)
- {
- duration = lcl_arg0;
- }
- public ICalDurationType getDuration()
- {
- return duration;
- }
-
- // --------------------------------------------------------
- // Initialization
- // --------------------------------------------------------
-
- /**
- * init with a native object
- */
- private void init(long aTime, long aDuration)
- {
- time = new ICalTimeType(aTime);
- duration = new ICalDurationType(aDuration);
- }
-
- /**
- * copy data from an existing struct.
- */
- private native void init(long obj);
-
- /**
- * optimization: init field id cache,
- */
- private native static void initFIDs();
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- initFIDs();
- }
-
- // --------------------------------------------------------
- // Fields
- // --------------------------------------------------------
- private ICalTimeType time = new ICalTimeType();
- private ICalDurationType duration = new ICalDurationType();
-}
-
diff --git a/libical/src/java/ICalValue.java b/libical/src/java/ICalValue.java
deleted file mode 100644
index dbe2b8aeee..0000000000
--- a/libical/src/java/ICalValue.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*======================================================================
- FILE: ICalValue.java
- CREATOR: gnorman 01/10/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class ICalValue
-{
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalValueKind
- {
- // icalvalue_kind
- int ICAL_ANY_VALUE=5000;
- int ICAL_BOOLEAN_VALUE=5001;
- int ICAL_UTCOFFSET_VALUE=5002;
- int ICAL_RECUR_VALUE=5003;
- int ICAL_METHOD_VALUE=5004;
- int ICAL_CALADDRESS_VALUE=5005;
- int ICAL_PERIOD_VALUE=5006;
- int ICAL_STATUS_VALUE=5007;
- int ICAL_BINARY_VALUE=5008;
- int ICAL_TEXT_VALUE=5009;
- int ICAL_DATETIMEDATE_VALUE=5010;
- int ICAL_DURATION_VALUE=5011;
- int ICAL_DATETIMEPERIOD_VALUE=5012;
- int ICAL_INTEGER_VALUE=5013;
- int ICAL_TIME_VALUE=5014;
- int ICAL_URI_VALUE=5015;
- int ICAL_TRIGGER_VALUE=5016;
- int ICAL_ATTACH_VALUE=5017;
- int ICAL_CLASS_VALUE=5018;
- int ICAL_FLOAT_VALUE=5019;
- int ICAL_QUERY_VALUE=5020;
- int ICAL_STRING_VALUE=5021;
- int ICAL_TRANSP_VALUE=5022;
- int ICAL_X_VALUE=5023;
- int ICAL_DATETIME_VALUE=5024;
- int ICAL_GEO_VALUE=5025;
- int ICAL_DATE_VALUE=5026;
- int ICAL_ACTION_VALUE=5027;
- int ICAL_NO_VALUE=5028;
- }
-
- /**
- * Constructor for ICalValue
- * @param obj c++ pointer
- */
- private ICalValue(long obj)
- {
- init(obj);
- }
-
- public ICalValue()
- {
- init();
- }
-
- public ICalValue(/* ICalValueKind */ int kind)
- {
- init(kind);
- }
-
- public ICalValue(/* ICalValueKind */ int kind, String str)
- {
- init(kind,str);
- }
-
- public native String as_ical_string();
- //public native boolean is_valid();
- public native /* ICalValueKind */ int isa();
- public native boolean isa_value(Object value);
-
- /* Special, non autogenerated value accessors */
- //void set_recur(struct icalrecurrencetype v);
- //struct icalrecurrencetype get_recur();
-
- public native void set_trigger(ICalTriggerType v);
- public native ICalTriggerType get_trigger();
-
- //void set_datetimeperiod(struct icaldatetimeperiodtype v);
- //struct icaldatetimeperiodtype get_datetimeperiod();
-
- //public native static /* ICalParameterXLicCompareType */ int compare(ICalValue a, ICalValue b);
-
- /* Convert enumerations */
- //public native static /* ICalValueKind */ int string_to_kind(String str);
- //public native String kind_to_string(/* ICalValueKind */ int kind);
-
- /* BOOLEAN */
- //public native int get_boolean();
- //public native void set_boolean(int v);
-
- /* UTC-OFFSET */
- //public native int get_utcoffset();
- //public native void set_utcoffset(int v);
-
- /* METHOD */
- public native /* ICalPropertyMethod */ int get_method();
- public native void set_method(/* ICalPropertyMethod */ int v);
-
- /* CAL-ADDRESS */
- //public native String get_caladdress();
- //public native void set_caladdress(String v);
-
- /* PERIOD */
- //struct icalperiodtype get_period();
- //void set_period(struct icalperiodtype v);
-
- /* STATUS */
- //public native /* ICalPropertyStatus */ int get_status();
- //public native void set_status(/* ICalPropertyStatus */ int v);
-
- /* BINARY */
- //public native String get_binary();
- //public native void set_binary(String v);
-
- /* TEXT */
- public native String get_text();
- public native void set_text(String v);
-
- /* DATE-TIME-DATE */
- //ICalTimeType get_datetimedate();
- //void set_datetimedate(ICalTimeType v);
-
- /* DURATION */
- public native ICalDurationType get_duration();
- public native void set_duration(ICalDurationType v);
-
- /* INTEGER */
- //public native int get_integer();
- //public native void set_integer(int v);
-
- /* TIME */
- //ICalTimeType get_time();
- //void set_time(ICalTimeType v);
-
- /* URI */
- //public native String get_uri();
- //public native void set_uri(String v);
-
- /* ATTACH */
- //struct icalattachtype get_attach();
- //void set_attach(struct icalattachtype v);
-
- /* CLASS */
- //public native /* ICalPropertyClass */ int get_class();
- //public native void set_class(/* ICalPropertyClass */ int v);
-
- /* FLOAT */
- //public native float get_float();
- //public native void set_float(float v);
-
- /* QUERY */
- public native String get_query();
- public native void set_query(String v);
-
- /* STRING */
- //public native String get_string();
- //public native void set_string(String v);
-
- /* TRANSP */
- //public native /* ICalPropertyTransp */ int get_transp();
- //public native void set_transp(/* ICalPropertyTransp */ int v);
-
- /* DATE-TIME */
- public native ICalTimeType get_datetime();
- public native void set_datetime(ICalTimeType v);
-
- /* GEO */
- //struct icalgeotype get_geo();
- //void set_geo(struct icalgeotype v);
-
- /* DATE */
- //ICalTimeType get_date();
- //void set_date(ICalTimeType v);
-
- /* ACTION */
- public native /* ICalPropertyAction */ int get_action();
- public native void set_action(/* ICalPropertyAction */ int v);
-
- /**
- * init the native class
- */
- private void init(long obj)
- {
- m_Obj = obj;
- }
-
- private native void init();
- private native void init(/* ICalValueKind */ int kind, String str);
- private native void init(/* ICalValueKind */ int kind);
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- }
-
- public static void main(String[] args)
- {
- System.out.println("*** ICalValue main called ok.");
- }
-
- /** pointer to C++ object */
- private long m_Obj = 0;
-}
diff --git a/libical/src/java/Makefile.am b/libical/src/java/Makefile.am
deleted file mode 100644
index 6105b7ae5b..0000000000
--- a/libical/src/java/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-lib_LTLIBRARIES = libical_jni.la
-
-INCLUDES = -I../libical -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(JAVA_PLATFORM)
-
-libical_jni_la_LDFLAGS = -no-defined -version-info 0:0:0
-
-libical_jni_la_LIBADD = \
- ../libical/libical_cxx.la
-
-libical_jni_la_SOURCES = \
- jlibical_consts_cxx.h \
- jlibical_utils_cxx.cpp \
- jlibical_utils_cxx.h \
- jniICalDurationType_cxx.cpp \
- jniICalDurationType_cxx.h \
- jniICalPeriodType_cxx.cpp \
- jniICalPeriodType_cxx.h \
- jniICalRecurrenceType_cxx.cpp \
- jniICalRecurrenceType_cxx.h \
- jniICalTimeType_cxx.cpp \
- jniICalTimeType_cxx.h \
- jniICalTriggerType_cxx.cpp \
- jniICalTriggerType_cxx.h \
- net_cp_jlibical_ICalParameter_cxx.cpp \
- net_cp_jlibical_ICalParameter_cxx.h \
- net_cp_jlibical_ICalProperty_cxx.cpp \
- net_cp_jlibical_ICalProperty_cxx.h \
- net_cp_jlibical_ICalValue_cxx.cpp \
- net_cp_jlibical_ICalValue_cxx.h \
- net_cp_jlibical_VComponent_cxx.cpp \
- net_cp_jlibical_VComponent_cxx.h
-
-java_JAVA=\
-ICalDurationType.java ICalTriggerType.java VEvent.java\
-ICalParameter.java ICalValue.java VFreeBusy.java\
-ICalPeriodType.java VAgenda.java VQuery.java\
-ICalProperty.java VAlarm.java VToDo.java\
-ICalRecurrenceType.java VCalendar.java \
-ICalTimeType.java VComponent.java
-
-data_DATA = libical.jar
-
-libical.jar: classjava.stamp
- (cd $(top_builddir); $(JAR) cf src/java/libical.jar net)
-
-jlibical_jniincludedir = $(includedir)
-
-TESTS = testjni.sh
-
-testjni.sh:
- echo "$(JAVA) -Djava.library.path=@prefix@/lib -classpath $(JAVA_HOME)/lib/classes.zip:@prefix@/lib/libical.jar net.cp.jlibical.testjni" > testjni.sh && chmod a+x testjni.sh
diff --git a/libical/src/java/VAgenda.java b/libical/src/java/VAgenda.java
deleted file mode 100644
index 8b85fe11c2..0000000000
--- a/libical/src/java/VAgenda.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VAgenda.java
- CREATOR: fnguyen 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VAgenda extends VComponent {
- public VAgenda()
- {
- super(ICalComponentKind.ICAL_VAGENDA_COMPONENT);
- }
-
- public VAgenda(long obj)
- {
- super(obj);
- }
-
- public VAgenda(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VAlarm.java b/libical/src/java/VAlarm.java
deleted file mode 100644
index d7693f7622..0000000000
--- a/libical/src/java/VAlarm.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VAlarm.java
- CREATOR: fnguyen 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VAlarm extends VComponent {
- public VAlarm()
- {
- super(ICalComponentKind.ICAL_VALARM_COMPONENT);
- }
-
- public VAlarm(long obj)
- {
- super(obj);
- }
-
- public VAlarm(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VCalendar.java b/libical/src/java/VCalendar.java
deleted file mode 100644
index 4cfcad2709..0000000000
--- a/libical/src/java/VCalendar.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VCalendar.java
- CREATOR: echoi 01/28/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VCalendar extends VComponent {
- public VCalendar()
- {
- super(ICalComponentKind.ICAL_VCALENDAR_COMPONENT);
- }
-
- public VCalendar(long obj)
- {
- super(obj);
- }
-
- public VCalendar(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VComponent.java b/libical/src/java/VComponent.java
deleted file mode 100644
index 70c5915c91..0000000000
--- a/libical/src/java/VComponent.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*======================================================================
- FILE: VComponent.java
- CREATOR: gnorman 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VComponent
-{
- /** It's not typesafe, but it's simple to understand! */
- public interface ICalComponentKind
- {
- // icalcomponent_kind
- int ICAL_NO_COMPONENT = 0;
- int ICAL_ANY_COMPONENT = 1;
- int ICAL_XROOT_COMPONENT = 2;
- int ICAL_XATTACH_COMPONENT = 3;
- int ICAL_VEVENT_COMPONENT = 4;
- int ICAL_VTODO_COMPONENT = 5;
- int ICAL_VJOURNAL_COMPONENT = 6;
- int ICAL_VCALENDAR_COMPONENT = 7;
- int ICAL_VAGENDA_COMPONENT = 8;
- int ICAL_VFREEBUSY_COMPONENT = 9;
- int ICAL_VALARM_COMPONENT = 10;
- int ICAL_XAUDIOALARM_COMPONENT = 11;
- int ICAL_XDISPLAYALARM_COMPONENT = 12;
- int ICAL_XEMAILALARM_COMPONENT = 13;
- int ICAL_XPROCEDUREALARM_COMPONENT = 14;
- int ICAL_VTIMEZONE_COMPONENT = 15;
- int ICAL_XSTANDARD_COMPONENT = 16;
- int ICAL_XDAYLIGHT_COMPONENT = 17;
- int ICAL_X_COMPONENT = 18;
- int ICAL_VSCHEDULE_COMPONENT = 19;
- int ICAL_VQUERY_COMPONENT = 20;
- int ICAL_VCOMMAND_COMPONENT = 21;
- int ICAL_XLICINVALID_COMPONENT = 22;
- int ICAL_XLICMIMEPART_COMPONENT = 23;
- int ICAL_XPREFERENCES_COMPONENT = 24;
- }
-
- /**
- * Constructor for VComponent
- * @param obj c++ pointer
- */
- protected VComponent(long obj)
- {
- init(obj);
- }
-
- public VComponent()
- {
- init();
- }
-
- public VComponent(/* ICalComponentKind */ int kind)
- {
- init(kind);
- }
-
- public VComponent(String str)
- {
- init(str);
- }
-
- public native String as_ical_string();
- //public native boolean is_valid();
- public native /* ICalComponentKind */ int isa();
- public native boolean isa_component(Object component);
-
- /* Working with properties */
- public native void add_property(ICalProperty property);
- public native void remove_property(ICalProperty property);
- public native int count_properties(/* ICalPropertyKind */ int kind);
-
- /* Iterate through the properties */
- public native ICalProperty get_current_property();
- public native ICalProperty get_first_property(/* ICalPropertyKind */ int kind);
- public native ICalProperty get_next_property(/* ICalPropertyKind */ int kind);
-
- /* Working with components */
-
- /* Return the first VEVENT, VTODO or VJOURNAL sub-component if it is one of those types */
- public native VComponent get_inner();
-
- public native void add_component(VComponent child);
- public native void remove_component(VComponent child);
- public native int count_components(/* ICalComponentKind */ int kind);
-
- /* Iteration Routines. There are two forms of iterators, internal and
- external. The internal ones came first, and are almost completely
- sufficient, but they fail badly when you want to construct a loop that
- removes components from the container.
- */
-
- /* Iterate through components */
- public native VComponent get_current_component();
- public native VComponent get_first_component(/* ICalComponentKind */ int kind);
- public native VComponent get_next_component(/* ICalComponentKind */ int kind);
-
- /* Using external iterators */
- //public native icalcompiter begin_component(/* ICalComponentKind */ int kind);
- //public native icalcompiter end_component(/* ICalComponentKind */ int kind);
- //public native VComponent next(icalcompiter i);
- //public native VComponent prev(icalcompiter i);
- //public native VComponent current(icalcompiter i);
-
- /* Working with embedded error properties */
- //public native int count_errors();
-
- /* Remove all X-LIC-ERROR properties*/
- //public native void strip_errors();
-
- /* Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/
- //public native void convert_errors();
-
- /* Kind conversion routines */
- //public native static /* ICalComponentKind */ int string_to_kind(String str);
- //public native static String kind_to_string(/* ICalComponentKind */ int kind);
-
- public native ICalTimeType get_dtstart();
- public native void set_dtstart(ICalTimeType v);
-
- /* For the icalcomponent routines only, dtend and duration are tied
- together. If you call the set routine for one and the other exists,
- the routine will calculate the change to the other. That is, if
- there is a DTEND and you call set_duration, the routine will modify
- DTEND to be the sum of DTSTART and the duration. If you call a get
- routine for one and the other exists, the routine will calculate
- the return value. If you call a set routine and neither exists, the
- routine will create the apcompriate comperty */
-
- public native ICalTimeType get_dtend();
- public native void set_dtend(ICalTimeType v);
-
- public native ICalDurationType get_duration();
- public native void set_duration(ICalDurationType v);
-
- public native /* ICalPropertyMethod */ int get_method();
- public native void set_method(/* ICalPropertyMethod */ int method);
-
- public native ICalTimeType get_dtstamp();
- public native void set_dtstamp(ICalTimeType v);
-
- public native String get_summary();
- public native void set_summary(String v);
-
- public native String get_location();
- public native void set_location(String v);
-
- public native String get_description();
- public native void set_description(String v);
-
- //public native String get_comment();
- //public native void set_comment(String v);
-
- public native String get_uid();
- public native void set_uid(String v);
-
- public native String get_relcalid();
- public native void set_relcalid(String v);
-
- public native ICalTimeType get_recurrenceid();
- public native void set_recurrenceid(ICalTimeType v);
-
- /* For VCOMPONENT: Return a reference to the first VEVENT, VTODO, or VJOURNAL */
- public native VComponent get_first_real_component();
-
- /* For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end
- times of an event in UTC */
- //public native virtual struct icaltime_span get_span();
-
- /**
- * init the native class
- */
- private void init(long obj)
- {
- m_Obj = obj;
- }
-
- private native void init();
- private native void init(String str);
- private native void init(/* ICalComponentKind */ int kind);
-
- /**
- * load the jni library for this class
- */
- static {
- System.loadLibrary("ical_jni");
- }
-
- public static void main(String[] args)
- {
- System.out.println("*** VComponent main called ok.");
- }
-
- /** pointer to C++ object */
- private long m_Obj = 0;
-}
diff --git a/libical/src/java/VEvent.java b/libical/src/java/VEvent.java
deleted file mode 100644
index 2017aa58ce..0000000000
--- a/libical/src/java/VEvent.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VEvent.java
- CREATOR: fnguyen 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VEvent extends VComponent {
- public VEvent()
- {
- super(ICalComponentKind.ICAL_VEVENT_COMPONENT);
- }
-
- public VEvent(long obj)
- {
- super(obj);
- }
-
- public VEvent(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VFreeBusy.java b/libical/src/java/VFreeBusy.java
deleted file mode 100644
index a781edc59a..0000000000
--- a/libical/src/java/VFreeBusy.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package net.cp.jlibical;
-
-public class VFreeBusy extends VComponent {
- public VFreeBusy()
- {
- super(ICalComponentKind.ICAL_VFREEBUSY_COMPONENT);
- }
-
- public VFreeBusy(long obj)
- {
- super(obj);
- }
-
- public VFreeBusy(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VQuery.java b/libical/src/java/VQuery.java
deleted file mode 100644
index e94a07327e..0000000000
--- a/libical/src/java/VQuery.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VQuery.java
- CREATOR: fnguyen 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VQuery extends VComponent {
- public VQuery()
- {
- super(ICalComponentKind.ICAL_VQUERY_COMPONENT);
- }
-
- public VQuery(long obj)
- {
- super(obj);
- }
-
- public VQuery(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/VToDo.java b/libical/src/java/VToDo.java
deleted file mode 100644
index 9e4a06e1f0..0000000000
--- a/libical/src/java/VToDo.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*======================================================================
- FILE: VToDo.java
- CREATOR: fnguyen 01/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-package net.cp.jlibical;
-
-public class VToDo extends VComponent {
- public VToDo()
- {
- super(ICalComponentKind.ICAL_VTODO_COMPONENT);
- }
-
- public VToDo(long obj)
- {
- super(obj);
- }
-
- public VToDo(String str)
- {
- super(str);
- }
-}
diff --git a/libical/src/java/jlibical_consts_cxx.h b/libical/src/java/jlibical_consts_cxx.h
deleted file mode 100644
index 2cdf1f8b5a..0000000000
--- a/libical/src/java/jlibical_consts_cxx.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*======================================================================
- FILE: jlibical_consts_cxx/h
- CREATOR: Srinivasa Boppana/George Norman
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#define JLIBICAL_CONSTS_CXX_H
-
-/*
- * Error code constants.
- */
-#define JLIBICAL_OK 0 /* good return code */
-
-/* system/API errors */
-#define JLIBICAL_ERR_NETWORK 100 /* general network error */
-#define JLIBICAL_ERR_SERVER_INTERNAL 101 /* internal server error (database, file system, etc.) */
-#define JLIBICAL_ERR_CLIENT_INTERNAL 102 /* internal error in client API (memory, parsing errors, etc.)*/
-#define JLIBICAL_ERR_ILLEGAL_ARGUMENT 103 /* incorrect API use */
-#define JLIBICAL_ERR_API_NOT_INITED 104 /* either the InitModule API call was called prior to use of the API or it failed to initialize correctly */
-#define JLIBICAL_ERR_HOST_INVALID 105 /* the host name specified cannot be resolved */
-
-/* Java classes */
-#define JLIBICAL_CLASS_ICALVALUE "net/cp/jlibical/ICalValue"
-#define JLIBICAL_CLASS_VCOMPONENT "net/cp/jlibical/VComponent"
-#define JLIBICAL_CLASS_VALARM "net/cp/jlibical/VAlarm"
-#define JLIBICAL_CLASS_VCALENDAR "net/cp/jlibical/VCalendar"
-#define JLIBICAL_CLASS_VAGENDA "net/cp/jlibical/VAgenda"
-#define JLIBICAL_CLASS_VEVENT "net/cp/jlibical/VEvent"
-#define JLIBICAL_CLASS_VQUERY "net/cp/jlibical/VQuery"
-#define JLIBICAL_CLASS_VTODO "net/cp/jlibical/VToDo"
-#define JLIBICAL_CLASS_ICALPARAMETER "net/cp/jlibical/ICalParameter"
-#define JLIBICAL_CLASS_ICALPROPERTY "net/cp/jlibical/ICalProperty"
-
-#define JLIBICAL_CLASS_ICALDURATIONTYPE "net/cp/jlibical/ICalDurationType"
-#define JLIBICAL_CLASS_ICALTIMETYPE "net/cp/jlibical/ICalTimeType"
-#define JLIBICAL_CLASS_ICALTRIGGERTYPE "net/cp/jlibical/ICalTriggerType"
-#define JLIBICAL_CLASS_ICALRECURRENCETYPE "net/cp/jlibical/ICalRecurrenceType"
-#define JLIBICAL_CLASS_ICALPERIODTYPE "net/cp/jlibical/ICalPeriodType"
-
-#endif /* JLIBICAL_CONSTS_CXX_H */
diff --git a/libical/src/java/jlibical_utils_cxx.cpp b/libical/src/java/jlibical_utils_cxx.cpp
deleted file mode 100644
index d06d4ba004..0000000000
--- a/libical/src/java/jlibical_utils_cxx.cpp
+++ /dev/null
@@ -1,458 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jlibical_utils_cxx.cpp
- CREATOR: Srinivasa Boppana/George Norman
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef JLIBICAL_UTILS_CXX_H
-#include "jlibical_utils_cxx.h"
-#endif
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#include "jlibical_consts_cxx.h"
-#endif
-
-#ifndef ICALPARAMETER_CXX_H
-#include "icalparameter_cxx.h"
-#endif
-
-#ifndef VCOMPONENT_CXX_H
-#include "vcomponent.h"
-#endif
-
-#ifndef ICALPROPERTY_CXX_H
-#include "icalproperty_cxx.h"
-#endif
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-#ifndef _jni_ICalTimeType_H
-#include "jniICalTimeType_cxx.h"
-#endif
-
-#ifndef _jni_ICalTriggerType_H
-#include "jniICalTriggerType_cxx.h"
-#endif
-
-#ifndef _jni_ICalDurationType_H
-#include "jniICalDurationType_cxx.h"
-#endif
-
-#ifndef _jni_ICalRecurrenceType_H
-#include "jniICalRecurrenceType_cxx.h"
-#endif
-
-#ifndef _jni_ICalPeriodType_H
-#include "jniICalPeriodType_cxx.h"
-#endif
-
-//-------------------------------------------------------
-// Returns a pointer to the subject (a c++ object) for the given surrogate (a java object)
-//-------------------------------------------------------
-void* getCObjectPtr(JNIEnv *env, jobject surrogate)
-{
- void* result = 0;
- jclass jcls = env->GetObjectClass(surrogate);
- jfieldID fid = env->GetFieldID(jcls,"m_Obj","J");
-
- if (fid == NULL)
- {
- // this should never happen.
- throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL );
- return(NULL);
- }
-
- result = (void*)env->GetLongField(surrogate,fid);
- if (result == NULL)
- {
- // the proxy object (java) has no subject (c++ object)
- throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL );
- return(NULL);
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Set the subject (a c++ object) for the given surrogate (a java object).
-// Throws exception if the m_Obj field can not be found.
-//-------------------------------------------------------
-void setCObjectPtr(JNIEnv *env, jobject surrogate, void* subject)
-{
- jclass jcls = env->GetObjectClass(surrogate);
- jfieldID fid = env->GetFieldID(jcls,"m_Obj","J");
-
- if (fid == NULL)
- {
- throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL );
- return;
- }
-
- env->SetLongField(surrogate,fid,(long)subject);
-}
-
-//-------------------------------------------------------
-// Return the pointer to the subject (as an VComponent*) from the given surrogate.
-// If the subject is not an VComponent type, or if the subject is NULL, then return NULL.
-//-------------------------------------------------------
-VComponent* getSubjectAsVComponent(JNIEnv *env, jobject surrogateComponent, int exceptionType)
-{
- VComponent* result = (VComponent*)(getCObjectPtr(env,surrogateComponent));
-
- if (result == NULL)
- {
- throwException(env, exceptionType );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Return the pointer to the subject (as an ICalProperty*) from the given surrogate.
-// If the subject is not an ICalProperty type, or if the subject is NULL, then return NULL.
-//-------------------------------------------------------
-ICalProperty* getSubjectAsICalProperty(JNIEnv *env, jobject surrogateProperty, int exceptionType)
-{
- ICalProperty* result = (ICalProperty*)(getCObjectPtr(env,surrogateProperty));
-
- if (result == NULL)
- {
- throwException(env, exceptionType );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Return the pointer to the subject (as an ICalValue*) from the given surrogate.
-// If the subject is not an ICalValue type, or if the subject is NULL, then return NULL.
-//-------------------------------------------------------
-ICalValue* getSubjectAsICalValue(JNIEnv *env, jobject surrogateValue, int exceptionType)
-{
- ICalValue* result = (ICalValue*)(getCObjectPtr(env,surrogateValue));
-
- if (result == NULL)
- {
- throwException( env, exceptionType );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Return the pointer to the subject (as an ICalParameter*) from the given surrogate.
-// If the subject is not an ICalParameter type, or if the subject is NULL, then return NULL.
-//-------------------------------------------------------
-ICalParameter* getSubjectAsICalParameter(JNIEnv *env, jobject surrogateParameter, int exceptionType)
-{
- ICalParameter* result = (ICalParameter*)(getCObjectPtr(env,surrogateParameter));
-
- if (result == NULL)
- {
- throwException( env, exceptionType );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Copy the data from the src (a java ICalTimeType object)
-// to the dest (a c struct icaltimetype*).
-// Returns true if success. False if exception is thrown:
-// - the src java object is not an ICalTimeType type
-// - the dest c struct is null.
-//-------------------------------------------------------
-bool copyObjToicaltimetype(JNIEnv *env, jobject src, icaltimetype* dest)
-{
- bool result = false;
-
- if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALTIMETYPE)))
- {
- jni_GetAll_from_ICalTimeType(dest, env, src);
- result = true;
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Copy the data from the src (a java ICalTriggerType object)
-// to the dest (a c struct icaltriggertype*).
-// Returns true if success. False if exception is thrown:
-// - the src java object is not an ICalTriggerType type
-// - the dest c struct is null.
-//-------------------------------------------------------
-bool copyObjToicaltriggertype(JNIEnv *env, jobject src, icaltriggertype* dest)
-{
- bool result = false;
-
- if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALTRIGGERTYPE)))
- {
- jni_GetAll_from_ICalTriggerType(dest, env, src);
- result = true;
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Copy the data from the src (a java ICalDurationType object)
-// to the dest (a c struct icaldurationtype*).
-// Returns true if success. False if exception is thrown:
-// - the src java object is not an ICalDurationType type
-// - the dest c struct is null.
-//-------------------------------------------------------
-bool copyObjToicaldurationtype(JNIEnv *env, jobject src, icaldurationtype* dest)
-{
- bool result = false;
-
- if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALDURATIONTYPE)))
- {
- jni_GetAll_from_ICalDurationType(dest, env, src);
- result = true;
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Copy the data from the src (a java ICalRecurrenceType object)
-// to the dest (a c struct icalrecurrencetype*).
-// Returns true if success. False if exception is thrown:
-// - the src java object is not an ICalRecurrenceType type
-// - the dest c struct is null.
-//-------------------------------------------------------
-bool copyObjToicalrecurrencetype(JNIEnv *env, jobject src, icalrecurrencetype* dest)
-{
- bool result = false;
-
- if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALRECURRENCETYPE)))
- {
- jni_GetAll_from_ICalRecurrenceType(dest, env, src);
- result = true;
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Copy the data from the src (a java ICalPeriodType object)
-// to the dest (a c struct icalperiodtype*).
-// Returns true if success. False if exception is thrown:
-// - the src java object is not an ICalPeriodType type
-// - the dest c struct is null.
-//-------------------------------------------------------
-bool copyObjToicalperiodtype(JNIEnv *env, jobject src, icalperiodtype* dest)
-{
- bool result = false;
-
- if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALPERIODTYPE)))
- {
- jni_GetAll_from_ICalPeriodType(dest, env, src);
- result = true;
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-
- return(result);
-}
-
-//-------------------------------------------------------
-// Create a new VComponent surrogate for given subject.
-// If subject is NULL, then returns NULL (will not create a
-// surrogate to a NULL subject);
-//-------------------------------------------------------
-jobject createNewVComponentSurrogate(JNIEnv *env, VComponent* subject)
-{
- char* classname = JLIBICAL_CLASS_VCOMPONENT;
- if (dynamic_cast<VAlarm*>(subject))
- classname = JLIBICAL_CLASS_VALARM;
- else if (dynamic_cast<VCalendar*>(subject))
- classname = JLIBICAL_CLASS_VCALENDAR;
- else if (dynamic_cast<VEvent*>(subject))
- classname = JLIBICAL_CLASS_VEVENT;
- else if (dynamic_cast<VQuery*>(subject))
- classname = JLIBICAL_CLASS_VQUERY;
- else if (dynamic_cast<VToDo*>(subject))
- classname = JLIBICAL_CLASS_VTODO;
- else if (dynamic_cast<VAgenda*>(subject))
- classname = JLIBICAL_CLASS_VAGENDA;
-
- return(doCreateNewSurrogate(env,env->FindClass(classname),(jlong)subject));
-}
-
-//-------------------------------------------------------
-// Create a new ICalProperty surrogate for given subject.
-// If subject is NULL, then returns NULL (will not create a
-// surrogate to a NULL subject);
-//-------------------------------------------------------
-jobject createNewICalPropertySurrogate(JNIEnv *env, ICalProperty* subject)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPROPERTY),(jlong)subject));
-}
-
-//-------------------------------------------------------
-// Create a new ICalValue surrogate for given subject.
-// If subject is NULL, then returns NULL (will not create a
-// surrogate to a NULL subject);
-//-------------------------------------------------------
-jobject createNewICalValueSurrogate(JNIEnv *env, ICalValue* subject)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALVALUE),(jlong)subject));
-}
-
-//-------------------------------------------------------
-// Create a new ICalParameter surrogate for given subject.
-// If subject is NULL, then returns NULL (will not create a
-// surrogate to a NULL subject);
-//-------------------------------------------------------
-jobject createNewICalParameterSurrogate(JNIEnv *env, ICalParameter* subject)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPARAMETER),(jlong)subject));
-}
-
-//-------------------------------------------------------
-// Create a new ICalTimeType object from the given source struct.
-// A copy is made, .
-// If source is NULL, then returns NULL (will not create an
-// object to a NULL source);
-//-------------------------------------------------------
-jobject createNewICalTimeType(JNIEnv *env, icaltimetype* source)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALTIMETYPE),(jlong)source));
-}
-
-//-------------------------------------------------------
-// Create a new ICalTriggerType object from the given source struct.
-// A copy is made, .
-// If source is NULL, then returns NULL (will not create an
-// object to a NULL source);
-//-------------------------------------------------------
-jobject createNewICalTriggerType(JNIEnv *env, icaltriggertype* source)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALTRIGGERTYPE),(jlong)source));
-}
-
-//-------------------------------------------------------
-// Create a new ICalDurationType object from the given source struct.
-// A copy is made, .
-// If source is NULL, then returns NULL (will not create an
-// object to a NULL source);
-//-------------------------------------------------------
-jobject createNewICalDurationType(JNIEnv *env, icaldurationtype* source)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALDURATIONTYPE),(jlong)source));
-}
-
-//-------------------------------------------------------
-// Create a new ICalRecurrenceType object from the given source struct.
-// A copy is made, .
-// If source is NULL, then returns NULL (will not create an
-// object to a NULL source);
-//-------------------------------------------------------
-jobject createNewICalRecurrenceType(JNIEnv *env, icalrecurrencetype* source)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALRECURRENCETYPE),(jlong)source));
-}
-
-//-------------------------------------------------------
-// Create a new ICalPeriodType object from the given source struct.
-// A copy is made, .
-// If source is NULL, then returns NULL (will not create an
-// object to a NULL source);
-//-------------------------------------------------------
-jobject createNewICalPeriodType(JNIEnv *env, icalperiodtype* source)
-{
- return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPERIODTYPE),(jlong)source));
-}
-
-//-------------------------------------------------------
-// Creat a new surrogate of the given type for the given subject.
-//-------------------------------------------------------
-jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject)
-{
- jobject result = NULL;
-
- if (subject != NULL)
- {
- jmethodID jconstructorID = env->GetMethodID(surrogateClass, "<init>", "(J)V");
-
- result = env->NewObject(surrogateClass, jconstructorID, subject);
- }
-
- return(result);
-}
-
-
-//-------------------------------------------------------
-// For the given cpErr, create a new Exception and send it to env.
-// Note: Throw does not throw anything. It only sets the state.
-// The JVM will check this and throw an exception later.
-//-------------------------------------------------------
-void throwException(JNIEnv *env, int cpErr)
-{
- jclass jexceptionClass;
- jthrowable jexceptionObj;
- jmethodID jconstructorID;
- const char* exClassName;
-
- if (env->ExceptionOccurred())
- {
- return;
- }
-
- switch ( cpErr )
- {
- case JLIBICAL_ERR_NETWORK:
- exClassName = "net.cp.jlibical/JLCNetworkException";
- break;
-
- case JLIBICAL_ERR_SERVER_INTERNAL:
- exClassName = "net.cp.jlibical/JLCServerInternalException";
- break;
-
- case JLIBICAL_ERR_CLIENT_INTERNAL:
- exClassName = "net.cp.jlibical/JLCClientInternalException";
- break;
-
- case JLIBICAL_ERR_ILLEGAL_ARGUMENT:
- exClassName = "net.cp.jlibical/JLCIllegalArgumentException";
- break;
-
- case JLIBICAL_ERR_API_NOT_INITED:
- exClassName = "net.cp.jlibical/JLCNotInitedException";
- break;
-
- case JLIBICAL_ERR_HOST_INVALID:
- exClassName = "net.cp.jlibical/JLCHostInvalidException";
- break;
-
- default:
- exClassName = "net.cp.jlibical/JLCClientInternalException";
- printf("*** JLIBICAL JNI throwException: unknown error code: %d\n", cpErr );
- break;
- }
-
- env->ThrowNew(env->FindClass(exClassName),"");
-}
diff --git a/libical/src/java/jlibical_utils_cxx.h b/libical/src/java/jlibical_utils_cxx.h
deleted file mode 100644
index a6cdbc56be..0000000000
--- a/libical/src/java/jlibical_utils_cxx.h
+++ /dev/null
@@ -1,59 +0,0 @@
-
-/*======================================================================
- FILE: jlibical_utils_cxx.h
- CREATOR: Srinivasa Boppana/George Norman
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef TEST_CXX_H
-#define TEST_CXX_H
-
-#ifndef JNI_H
-#include <jni.h>
-#endif
-
-class VComponent;
-class ICalProperty;
-class ICalValue;
-class ICalParameter;
-struct icaltimetype;
-struct icaltriggertype;
-struct icaldurationtype;
-struct icalrecurrencetype;
-struct icalperiodtype;
-
-// get & set
-void* getCObjectPtr(JNIEnv *env, jobject anObj);
-void setCObjectPtr(JNIEnv *env, jobject anObj, void* val);
-
-// type-safe getters
-VComponent* getSubjectAsVComponent(JNIEnv *env, jobject surrogateComponent, int exceptionType);
-ICalProperty* getSubjectAsICalProperty(JNIEnv *env, jobject surrogateProperty, int exceptionType);
-ICalValue* getSubjectAsICalValue(JNIEnv *env, jobject surrogateValue, int exceptionType);
-ICalParameter* getSubjectAsICalParameter(JNIEnv *env, jobject surrogateParameter, int exceptionType);
-
-bool copyObjToicaltimetype(JNIEnv *env, jobject src, icaltimetype* dest);
-bool copyObjToicaltriggertype(JNIEnv *env, jobject src, icaltriggertype* dest);
-bool copyObjToicaldurationtype(JNIEnv *env, jobject src, icaldurationtype* dest);
-bool copyObjToicalrecurrencetype(JNIEnv *env, jobject src, icalrecurrencetype* dest);
-bool copyObjToicalperiodtype(JNIEnv *env, jobject src, icalperiodtype* dest);
-
-// exception handling
-void throwException( JNIEnv *env, int cpErr );
-
-// create objects
-jobject createNewVComponentSurrogate(JNIEnv *env, VComponent* subject);
-jobject createNewICalPropertySurrogate(JNIEnv *env, ICalProperty* subject);
-jobject createNewICalValueSurrogate(JNIEnv *env, ICalValue* subject);
-jobject createNewICalParameterSurrogate(JNIEnv *env, ICalParameter* subject);
-
-jobject createNewICalTimeType(JNIEnv *env, icaltimetype* source);
-jobject createNewICalTriggerType(JNIEnv *env, icaltriggertype* source);
-jobject createNewICalDurationType(JNIEnv *env, icaldurationtype* source);
-jobject createNewICalRecurrenceType(JNIEnv *env, icalrecurrencetype* source);
-jobject createNewICalPeriodType(JNIEnv *env, icalperiodtype* source);
-
-jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject);
-
-
-#endif /*TEST_CXX_H*/
diff --git a/libical/src/java/jniICalDurationType_cxx.cpp b/libical/src/java/jniICalDurationType_cxx.cpp
deleted file mode 100644
index e1e0204c46..0000000000
--- a/libical/src/java/jniICalDurationType_cxx.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jniICalDurationType_cxx.cpp
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#include <jni.h>
-
-#include "jniICalDurationType_cxx.h"
-
-static jfieldID ICalDurationType_Is_neg_FID;
-static jfieldID ICalDurationType_Days_FID;
-static jfieldID ICalDurationType_Weeks_FID;
-static jfieldID ICalDurationType_Hours_FID;
-static jfieldID ICalDurationType_Minutes_FID;
-static jfieldID ICalDurationType_Seconds_FID;
-
-
-void initICalDurationTypeFieldIDs(JNIEnv* env, jclass clazz)
-{
- ICalDurationType_Is_neg_FID = env->GetFieldID(clazz, "is_neg", "I");
- ICalDurationType_Days_FID = env->GetFieldID(clazz, "days", "J");
- ICalDurationType_Weeks_FID = env->GetFieldID(clazz, "weeks", "J");
- ICalDurationType_Hours_FID = env->GetFieldID(clazz, "hours", "J");
- ICalDurationType_Minutes_FID = env->GetFieldID(clazz, "minutes", "J");
- ICalDurationType_Seconds_FID = env->GetFieldID(clazz, "seconds", "J");
-}
-
-void jni_SetIs_neg_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetIntField(thisICalDurationType, ICalDurationType_Is_neg_FID, (jint) __ICalDurationType_->is_neg);
-}
-
-void jni_GetIs_neg_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->is_neg = env->GetIntField(thisICalDurationType, ICalDurationType_Is_neg_FID);
-}
-
-void jni_SetDays_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetLongField(thisICalDurationType, ICalDurationType_Days_FID, (jlong) __ICalDurationType_->days);
-}
-
-void jni_GetDays_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->days = env->GetLongField(thisICalDurationType, ICalDurationType_Days_FID);
-}
-
-void jni_SetWeeks_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetLongField(thisICalDurationType, ICalDurationType_Weeks_FID, (jlong) __ICalDurationType_->weeks);
-}
-
-void jni_GetWeeks_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->weeks = env->GetLongField(thisICalDurationType, ICalDurationType_Weeks_FID);
-}
-
-void jni_SetHours_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetLongField(thisICalDurationType, ICalDurationType_Hours_FID, (jlong) __ICalDurationType_->hours);
-}
-
-void jni_GetHours_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->hours = env->GetLongField(thisICalDurationType, ICalDurationType_Hours_FID);
-}
-
-void jni_SetMinutes_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetLongField(thisICalDurationType, ICalDurationType_Minutes_FID, (jlong) __ICalDurationType_->minutes);
-}
-
-void jni_GetMinutes_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->minutes = env->GetLongField(thisICalDurationType, ICalDurationType_Minutes_FID);
-}
-
-void jni_SetSeconds_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- env->SetLongField(thisICalDurationType, ICalDurationType_Seconds_FID, (jlong) __ICalDurationType_->seconds);
-}
-
-void jni_GetSeconds_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType)
-{
- __ICalDurationType_->seconds = env->GetLongField(thisICalDurationType, ICalDurationType_Seconds_FID);
-}
-
-// copy all fields from the c struct (ICalDurationType) to the java object (thisICalDurationType).
-void jni_SetAll_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType)
-{
- jni_SetIs_neg_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_SetDays_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_SetWeeks_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_SetHours_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_SetMinutes_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_SetSeconds_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
-}
-
-// copy all fields from the java object (thisICalDurationType) to the c struct (__ICalDurationType_).
-void jni_GetAll_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType)
-{
- jni_GetIs_neg_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_GetDays_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_GetWeeks_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_GetHours_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_GetMinutes_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
- jni_GetSeconds_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType);
-}
-/*
- * Class: net_cp_jlibical_ICalDurationType
- * Method: init
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_init__J
- (JNIEnv *env, jobject thisICalDurationType, jlong data)
-{
- // copy all fields from the c struct (data) to the java object (thisICalDurationType).
- jni_SetAll_in_ICalDurationType((ICalDurationType*)data,env,thisICalDurationType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalDurationType
- * Method: initFIDs
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_initFIDs(JNIEnv *env, jclass clazz) {
- initICalDurationTypeFieldIDs(env, clazz);
-}
diff --git a/libical/src/java/jniICalDurationType_cxx.h b/libical/src/java/jniICalDurationType_cxx.h
deleted file mode 100644
index 6ef1de1a09..0000000000
--- a/libical/src/java/jniICalDurationType_cxx.h
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*======================================================================
- FILE: jniICalDurationType_cxx.h
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _jni_ICalDurationType_H
-#define _jni_ICalDurationType_H
-#include <jni.h>
-
-// I forgot how to do this using a typedef in c++!!!!
-#define ICalDurationType icaldurationtype
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ical.h"
-
-static void initICalDurationTypeFieldIDs(JNIEnv* env, jclass clazz);
-
-void jni_SetIs_neg_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetIs_neg_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetDays_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetDays_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetWeeks_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetWeeks_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetHours_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetHours_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetMinutes_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetMinutes_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetSeconds_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_GetSeconds_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType);
-void jni_SetAll_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType);
-
-void jni_GetAll_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_initFIDs(JNIEnv *env, jclass clazz);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_init__J(JNIEnv *env, jobject thisICalDurationType, jlong data);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libical/src/java/jniICalPeriodType_cxx.cpp b/libical/src/java/jniICalPeriodType_cxx.cpp
deleted file mode 100644
index 5a0b676915..0000000000
--- a/libical/src/java/jniICalPeriodType_cxx.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jniICalPeriodType_cxx.cpp
- CREATOR: structConverter
-======================================================================*/
-
-#include <jni.h>
-
-#include "jniICalPeriodType_cxx.h"
-#include "jniICalTimeType_cxx.h"
-#include "jniICalDurationType_cxx.h"
-
-static jfieldID ICalPeriodType_Start_FID;
-static jfieldID ICalPeriodType_End_FID;
-static jfieldID ICalPeriodType_Duration_FID;
-
-
-void initICalPeriodTypeFieldIDs(JNIEnv* env, jclass clazz)
-{
- ICalPeriodType_Start_FID = env->GetFieldID(clazz, "start", "Lnet/cp/jlibical/ICalTimeType;");
- ICalPeriodType_End_FID = env->GetFieldID(clazz, "end", "Lnet/cp/jlibical/ICalTimeType;");
- ICalPeriodType_Duration_FID = env->GetFieldID(clazz, "duration", "Lnet/cp/jlibical/ICalDurationType;");
-}
-
-void jni_SetStart_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Start_FID);
- jni_SetYear_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetMonth_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetDay_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetHour_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetMinute_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetSecond_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetIs_utc_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetIs_date_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_SetZone_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
-}
-
-void jni_GetStart_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Start_FID);
- jni_GetYear_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetMonth_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetDay_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetHour_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetMinute_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetSecond_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetIs_utc_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetIs_date_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
- jni_GetZone_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0);
-}
-
-void jni_SetEnd_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_End_FID);
- jni_SetYear_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetMonth_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetDay_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetHour_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetMinute_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetSecond_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetIs_utc_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetIs_date_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_SetZone_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
-}
-
-void jni_GetEnd_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_End_FID);
- jni_GetYear_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetMonth_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetDay_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetHour_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetMinute_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetSecond_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetIs_utc_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetIs_date_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
- jni_GetZone_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0);
-}
-
-void jni_SetDuration_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Duration_FID);
- jni_SetIs_neg_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_SetDays_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_SetWeeks_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_SetHours_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_SetMinutes_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_SetSeconds_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
-}
-
-void jni_GetDuration_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Duration_FID);
- jni_GetIs_neg_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_GetDays_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_GetWeeks_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_GetHours_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_GetMinutes_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
- jni_GetSeconds_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0);
-}
-
-// copy all fields from the c struct (__ICalPeriodType_) to the java object (thisICalPeriodType).
-void jni_SetAll_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType)
-{
- jni_SetStart_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
- jni_SetEnd_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
- jni_SetDuration_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
-}
-
-// copy all fields from the java object (thisICalPeriodType) to the c struct (__ICalPeriodType_).
-void jni_GetAll_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType)
-{
- jni_GetStart_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
- jni_GetEnd_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
- jni_GetDuration_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalPeriodType
- * Method: init
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_init__J
- (JNIEnv* env, jobject thisICalPeriodType, jlong data)
-{
- // copy all fields from the c struct (data) to the java object (thisICalTimeType).
- jni_SetAll_in_ICalPeriodType((ICalPeriodType*)data,env,thisICalPeriodType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalPeriodType
- * Method: initFIDs
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_initFIDs(JNIEnv *env, jclass clazz) {
- initICalPeriodTypeFieldIDs(env, clazz);
-}
diff --git a/libical/src/java/jniICalPeriodType_cxx.h b/libical/src/java/jniICalPeriodType_cxx.h
deleted file mode 100644
index 458e20a198..0000000000
--- a/libical/src/java/jniICalPeriodType_cxx.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*======================================================================
- FILE: jniICalPeriodType_cxx.h
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _jni_ICalPeriodType_H
-#define _jni_ICalPeriodType_H
-#include <jni.h>
-
-// I forgot how to do this using a typedef in c++!!!!
-#define ICalPeriodType icalperiodtype
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ical.h"
-
-static void initICalPeriodTypeFieldIDs(JNIEnv* env, jclass clazz);
-
-void jni_SetStart_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-void jni_GetStart_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-void jni_SetEnd_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-void jni_GetEnd_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-void jni_SetDuration_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-void jni_GetDuration_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType);
-
-void jni_SetAll_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType);
-void jni_GetAll_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType);
-
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_init__J(JNIEnv* env, jobject thisICalPeriodType, jlong data);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_initFIDs(JNIEnv *env, jclass clazz);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libical/src/java/jniICalRecurrenceType_cxx.cpp b/libical/src/java/jniICalRecurrenceType_cxx.cpp
deleted file mode 100644
index 48698b90f2..0000000000
--- a/libical/src/java/jniICalRecurrenceType_cxx.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jniICalRecurrenceType_cxx.cpp
- CREATOR: structConverter
-======================================================================*/
-
-#include <jni.h>
-
-#include "jniICalRecurrenceType_cxx.h"
-#include "jniICalTimeType_cxx.h"
-
-static jfieldID ICalRecurrenceType_Until_FID;
-static jfieldID ICalRecurrenceType_Freq_FID;
-static jfieldID ICalRecurrenceType_Week_start_FID;
-
-static jfieldID ICalRecurrenceType_Count_FID;
-static jfieldID ICalRecurrenceType_Interval_FID;
-static jfieldID ICalRecurrenceType_By_second_FID;
-static jfieldID ICalRecurrenceType_By_minute_FID;
-static jfieldID ICalRecurrenceType_By_hour_FID;
-static jfieldID ICalRecurrenceType_By_day_FID;
-static jfieldID ICalRecurrenceType_By_month_day_FID;
-static jfieldID ICalRecurrenceType_By_year_day_FID;
-static jfieldID ICalRecurrenceType_By_week_no_FID;
-static jfieldID ICalRecurrenceType_By_month_FID;
-static jfieldID ICalRecurrenceType_By_set_pos_FID;
-
-
-void initICalRecurrenceTypeFieldIDs(JNIEnv* env, jclass clazz)
-{
- ICalRecurrenceType_Until_FID = env->GetFieldID(clazz, "until", "Lnet/cp/jlibical/ICalTimeType;");
- ICalRecurrenceType_Freq_FID = env->GetFieldID(clazz, "freq", "I");
- ICalRecurrenceType_Week_start_FID = env->GetFieldID(clazz, "week_start", "I");
- ICalRecurrenceType_Count_FID = env->GetFieldID(clazz, "count", "I");
- ICalRecurrenceType_Interval_FID = env->GetFieldID(clazz, "interval", "S");
- ICalRecurrenceType_By_second_FID = env->GetFieldID(clazz, "by_second", "[S");
- ICalRecurrenceType_By_minute_FID = env->GetFieldID(clazz, "by_minute", "[S");
- ICalRecurrenceType_By_hour_FID = env->GetFieldID(clazz, "by_hour", "[S");
- ICalRecurrenceType_By_day_FID = env->GetFieldID(clazz, "by_day", "[S");
- ICalRecurrenceType_By_month_day_FID = env->GetFieldID(clazz, "by_month_day", "[S");
- ICalRecurrenceType_By_year_day_FID = env->GetFieldID(clazz, "by_year_day", "[S");
- ICalRecurrenceType_By_week_no_FID = env->GetFieldID(clazz, "by_week_no", "[S");
- ICalRecurrenceType_By_month_FID = env->GetFieldID(clazz, "by_month", "[S");
- ICalRecurrenceType_By_set_pos_FID = env->GetFieldID(clazz, "by_set_pos", "[S");
-}
-
-void jni_SetUntil_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_Until_FID);
- jni_SetYear_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetMonth_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetDay_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetHour_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetMinute_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetSecond_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetIs_utc_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetIs_date_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_SetZone_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
-}
-
-void jni_GetUntil_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_Until_FID);
- jni_GetYear_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetMonth_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetDay_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetHour_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetMinute_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetSecond_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetIs_utc_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetIs_date_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
- jni_GetZone_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0);
-}
-
-void jni_SetFreq_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Freq_FID, (jint) __ICalRecurrenceType_->freq);
-}
-
-void jni_GetFreq_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- __ICalRecurrenceType_->freq = (icalrecurrencetype_frequency) env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Freq_FID);
-}
-
-void jni_SetWeek_start_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Week_start_FID, (jint) __ICalRecurrenceType_->week_start);
-}
-
-void jni_GetWeek_start_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- __ICalRecurrenceType_->week_start = (icalrecurrencetype_weekday) env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Week_start_FID);
-}
-
-void jni_SetCount_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Count_FID, (jint) __ICalRecurrenceType_->count);
-}
-
-void jni_GetCount_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- __ICalRecurrenceType_->count = env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Count_FID);
-}
-
-void jni_SetInterval_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- env->SetShortField(thisICalRecurrenceType, ICalRecurrenceType_Interval_FID, (jshort) __ICalRecurrenceType_->interval);
-}
-
-void jni_GetInterval_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- __ICalRecurrenceType_->interval = env->GetShortField(thisICalRecurrenceType, ICalRecurrenceType_Interval_FID);
-}
-
-void jni_SetBy_second_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_second_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_second[0]));
-}
-
-void jni_GetBy_second_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_second_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_second[0]));
-}
-
-void jni_SetBy_minute_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_minute_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_minute[0]));
-}
-
-void jni_GetBy_minute_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_minute_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_minute[0]));
-}
-
-void jni_SetBy_hour_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_hour_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,25, (jshort*)&(__ICalRecurrenceType_->by_hour[0]));
-}
-
-void jni_GetBy_hour_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_hour_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,25, (jshort*)&(__ICalRecurrenceType_->by_hour[0]));
-}
-
-void jni_SetBy_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_day_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,364, (jshort*)&(__ICalRecurrenceType_->by_day[0]));
-}
-
-void jni_GetBy_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_day_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,364, (jshort*)&(__ICalRecurrenceType_->by_day[0]));
-}
-
-void jni_SetBy_month_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_day_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,32, (jshort*)&(__ICalRecurrenceType_->by_month_day[0]));
-}
-
-void jni_GetBy_month_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_day_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,32, (jshort*)&(__ICalRecurrenceType_->by_month_day[0]));
-}
-
-void jni_SetBy_year_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_year_day_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_year_day[0]));
-}
-
-void jni_GetBy_year_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_year_day_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_year_day[0]));
-}
-
-void jni_SetBy_week_no_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_week_no_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,54, (jshort*)&(__ICalRecurrenceType_->by_week_no[0]));
-}
-
-void jni_GetBy_week_no_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_week_no_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,54, (jshort*)&(__ICalRecurrenceType_->by_week_no[0]));
-}
-
-void jni_SetBy_month_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,13, (jshort*)&(__ICalRecurrenceType_->by_month[0]));
-}
-
-void jni_GetBy_month_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,13, (jshort*)&(__ICalRecurrenceType_->by_month[0]));
-}
-
-void jni_SetBy_set_pos_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_set_pos_FID);
- env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_set_pos[0]));
-}
-
-void jni_GetBy_set_pos_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType)
-{
- jclass elem_clazz;
- jboolean isCopy;
- int ix0;
- jobject lcl_jobj0;
- jarray lcl_jobjA0;
- lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_set_pos_FID);
- env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_set_pos[0]));
-}
-void jni_SetAll_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType)
-{
- jni_SetUntil_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetFreq_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetWeek_start_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetCount_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetInterval_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_second_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_minute_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_hour_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_month_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_year_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_week_no_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_month_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_SetBy_set_pos_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
-}
-void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType)
-{
- jni_GetUntil_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetFreq_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetWeek_start_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetCount_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetInterval_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_second_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_minute_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_hour_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_month_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_year_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_week_no_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_month_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
- jni_GetBy_set_pos_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType);
-
-}
-
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data) {
- jni_SetAll_in_ICalRecurrenceType((ICalRecurrenceType*)data,env,thisICalRecurrenceType);
-}
-
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_initFIDs(JNIEnv *env, jclass clazz) {
- initICalRecurrenceTypeFieldIDs(env, clazz);
-}
diff --git a/libical/src/java/jniICalRecurrenceType_cxx.h b/libical/src/java/jniICalRecurrenceType_cxx.h
deleted file mode 100644
index 2f0bf4bae5..0000000000
--- a/libical/src/java/jniICalRecurrenceType_cxx.h
+++ /dev/null
@@ -1,60 +0,0 @@
-
-/*======================================================================
- FILE: jniICalRecurrenceType_cxx.h
- CREATOR: structConverter
-======================================================================*/
-
-#ifndef _jni_ICalRecurrenceType_H_
-#define _jni_ICalRecurrenceType_H_
-#include <jni.h>
-
-#define ICalRecurrenceType icalrecurrencetype
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ical.h"
-
-static void initICalRecurrenceTypeFieldIDs(JNIEnv* env, jclass clazz);
-
-void jni_SetUntil_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetUntil_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetFreq_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetFreq_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetWeek_start_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetWeek_start_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetCount_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetCount_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetInterval_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetInterval_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_second_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_second_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_minute_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_minute_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_hour_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_hour_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_month_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_month_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_year_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_year_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_week_no_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_week_no_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_month_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_month_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetBy_set_pos_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_GetBy_set_pos_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType);
-void jni_SetAll_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType);
-
-void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_initFIDs(JNIEnv *env, jclass clazz);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libical/src/java/jniICalTimeType_cxx.cpp b/libical/src/java/jniICalTimeType_cxx.cpp
deleted file mode 100644
index 341ded7ed0..0000000000
--- a/libical/src/java/jniICalTimeType_cxx.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jniICalTimeType_cxx.cpp
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#include <jni.h>
-
-#ifndef _jni_ICalTimeType_H
-#include "jniICalTimeType_cxx.h"
-#endif
-
-static jfieldID ICalTimeType_Year_FID;
-static jfieldID ICalTimeType_Month_FID;
-static jfieldID ICalTimeType_Day_FID;
-static jfieldID ICalTimeType_Hour_FID;
-static jfieldID ICalTimeType_Minute_FID;
-static jfieldID ICalTimeType_Second_FID;
-static jfieldID ICalTimeType_Is_utc_FID;
-static jfieldID ICalTimeType_Is_date_FID;
-static jfieldID ICalTimeType_Zone_FID;
-
-
-void initICalTimeTypeFieldIDs(JNIEnv* env, jclass clazz)
-{
- ICalTimeType_Year_FID = env->GetFieldID(clazz, "year", "I");
- ICalTimeType_Month_FID = env->GetFieldID(clazz, "month", "I");
- ICalTimeType_Day_FID = env->GetFieldID(clazz, "day", "I");
- ICalTimeType_Hour_FID = env->GetFieldID(clazz, "hour", "I");
- ICalTimeType_Minute_FID = env->GetFieldID(clazz, "minute", "I");
- ICalTimeType_Second_FID = env->GetFieldID(clazz, "second", "I");
- ICalTimeType_Is_utc_FID = env->GetFieldID(clazz, "is_utc", "I");
- ICalTimeType_Is_date_FID = env->GetFieldID(clazz, "is_date", "I");
- ICalTimeType_Zone_FID = env->GetFieldID(clazz, "zone", "Ljava/lang/String;");
-}
-
-void jni_SetYear_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Year_FID, (jint) __ICalTimeType_->year);
-}
-
-void jni_GetYear_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->year = env->GetIntField(thisICalTimeType, ICalTimeType_Year_FID);
-}
-
-void jni_SetMonth_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Month_FID, (jint) __ICalTimeType_->month);
-}
-
-void jni_GetMonth_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->month = env->GetIntField(thisICalTimeType, ICalTimeType_Month_FID);
-}
-
-void jni_SetDay_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Day_FID, (jint) __ICalTimeType_->day);
-}
-
-void jni_GetDay_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->day = env->GetIntField(thisICalTimeType, ICalTimeType_Day_FID);
-}
-
-void jni_SetHour_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Hour_FID, (jint) __ICalTimeType_->hour);
-}
-
-void jni_GetHour_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->hour = env->GetIntField(thisICalTimeType, ICalTimeType_Hour_FID);
-}
-
-void jni_SetMinute_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Minute_FID, (jint) __ICalTimeType_->minute);
-}
-
-void jni_GetMinute_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->minute = env->GetIntField(thisICalTimeType, ICalTimeType_Minute_FID);
-}
-
-void jni_SetSecond_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Second_FID, (jint) __ICalTimeType_->second);
-}
-
-void jni_GetSecond_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->second = env->GetIntField(thisICalTimeType, ICalTimeType_Second_FID);
-}
-
-void jni_SetIs_utc_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Is_utc_FID, (jint) __ICalTimeType_->is_utc);
-}
-
-void jni_GetIs_utc_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->is_utc = env->GetIntField(thisICalTimeType, ICalTimeType_Is_utc_FID);
-}
-
-void jni_SetIs_date_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetIntField(thisICalTimeType, ICalTimeType_Is_date_FID, (jint) __ICalTimeType_->is_date);
-}
-
-void jni_GetIs_date_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->is_date = env->GetIntField(thisICalTimeType, ICalTimeType_Is_date_FID);
-}
-
-void jni_SetZone_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- env->SetObjectField(thisICalTimeType, ICalTimeType_Zone_FID, env->NewStringUTF(icaltime_get_tzid(*__ICalTimeType_)));
-}
-
-void jni_GetZone_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType)
-{
- __ICalTimeType_->zone = icaltimezone_get_builtin_timezone_from_tzid((char*) env->GetStringUTFChars((jstring) env->GetObjectField(thisICalTimeType, ICalTimeType_Zone_FID), NULL));
-}
-
-// copy all fields from the c struct (__ICalTimeType_) to the java object (thisICalTimeType).
-void jni_SetAll_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType)
-{
- jni_SetYear_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetMonth_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetDay_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetHour_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetMinute_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetSecond_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetIs_utc_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetIs_date_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_SetZone_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
-}
-
-// copy all fields from the java object (thisICalTimeType) to the c struct (__ICalTimeType_).
-void jni_GetAll_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType)
-{
- jni_GetYear_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetMonth_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetDay_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetHour_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetMinute_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetSecond_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetIs_utc_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetIs_date_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
- jni_GetZone_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalTimeType
- * Method: init
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_init__J
- (JNIEnv* env, jobject thisICalTimeType, jlong data)
-{
- // copy all fields from the c struct (data) to the java object (thisICalTimeType).
- jni_SetAll_in_ICalTimeType((ICalTimeType*)data,env,thisICalTimeType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalTimeType
- * Method: initFIDs
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_initFIDs(JNIEnv *env, jclass clazz)
-{
- initICalTimeTypeFieldIDs(env, clazz);
-}
diff --git a/libical/src/java/jniICalTimeType_cxx.h b/libical/src/java/jniICalTimeType_cxx.h
deleted file mode 100644
index 5d6f84cee7..0000000000
--- a/libical/src/java/jniICalTimeType_cxx.h
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/*======================================================================
- FILE: jniICalTimeType_cxx.h
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _jni_ICalTimeType_H
-#define _jni_ICalTimeType_H
-#include <jni.h>
-
-// I forgot how to do this using a typedef in c++!!!!
-#define ICalTimeType icaltimetype
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ical.h"
-
-static void initICalTimeTypeFieldIDs(JNIEnv* env, jclass clazz);
-
-void jni_SetYear_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetYear_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetMonth_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetMonth_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetDay_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetDay_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetHour_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetHour_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetMinute_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetMinute_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetSecond_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetSecond_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetIs_utc_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetIs_utc_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetIs_date_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetIs_date_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetZone_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_GetZone_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType);
-void jni_SetAll_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType);
-
-void jni_GetAll_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_initFIDs(JNIEnv *env, jclass clazz);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_init__J(JNIEnv* env, jobject thisICalTimeType, jlong data);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libical/src/java/jniICalTriggerType_cxx.cpp b/libical/src/java/jniICalTriggerType_cxx.cpp
deleted file mode 100644
index b4140c8f1a..0000000000
--- a/libical/src/java/jniICalTriggerType_cxx.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: jniICalTriggerType_cxx.cpp
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#include <jni.h>
-
-#include "jniICalTriggerType_cxx.h"
-#include "jniICalTimeType_cxx.h"
-#include "jniICalDurationType_cxx.h"
-
-static jfieldID ICalTriggerType_Time_FID;
-static jfieldID ICalTriggerType_Duration_FID;
-
-
-void initICalTriggerTypeFieldIDs(JNIEnv* env, jclass clazz)
-{
- ICalTriggerType_Time_FID = env->GetFieldID(clazz, "time", "Lnet/cp/jlibical/ICalTimeType;");
- ICalTriggerType_Duration_FID = env->GetFieldID(clazz, "duration", "Lnet/cp/jlibical/ICalDurationType;");
-}
-
-void jni_SetTime_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Time_FID);
- jni_SetYear_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetMonth_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetDay_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetHour_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetMinute_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetSecond_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetIs_utc_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetIs_date_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_SetZone_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
-}
-
-void jni_GetTime_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Time_FID);
- jni_GetYear_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetMonth_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetDay_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetHour_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetMinute_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetSecond_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetIs_utc_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetIs_date_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
- jni_GetZone_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0);
-}
-
-void jni_SetDuration_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Duration_FID);
- jni_SetIs_neg_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_SetDays_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_SetWeeks_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_SetHours_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_SetMinutes_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_SetSeconds_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
-}
-
-void jni_GetDuration_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType)
-{
- jobject lcl_jobj0;
- lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Duration_FID);
- jni_GetIs_neg_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_GetDays_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_GetWeeks_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_GetHours_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_GetMinutes_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
- jni_GetSeconds_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0);
-}
-
-// copy all fields from the c struct (__ICalTriggerType_) to the java object (thisICalTriggerType).
-void jni_SetAll_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType)
-{
- jni_SetTime_in_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType);
- jni_SetDuration_in_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType);
-}
-
-// copy all fields from the java object (thisICalTriggerType) to the c struct (__ICalTriggerType_).
-void jni_GetAll_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType)
-{
- jni_GetTime_from_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType);
- jni_GetDuration_from_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalTriggerType
- * Method: init
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_init__J
- (JNIEnv* env, jobject thisICalTriggerType, jlong data)
-{
- // copy all fields from the c struct (data) to the java object (thisICalTimeType).
- jni_SetAll_in_ICalTriggerType((ICalTriggerType*)data,env,thisICalTriggerType);
-}
-
-/*
- * Class: net_cp_jlibical_ICalTriggerType
- * Method: initFIDs
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_initFIDs(JNIEnv *env, jclass clazz) {
- initICalTriggerTypeFieldIDs(env, clazz);
-}
diff --git a/libical/src/java/jniICalTriggerType_cxx.h b/libical/src/java/jniICalTriggerType_cxx.h
deleted file mode 100644
index 62d6ec3e90..0000000000
--- a/libical/src/java/jniICalTriggerType_cxx.h
+++ /dev/null
@@ -1,39 +0,0 @@
-
-/*======================================================================
- FILE: jniICalTriggerType_cxx.h
- CREATOR: structConverter
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _jni_ICalTriggerType_H
-#define _jni_ICalTriggerType_H
-#include <jni.h>
-
-// I forgot how to do this using a typedef in c++!!!!
-#define ICalTriggerType icaltriggertype
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ical.h"
-
-static void initICalTriggerTypeFieldIDs(JNIEnv* env, jclass clazz);
-
-void jni_SetTime_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType);
-void jni_GetTime_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType);
-void jni_SetDuration_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType);
-void jni_GetDuration_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType);
-void jni_SetAll_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType);
-
-void jni_GetAll_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_init__J(JNIEnv* env, jobject thisICalTriggerType, jlong data);
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_initFIDs(JNIEnv *env, jclass clazz);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libical/src/java/net_cp_jlibical_ICalParameter_cxx.cpp b/libical/src/java/net_cp_jlibical_ICalParameter_cxx.cpp
deleted file mode 100644
index 2157473927..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalParameter_cxx.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: net_cp_jlibical_ICalParameter_cxx.cpp
- CREATOR: gnorman 1/10/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef NET_CP_JLIBICAL_ICALPARAMETER_CXX_H
-#include "net_cp_jlibical_ICalParameter_cxx.h"
-#endif
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#include "jlibical_consts_cxx.h"
-#endif
-
-#ifndef JLIBICAL_UTILS_CXX_H
-#include "jlibical_utils_cxx.h"
-#endif
-
-#ifndef ICALPARAMETER_CXX_H
-#include "icalparameter_cxx.h"
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_as_1ical_1string
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->as_ical_string();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_isa
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->isa();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: isa_parameter
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalParameter_isa_1parameter
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- jboolean result = 0;
-
- // get the c++ object from the jobj
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the c++ object from the arg
- void* argObjPtr = 0;
-
- if (arg != NULL)
- {
- argObjPtr = getCObjectPtr(env,arg);
- }
-
- // get the result from the c++ object (candidateValue can be 0, it's cObj's responsibility to handle this if an error).
- result = cObj->isa_parameter(argObjPtr) != 0;
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_language
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_get_1language
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_language();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_language
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1language
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_language((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_encoding
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1encoding
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_encoding();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_encoding
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1encoding
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_encoding((icalparameter_encoding)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_role
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1role
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_role();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_role
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1role
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_role((icalparameter_role)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_partstat
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1partstat
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_partstat();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_partstat
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1partstat
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_partstat((icalparameter_partstat)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__
- (JNIEnv *env, jobject jobj)
-{
- setCObjectPtr(env,jobj,new ICalParameter());
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__Ljava_lang_String_2
- (JNIEnv *env, jobject jobj, jstring str)
-{
- if (str != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- setCObjectPtr(env,jobj,new ICalParameter((char*)szTemp));
- env->ReleaseStringUTFChars(str,szTemp);
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ILjava_lang_String_2
- (JNIEnv *env, jobject jobj, jint kind, jstring str)
-{
- if (str != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- setCObjectPtr(env,jobj,new ICalParameter((icalparameter_kind)kind,(char*)szTemp));
- env->ReleaseStringUTFChars(str,szTemp);
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__I
- (JNIEnv *env, jobject jobj, jint kind)
-{
- setCObjectPtr(env,jobj,new ICalParameter((icalparameter_kind)kind));
-}
diff --git a/libical/src/java/net_cp_jlibical_ICalParameter_cxx.h b/libical/src/java/net_cp_jlibical_ICalParameter_cxx.h
deleted file mode 100644
index f2fef299a4..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalParameter_cxx.h
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*======================================================================
- FILE: net_cp_jlibical_ICalParameter_cxx.h
- CREATOR: javah 1/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _Included_net_cp_jlibical_ICalParameter
-#define _Included_net_cp_jlibical_ICalParameter
-
-#ifndef JNI_H
-#include <jni.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_as_1ical_1string
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_isa
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: isa_parameter
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalParameter_isa_1parameter
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_language
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_get_1language
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_language
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1language
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_encoding
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1encoding
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_encoding
- * Signature: (I)V
- */
-
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1encoding
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_role
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1role
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_role
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1role
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: get_partstat
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1partstat
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: set_partstat
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1partstat
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__Ljava_lang_String_2
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ILjava_lang_String_2
- (JNIEnv *, jobject, jint, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalParameter
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__I
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/libical/src/java/net_cp_jlibical_ICalProperty_cxx.cpp b/libical/src/java/net_cp_jlibical_ICalProperty_cxx.cpp
deleted file mode 100644
index 4334354bd8..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalProperty_cxx.cpp
+++ /dev/null
@@ -1,1690 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: net_cp_jlibical_ICalProperty_cxx.cpp
- CREATOR: gnorman 1/10/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef NET_CP_JLIBICAL_ICALPROPERTY_CXX_H
-#include "net_cp_jlibical_ICalProperty_cxx.h"
-#endif
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#include "jlibical_consts_cxx.h"
-#endif
-
-#ifndef JLIBICAL_UTILS_CXX_H
-#include "jlibical_utils_cxx.h"
-#endif
-
-#ifndef ICALPROPERTY_CXX_H
-#include "icalproperty_cxx.h"
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_as_1ical_1string
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->as_ical_string();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_isa
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->isa();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: isa_property
- * Signature: (Ljava/lang/Object;)I
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalProperty_isa_1property
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- jboolean result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- void* argObjPtr = 0;
-
- if (arg != NULL)
- {
- argObjPtr = getCObjectPtr(env,arg);
- }
-
- // get the result from the c++ object (argObjPtr can be 0, it's cObj's responsibility to handle this if an error).
- result = cObj->isa_property(argObjPtr) != 0;
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: add_parameter
- * Signature: (Lnet/cp/jlibical/ICalParameter;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_add_1parameter
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- ICalParameter* icalparameter = getSubjectAsICalParameter(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (icalparameter != NULL)
- {
- cObj->add_parameter(*icalparameter);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_parameter
- * Signature: (Lnet/cp/jlibical/ICalParameter;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- ICalParameter* icalparameter = getSubjectAsICalParameter(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (icalparameter != NULL)
- {
- cObj->set_parameter(*icalparameter);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_parameter_from_string
- * Signature: (Ljava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter_1from_1string
- (JNIEnv *env, jobject jobj, jstring name, jstring value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szName = env->GetStringUTFChars(name,NULL);
- const char* szValue = env->GetStringUTFChars(value,NULL);
-
- if (szName != NULL && szValue != NULL)
- {
- cObj->set_parameter_from_string((string)szName, (string)szValue);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_parameter_as_string
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1parameter_1as_1string
- (JNIEnv *env, jobject jobj, jstring name)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szName = env->GetStringUTFChars(name,NULL);
-
- if (szName != NULL)
- {
- char* szValue = cObj->get_parameter_as_string((string)szName);
-
- if (szValue == NULL)
- {
- szValue = "";
- }
-
- result = env->NewStringUTF(szValue);
- }
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: remove_parameter
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_remove_1parameter
- (JNIEnv *env, jobject jobj, jint kind)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->remove_parameter((icalparameter_kind)kind);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: count_parameters
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_count_1parameters
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->count_parameters();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_first_parameter
- * Signature: (I)Lnet/cp/jlibical/ICalParameter;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1first_1parameter
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first parameter from CObj
- ICalParameter* aParameter = cObj->get_first_parameter((icalparameter_kind)kind);
-
- // create a new surrogate, using aParameter as the subject (returns NULL if subject is NULL).
- result = createNewICalParameterSurrogate(env,aParameter);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_next_parameter
- * Signature: (I)Lnet/cp/jlibical/ICalParameter;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1next_1parameter
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first parameter from CObj
- ICalParameter* aParameter = cObj->get_next_parameter((icalparameter_kind)kind);
-
- // create a new surrogate, using aParameter as the subject (returns NULL if subject is NULL).
- result = createNewICalParameterSurrogate(env,aParameter);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_value
- * Signature: (Lnet/cp/jlibical/ICalValue;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- ICalValue* aValue = getSubjectAsICalValue(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
- cObj->set_value(*aValue);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_value_from_string
- * Signature: (Ljava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value_1from_1string
- (JNIEnv *env, jobject jobj, jstring name, jstring value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szName = env->GetStringUTFChars(name,NULL);
- const char* szValue = env->GetStringUTFChars(value,NULL);
-
- if (szName != NULL && szValue != NULL)
- {
- cObj->set_value_from_string((string)szName, (string)szValue);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_value
- * Signature: ()Lnet/cp/jlibical/ICalValue;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1value
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first value from CObj
- ICalValue* aValue = cObj->get_value();
-
- // create a new surrogate, using aValue as the subject (returns NULL if subject is NULL).
- result = createNewICalValueSurrogate(env,aValue);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_value_as_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1value_1as_1string
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_value_as_string();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_name
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1name
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_name();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_action
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1action
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_action((icalproperty_action)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_action
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1action
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_action();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_attendee
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1attendee
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_attendee((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_attendee
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1attendee
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_attendee();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_comment
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1comment
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_comment((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_comment
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1comment
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* commentStr = cObj->get_comment();
-
- if (commentStr == NULL)
- {
- commentStr = "";
- }
-
- result = env->NewStringUTF(commentStr);
- }
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_description
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1description
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_description((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_description
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1description
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_description();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtend
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtend
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aTime;
-
- if (copyObjToicaltimetype(env,arg,&aTime))
- {
- cObj->set_dtend(aTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtend
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtend
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaltimetype aTime = cObj->get_dtend();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTimeType(env,&aTime);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtstamp
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstamp
- (JNIEnv *env, jobject jobj, jobject dtstamp)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aDTStamp;
-
- if (copyObjToicaltimetype(env,dtstamp,&aDTStamp))
- {
- cObj->set_dtstamp(aDTStamp);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtstamp
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstamp
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtstamp time from CObj
- icaltimetype aDTStamp = cObj->get_dtstamp();
-
- // create a new surrogate, using aDTStamp as the subject.
- result = createNewICalTimeType(env,&aDTStamp);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtstart
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstart
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aTime;
-
- if (copyObjToicaltimetype(env,arg,&aTime))
- {
- cObj->set_dtstart(aTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtstart
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstart
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaltimetype aTime = cObj->get_dtstart();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTimeType(env,&aTime);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_due
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1due
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aTime;
-
- if (copyObjToicaltimetype(env,arg,&aTime))
- {
- cObj->set_due(aTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_due
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1due
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaltimetype aTime = cObj->get_due();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTimeType(env,&aTime);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1duration
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaldurationtype aDuration;
-
- if (copyObjToicaldurationtype(env,arg,&aDuration))
- {
- cObj->set_duration(aDuration);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1duration
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaldurationtype aDuration = cObj->get_duration();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalDurationType(env,&aDuration);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_location
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1location
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_location((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_location
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1location
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_location();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1method
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_method((icalproperty_method)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1method
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_method();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_organizer
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1organizer
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_organizer((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_organizer
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1organizer
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* organizerStr = cObj->get_organizer();
-
- if (organizerStr == NULL)
- {
- organizerStr = "";
- }
-
- result = env->NewStringUTF(organizerStr);
- }
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_owner
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1owner
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_owner((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_owner
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1owner
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_owner();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_prodid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1prodid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_prodid((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_prodid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1prodid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_prodid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_query
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1query
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_query((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_query
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1query
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_query();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_queryname
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1queryname
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_queryname((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_queryname
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1queryname
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_queryname();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_repeat
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1repeat
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_repeat(value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_repeat
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1repeat
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_repeat();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_summary
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1summary
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_summary((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_summary
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1summary
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_summary();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_target
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1target
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_target((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_target
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1target
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_target();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_trigger
- * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1trigger
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltriggertype aTrigger;
-
- if (copyObjToicaltriggertype(env,arg,&aTrigger))
- {
- cObj->set_trigger(aTrigger);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_trigger
- * Signature: ()Lnet/cp/jlibical/ICalTriggerType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1trigger
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaltriggertype aTrigger = cObj->get_trigger();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTriggerType(env,&aTrigger);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_tzid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1tzid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_tzid((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_tzid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1tzid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_tzid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_uid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1uid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_uid((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_uid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1uid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_uid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__
- (JNIEnv *env, jobject jobj)
-{
- setCObjectPtr(env,jobj,new ICalProperty());
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__Ljava_lang_String_2
- (JNIEnv *env, jobject jobj, jstring str)
-{
- if (str != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- setCObjectPtr(env,jobj,new ICalProperty((char*)szTemp));
- env->ReleaseStringUTFChars(str,szTemp);
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__I
- (JNIEnv *env, jobject jobj, jint kind)
-{
- setCObjectPtr(env,jobj,new ICalProperty((icalproperty_kind)kind));
-}
-
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_status
- * Signature: (I)V
- */
-
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1status
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_status((icalproperty_status)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_status
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1status
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_status();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_relcalid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1relcalid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_relcalid((char *)szTemp);
-
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_relcalid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1relcalid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_relcalid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_exdate
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exdate
- (JNIEnv *env, jobject jobj, jobject exdate)
-{
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aExDate;
-
- if (copyObjToicaltimetype(env,exdate,&aExDate))
- {
- cObj->set_exdate(aExDate);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_exdate
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exdate
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the exdate from CObj
- icaltimetype aExDate = cObj->get_exdate();
-
- // create a new surrogate, using aRecurrenceId as the subject.
- result = createNewICalTimeType(env,&aExDate);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_exrule
- * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exrule
- (JNIEnv *env, jobject jobj, jobject exrule)
-{
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- icalrecurrencetype aExRule;
- if (copyObjToicalrecurrencetype(env,exrule,&aExRule))
- {
- cObj->set_exrule(aExRule);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_exrule
- * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exrule
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the exrule from CObj
- icalrecurrencetype aExRule = cObj->get_exrule();
-
- // create a new surrogate, using aExRule as the subject.
- result = createNewICalRecurrenceType(env,&aExRule);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_freebusy
- * Signature: (Lnet/cp/jlibical/ICalPeriodType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1freebusy
- (JNIEnv *env, jobject jobj, jobject period)
-{
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icalperiodtype aPeriod;
-
- if (copyObjToicalperiodtype(env,period,&aPeriod))
- {
- cObj->set_freebusy(aPeriod);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_freebusy
- * Signature: ()Lnet/cp/jlibical/ICalPeriodType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1freebusy
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the period from CObj
- icalperiodtype aPeriod = cObj->get_freebusy();
-
- // create a new surrogate, using aPeriod as the subject.
- result = createNewICalPeriodType(env,&aPeriod);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_recurrenceid
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1recurrenceid
- (JNIEnv *env, jobject jobj, jobject recurrenceid)
-{
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aRecurrenceId;
-
- if (copyObjToicaltimetype(env,recurrenceid,&aRecurrenceId))
- {
- cObj->set_recurrenceid(aRecurrenceId);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_recurrenceid
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1recurrenceid
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the exdate from CObj
- icaltimetype aRecurrenceId = cObj->get_recurrenceid();
-
- // create a new surrogate, using aRecurrenceId as the subject.
- result = createNewICalTimeType(env,&aRecurrenceId);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_rrule
- * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1rrule
- (JNIEnv *env, jobject jobj, jobject rrule)
-{
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icalrecurrencetype aRRule;
-
- if (copyObjToicalrecurrencetype(env,rrule,&aRRule))
- {
- cObj->set_rrule(aRRule);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_rrule
- * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1rrule
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the ICalProperty c++ object from jobj
- ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the rrule from CObj
- icalrecurrencetype aRRule = cObj->get_rrule();
-
- // create a new surrogate, using aExRule as the subject.
- result = createNewICalRecurrenceType(env,&aRRule);
- }
-
- return(result);
-}
diff --git a/libical/src/java/net_cp_jlibical_ICalProperty_cxx.h b/libical/src/java/net_cp_jlibical_ICalProperty_cxx.h
deleted file mode 100644
index 686ae9a0e8..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalProperty_cxx.h
+++ /dev/null
@@ -1,654 +0,0 @@
-
-/*======================================================================
- FILE: net_cp_jlibical_ICalProperty_cxx.h
- CREATOR: javah 1/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _Included_net_cp_jlibical_ICalProperty
-#define _Included_net_cp_jlibical_ICalProperty
-
-#ifndef JNI_H
-#include <jni.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_as_1ical_1string
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_isa
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: isa_property
- * Signature: (Ljava/lang/Object;)I
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalProperty_isa_1property
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: add_parameter
- * Signature: (Lnet/cp/jlibical/ICalParameter;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_add_1parameter
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_parameter
- * Signature: (Lnet/cp/jlibical/ICalParameter;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_parameter_from_string
- * Signature: (Ljava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter_1from_1string
- (JNIEnv *, jobject, jstring, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_parameter_as_string
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1parameter_1as_1string
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: remove_parameter
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_remove_1parameter
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: count_parameters
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_count_1parameters
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_first_parameter
- * Signature: (I)Lnet/cp/jlibical/ICalParameter;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1first_1parameter
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_next_parameter
- * Signature: (I)Lnet/cp/jlibical/ICalParameter;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1next_1parameter
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_value
- * Signature: (Lnet/cp/jlibical/ICalValue;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_value_from_string
- * Signature: (Ljava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value_1from_1string
- (JNIEnv *, jobject, jstring, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_value
- * Signature: ()Lnet/cp/jlibical/ICalValue;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1value
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_value_as_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1value_1as_1string
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_name
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1name
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: icalparameter_value_to_value_kind
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_icalparameter_1value_1to_1value_1kind
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_action
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1action
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_action
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1action
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_attendee
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1attendee
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_attendee
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1attendee
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_comment
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1comment
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_comment
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1comment
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_description
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1description
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_description
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1description
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtend
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtend
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtend
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtend
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtstamp
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstamp
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtstamp
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstamp
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_dtstart
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstart
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_dtstart
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstart
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_due
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1due
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_due
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1due
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1duration
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1duration
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_location
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1location
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_location
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1location
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1method
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1method
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_organizer
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1organizer
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_organizer
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1organizer
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_owner
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1owner
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_owner
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1owner
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_prodid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1prodid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_prodid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1prodid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_query
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1query
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_query
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1query
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_queryname
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1queryname
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_queryname
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1queryname
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_repeat
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1repeat
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_repeat
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1repeat
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_summary
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1summary
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_summary
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1summary
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_target
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1target
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_target
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1target
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_trigger
- * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1trigger
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_trigger
- * Signature: ()Lnet/cp/jlibical/ICalTriggerType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1trigger
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_tzid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1tzid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_tzid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1tzid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_uid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1uid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_uid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1uid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__Ljava_lang_String_2
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__ILjava_lang_String_2
- (JNIEnv *, jobject, jint, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__I
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_status
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1status
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_status
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1status
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_relcalid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1relcalid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_relcalid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1relcalid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_exdate
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exdate
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_exdate
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exdate
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_exrule
- * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exrule
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_exrule
- * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exrule
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_freebusy
- * Signature: (Lnet/cp/jlibical/ICalPeriodType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1freebusy
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_freebusy
- * Signature: ()Lnet/cp/jlibical/ICalPeriodType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1freebusy
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_recurrenceid
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1recurrenceid
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_recurrenceid
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1recurrenceid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: set_rrule
- * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1rrule
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalProperty
- * Method: get_rrule
- * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1rrule
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp b/libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp
deleted file mode 100644
index de2adac88f..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp
+++ /dev/null
@@ -1,436 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: net_cp_jlibical_ICalValue_cxx.cpp
- CREATOR: gnorman 1/10/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef NET_CP_JLIBICAL_ICALVALUE_CXX_H
-#include "net_cp_jlibical_ICalValue_cxx.h"
-#endif
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#include "jlibical_consts_cxx.h"
-#endif
-
-#ifndef JLIBICAL_UTILS_CXX_H
-#include "jlibical_utils_cxx.h"
-#endif
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_as_1ical_1string
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->as_ical_string();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_isa
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->isa();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: isa_value
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalValue_isa_1value
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- jboolean result = 0;
-
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the c++ object from arg
- void* argObjPtr = 0;
-
- if (arg != NULL)
- {
- argObjPtr = getCObjectPtr(env,jobj);
- }
-
- // get the result from the c++ object
- result = cObj->isa_value(argObjPtr) != 0;
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_trigger
- * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1trigger
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- icaltriggertype aTrigger;
-
- if (copyObjToicaltriggertype(env,arg,&aTrigger))
- {
- cObj->set_trigger(aTrigger);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_trigger
- * Signature: ()Lnet/cp/jlibical/ICalTriggerType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1trigger
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
-
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the trigger from CObj
- icaltriggertype aTrigger = cObj->get_trigger();
-
- // create a new surrogate, using aTrigger as the subject.
- result = createNewICalTriggerType(env,&aTrigger);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1method
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_method();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1method
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_method((icalproperty_method)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_text
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1text
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_text();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_text
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1text
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_text((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1duration
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
-
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the duration from CObj
- icaldurationtype aDuration = cObj->get_duration();
-
- // create a new surrogate, using aDuration as the subject.
- result = createNewICalDurationType(env,&aDuration);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1duration
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaldurationtype aDuration;
-
- if (copyObjToicaldurationtype(env,arg,&aDuration))
- {
- cObj->set_duration(aDuration);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_query
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1query
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_query();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_query
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1query
- (JNIEnv *env, jobject jobj, jstring str)
-{
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_query((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_datetime
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1datetime
- (JNIEnv *env, jobject jobj)
-{
- jobject result = NULL;
-
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aTime = cObj->get_datetime();
- result = createNewICalTimeType(env,&aTime);
- }
-
- return (result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_datetime
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1datetime
- (JNIEnv *env, jobject jobj, jobject arg)
-{
- // get the c++ object from the jobj
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aTime;
-
- if (copyObjToicaltimetype(env,arg,&aTime))
- {
- cObj->set_datetime(aTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_action
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1action
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_action();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_action
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1action
- (JNIEnv *env, jobject jobj, jint value)
-{
- ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_action((icalproperty_action)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__
- (JNIEnv *env, jobject jobj)
-{
- setCObjectPtr(env,jobj,new ICalValue());
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ILjava_lang_String_2
- (JNIEnv *env, jobject jobj, jint kind, jstring str)
-{
- if (str != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- setCObjectPtr(env,jobj,new ICalValue((icalvalue_kind)kind,(char*)szTemp));
- env->ReleaseStringUTFChars(str,szTemp);
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-}
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__I
- (JNIEnv *env, jobject jobj, jint kind)
-{
- setCObjectPtr(env,jobj,new ICalValue((icalvalue_kind)kind));
-}
diff --git a/libical/src/java/net_cp_jlibical_ICalValue_cxx.h b/libical/src/java/net_cp_jlibical_ICalValue_cxx.h
deleted file mode 100644
index 989cf59a99..0000000000
--- a/libical/src/java/net_cp_jlibical_ICalValue_cxx.h
+++ /dev/null
@@ -1,182 +0,0 @@
-
-/*======================================================================
- FILE: net_cp_jlibical_ICalValue_cxx.h
- CREATOR: javah 1/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _Included_net_cp_jlibical_ICalValue
-#define _Included_net_cp_jlibical_ICalValue
-
-#ifndef JNI_H
-#include <jni.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_as_1ical_1string
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_isa
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: isa_value
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalValue_isa_1value
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_trigger
- * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1trigger
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_trigger
- * Signature: ()Lnet/cp/jlibical/ICalTriggerType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1trigger
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1method
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1method
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_text
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1text
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_text
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1text
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1duration
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1duration
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_query
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1query
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_query
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1query
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_datetime
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1datetime
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_datetime
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1datetime
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: get_action
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1action
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: set_action
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1action
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ILjava_lang_String_2
- (JNIEnv *, jobject, jint, jstring);
-
-/*
- * Class: net_cp_jlibical_ICalValue
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__I
- (JNIEnv *, jobject, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/libical/src/java/net_cp_jlibical_VComponent_cxx.cpp b/libical/src/java/net_cp_jlibical_VComponent_cxx.cpp
deleted file mode 100644
index e9dc6a4cc8..0000000000
--- a/libical/src/java/net_cp_jlibical_VComponent_cxx.cpp
+++ /dev/null
@@ -1,956 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: net_cp_jlibical_VComponent_cxx.cpp
- CREATOR: gnorman 1/10/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef NET_CP_JLIBICAL_VCOMPONENT_CXX_H
-#include "net_cp_jlibical_VComponent_cxx.h"
-#endif
-
-#ifndef JLIBICAL_CONSTS_CXX_H
-#include "jlibical_consts_cxx.h"
-#endif
-
-#ifndef JLIBICAL_UTILS_CXX_H
-#include "jlibical_utils_cxx.h"
-#endif
-
-#ifndef VCOMPONENT_CXX_H
-#include "vcomponent.h"
-#endif
-
-#ifndef ICALPROPERTY_CXX_H
-#include "icalproperty_cxx.h"
-#endif
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_as_1ical_1string
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->as_ical_string();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_isa
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->isa();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: isa_component
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_VComponent_isa_1component
- (JNIEnv *env, jobject jobj, jobject candidateObj)
-{
- jboolean result = 0;
-
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- void* candidateValue = 0;
-
- if (candidateObj != NULL)
- {
- // get the c++ object from candidateObj (as long)
- candidateValue = getCObjectPtr(env,candidateObj);
- }
-
- // get the result from the c++ object (candidateValue can be 0, it's cObj's responsibility to handle this if an error).
- result = cObj->isa_component(candidateValue) != 0;
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: add_property
- * Signature: (Lnet/cp/jlibical/ICalProperty;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1property
- (JNIEnv *env, jobject jobj, jobject jprop)
-{
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the ICalProperty c++ object from jprop
- ICalProperty* icalProperty = getSubjectAsICalProperty(env,jprop,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (icalProperty != NULL)
- {
- cObj->add_property(icalProperty);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: remove_property
- * Signature: (Lnet/cp/jlibical/ICalProperty;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1property
- (JNIEnv *env, jobject jobj, jobject jprop)
-{
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the ICalProperty c++ object from jprop
- ICalProperty* icalProperty = getSubjectAsICalProperty(env,jprop,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (icalProperty != NULL)
- {
- cObj->remove_property(icalProperty);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: count_properties
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1properties
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jint result = 0;
-
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- result = cObj->count_properties((icalproperty_kind)kind);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_current_property
- * Signature: ()Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1property
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the current property from CObj
- ICalProperty* aProperty = cObj->get_current_property();
-
- // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL).
- result = createNewICalPropertySurrogate(env,aProperty);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_property
- * Signature: (I)Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1property
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first property from CObj
- ICalProperty* aProperty = cObj->get_first_property((icalproperty_kind)kind);
-
- // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL).
- result = createNewICalPropertySurrogate(env,aProperty);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_next_property
- * Signature: (I)Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1property
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the next property from CObj
- ICalProperty* aProperty = cObj->get_next_property((icalproperty_kind)kind);
-
- // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL).
- result = createNewICalPropertySurrogate(env,aProperty);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_inner
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1inner
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the next property from CObj
- VComponent* inner = cObj->get_inner();
-
- // create a new surrogate, using inner as the subject (returns NULL if subject is NULL).
- result = createNewVComponentSurrogate(env,inner);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: add_component
- * Signature: (Lnet/cp/jlibical/VComponent;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1component
- (JNIEnv *env, jobject jobj, jobject jcomp)
-{
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the VComponent c++ object from jcomp
- VComponent* aComponent = getSubjectAsVComponent(env,jcomp,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (aComponent != NULL)
- {
- cObj->add_component(aComponent);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: remove_component
- * Signature: (Lnet/cp/jlibical/VComponent;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1component
- (JNIEnv *env, jobject jobj, jobject jcomp)
-{
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- // get the VComponent c++ object from jcomp
- VComponent* aComponent = getSubjectAsVComponent(env,jcomp,JLIBICAL_ERR_ILLEGAL_ARGUMENT);
-
- if (aComponent != NULL)
- {
- cObj->remove_component(aComponent);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: count_components
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1components
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jint result = 0;
-
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
- if (cObj != NULL)
- {
- result = cObj->count_components((icalcomponent_kind)kind);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_current_component
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1component
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the next property from CObj
- VComponent* aComponent = cObj->get_current_component();
-
- // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL).
- result = createNewVComponentSurrogate(env,aComponent);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_component
- * Signature: (I)Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1component
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first component from CObj
- VComponent* aComponent = cObj->get_first_component((icalcomponent_kind)kind);
-
- // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL).
- result = createNewVComponentSurrogate(env,aComponent);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_next_component
- * Signature: (I)Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1component
- (JNIEnv *env, jobject jobj, jint kind)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first component from CObj
- VComponent* aComponent = cObj->get_next_component((icalcomponent_kind)kind);
-
- // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL).
- result = createNewVComponentSurrogate(env,aComponent);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtstart
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstart
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtstart time from CObj
- icaltimetype aTime = cObj->get_dtstart();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTimeType(env,&aTime);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtstart
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstart
- (JNIEnv *env, jobject jobj, jobject dtstart)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aStartTime;
-
- if (copyObjToicaltimetype(env,dtstart,&aStartTime))
- {
- cObj->set_dtstart(aStartTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtend
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtend
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the dtend time from CObj
- icaltimetype aTime = cObj->get_dtend();
-
- // create a new surrogate, using aTime as the subject.
- result = createNewICalTimeType(env,&aTime);
-
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtend
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtend
- (JNIEnv *env, jobject jobj, jobject dtend)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype anEndTime;
-
- if (copyObjToicaltimetype(env,dtend,&anEndTime))
- {
- cObj->set_dtend(anEndTime);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1duration
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the duration time from CObj
- icaldurationtype aDuration = cObj->get_duration();
-
- // create a new surrogate, using aDuration as the subject.
- result = createNewICalDurationType(env,&aDuration);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1duration
- (JNIEnv *env, jobject jobj, jobject duration)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaldurationtype aDuration;
-
- if (copyObjToicaldurationtype(env,duration,&aDuration))
- {
- cObj->set_duration(aDuration);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_get_1method
- (JNIEnv *env, jobject jobj)
-{
- jint result = 0;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- result = cObj->get_method();
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1method
- (JNIEnv *env, jobject jobj, jint value)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- cObj->set_method((icalproperty_method)value);
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_summary
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1summary
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_summary();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_summary
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1summary
- (JNIEnv *env, jobject jobj, jstring str)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_summary((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtstamp
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstamp
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the recurrenceid from CObj
- icaltimetype aDTStamp = cObj->get_dtstamp();
-
- // create a new surrogate, using aRecurrenceId as the subject.
- result = createNewICalTimeType(env,&aDTStamp);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtstamp
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstamp
- (JNIEnv *env, jobject jobj, jobject dtstamp)
-{
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aDTStamp;
-
- if (copyObjToicaltimetype(env,dtstamp,&aDTStamp))
- {
- cObj->set_dtstamp(aDTStamp);
- }
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_location
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1location
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_location();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_location
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1location
- (JNIEnv *env, jobject jobj, jstring str)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_summary((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_description
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1description
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_description();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_description
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1description
- (JNIEnv *env, jobject jobj, jstring str)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_summary((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_uid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1uid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_uid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_uid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1uid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_uid((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_real_component
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1real_1component
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the first component from CObj
- VComponent* aComponent = cObj->get_first_real_component();
-
- // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL).
- result = createNewVComponentSurrogate(env,aComponent);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__
- (JNIEnv *env, jobject jobj)
-{
- setCObjectPtr(env,jobj,new VComponent());
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__Ljava_lang_String_2
- (JNIEnv *env, jobject jobj, jstring str)
-{
- if (str != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- setCObjectPtr(env,jobj,new VComponent((char*)szTemp));
- env->ReleaseStringUTFChars(str,szTemp);
- }
- else
- {
- throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT );
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__I
- (JNIEnv *env, jobject jobj, jint kind)
-{
- setCObjectPtr(env,jobj,new VComponent((icalcomponent_kind)kind));
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_relcalid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1relcalid
- (JNIEnv *env, jobject jobj, jstring str)
-{
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- const char* szTemp = env->GetStringUTFChars(str,NULL);
-
- cObj->set_relcalid((char*)szTemp);
- env->ReleaseStringUTFChars(str,szTemp);
- }
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_relcalid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1relcalid
- (JNIEnv *env, jobject jobj)
-{
- jstring result = NULL;
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- char* icalStr = cObj->get_relcalid();
-
- if (icalStr == NULL)
- {
- icalStr = "";
- }
-
- result = env->NewStringUTF(icalStr);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_recurrenceid
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1recurrenceid
- (JNIEnv *env, jobject jobj)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- // get the recurrenceid from CObj
- icaltimetype aRecurrenceId = cObj->get_recurrenceid();
-
- // create a new surrogate, using aRecurrenceId as the subject.
- result = createNewICalTimeType(env,&aRecurrenceId);
- }
-
- return(result);
-}
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_recurrenceid
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1recurrenceid
- (JNIEnv *env, jobject jobj, jobject recurrenceid)
-{
- jobject result = 0;
- // get the VComponent c++ object from jobj
- VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL);
-
- if (cObj != NULL)
- {
- icaltimetype aRecurrenceId;
-
- if (copyObjToicaltimetype(env,recurrenceid,&aRecurrenceId))
- {
- cObj->set_recurrenceid(aRecurrenceId);
- }
- }
-}
diff --git a/libical/src/java/net_cp_jlibical_VComponent_cxx.h b/libical/src/java/net_cp_jlibical_VComponent_cxx.h
deleted file mode 100644
index ad2dfb60a4..0000000000
--- a/libical/src/java/net_cp_jlibical_VComponent_cxx.h
+++ /dev/null
@@ -1,358 +0,0 @@
-
-/*======================================================================
- FILE: net_cp_jlibical_VComponent_cxx.h
- CREATOR: javah 1/11/02
- (C) COPYRIGHT 2002, Critical Path
-======================================================================*/
-
-#ifndef _Included_net_cp_jlibical_VComponent
-#define _Included_net_cp_jlibical_VComponent
-
-#ifndef JNI_H
-#include <jni.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: as_ical_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_as_1ical_1string
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: isa
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_isa
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: isa_component
- * Signature: (Ljava/lang/Object;)Z
- */
-JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_VComponent_isa_1component
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: add_property
- * Signature: (Lnet/cp/jlibical/ICalProperty;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1property
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: remove_property
- * Signature: (Lnet/cp/jlibical/ICalProperty;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1property
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: count_properties
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1properties
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_current_property
- * Signature: ()Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1property
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_property
- * Signature: (I)Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1property
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_next_property
- * Signature: (I)Lnet/cp/jlibical/ICalProperty;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1property
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_inner
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1inner
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: add_component
- * Signature: (Lnet/cp/jlibical/VComponent;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1component
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: remove_component
- * Signature: (Lnet/cp/jlibical/VComponent;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1component
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: count_components
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1components
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_current_component
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1component
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_component
- * Signature: (I)Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1component
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_next_component
- * Signature: (I)Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1component
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtstart
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstart
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtstart
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstart
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtend
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtend
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtend
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtend
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_duration
- * Signature: ()Lnet/cp/jlibical/ICalDurationType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1duration
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_duration
- * Signature: (Lnet/cp/jlibical/ICalDurationType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1duration
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_method
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_get_1method
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_method
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1method
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_summary
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1summary
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_summary
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1summary
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_dtstamp
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstamp
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_dtstamp
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstamp
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_location
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1location
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_location
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1location
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_description
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1description
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_description
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1description
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_uid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1uid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_uid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1uid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_first_real_component
- * Signature: ()Lnet/cp/jlibical/VComponent;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1real_1component
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__Ljava_lang_String_2
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__I
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_relcalid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1relcalid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_relcalid
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1relcalid
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: get_recurrenceid
- * Signature: ()Lnet/cp/jlibical/ICalTimeType;
- */
-JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1recurrenceid
- (JNIEnv *, jobject);
-
-/*
- * Class: net_cp_jlibical_VComponent
- * Method: set_recurrenceid
- * Signature: (Lnet/cp/jlibical/ICalTimeType;)V
- */
-JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1recurrenceid
- (JNIEnv *, jobject, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/libical/src/java/testjni.java b/libical/src/java/testjni.java
deleted file mode 100644
index a7eb5886a1..0000000000
--- a/libical/src/java/testjni.java
+++ /dev/null
@@ -1,377 +0,0 @@
-package net.cp.jlibical;
-
-import java.lang.String;
-
-public class testjni
-{
- static final String content = "BEGIN:VCALENDAR\nVERSION:2.1\nBEGIN:VEVENT\nUID:abcd12345\nDTSTART:20020307T180000Z\nDTEND:20020307T190000Z\nSUMMARY:Important Meeting\nEND:VEVENT\nEND:VCALENDAR";
- public static void main(String[] args)
- {
- // VAGENDA test case
-
- ICalProperty calidProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RELCALID_PROPERTY);
- ICalProperty ownerProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_OWNER_PROPERTY);
-
- calidProp.set_relcalid("1212");
- ownerProp.set_owner("Bill Smith");
-
- VAgenda vAgenda = new VAgenda();
- vAgenda.add_property(calidProp);
- vAgenda.add_property(ownerProp);
-
- System.out.println("VAgenda:\n" + vAgenda.as_ical_string());
-
- // VEVENT test case
-
- ICalProperty summProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_SUMMARY_PROPERTY);
- ICalProperty startProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTSTART_PROPERTY);
- ICalProperty endProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTEND_PROPERTY);
-
- ICalProperty locationProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_LOCATION_PROPERTY);
- ICalProperty descProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DESCRIPTION_PROPERTY);
-
- ICalTimeType starttime = new ICalTimeType();
- starttime.setYear(2001);
- starttime.setMonth(12);
- starttime.setDay(21);
- starttime.setHour(18);
- starttime.setMinute(0);
- starttime.setSecond(0);
- starttime.setIs_utc(true);
- System.out.println("done creating starttime");
-
- ICalTimeType endtime = new ICalTimeType();
- endtime.setYear(2002);
- endtime.setMonth(1);
- endtime.setDay(1);
- endtime.setHour(8);
- endtime.setMinute(0);
- endtime.setSecond(0);
- endtime.setIs_utc(true);
- System.out.println("done creating endtime");
-
-
- // START - get, set_exdate
- ICalProperty property_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_EXDATE_PROPERTY);
- property_tma.set_exdate(starttime);
- ICalTimeType starttime_return = property_tma.get_exdate();
- System.out.println("****** property - exdate ******");
- System.out.println("setYear=" + starttime_return.getYear());
- System.out.println("setMonth=" + starttime_return.getMonth());
- System.out.println("setDay=" + starttime_return.getDay());
- System.out.println("setHour=" + starttime_return.getHour());
- System.out.println("setMinute=" + starttime_return.getMinute());
- System.out.println("setSecond=" + starttime_return.getSecond());
- System.out.println("******* property - exdate *****");
-
- // END - get, set exdate
-
- // START - get, set exrule
- ICalProperty property_exrule_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_EXRULE_PROPERTY);
- ICalRecurrenceType exrule_tma = new ICalRecurrenceType();
- exrule_tma.setUntil(starttime);
- exrule_tma.setFreq(ICalRecurrenceType.ICalRecurrenceTypeFrequency.ICAL_MINUTELY_RECURRENCE);
- exrule_tma.setWeek_start(ICalRecurrenceType.ICalRecurrenceTypeWeekday.ICAL_SUNDAY_WEEKDAY);
- short test_tma[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61};
-
- exrule_tma.setBy_second(test_tma);
- exrule_tma.setBy_minute(test_tma);
- property_exrule_tma.set_exrule(exrule_tma);
-
- ICalRecurrenceType recurence_tma_return = property_exrule_tma.get_exrule();
- System.out.println("****** property - exrule ******");
- System.out.println("setFreq=" + recurence_tma_return.getFreq());
- System.out.println("setWeek_start=" + recurence_tma_return.getWeek_start());
- System.out.println("setBy_second[30]=" + recurence_tma_return.getBy_secondIndexed(30));
- System.out.println("setBy_minute[28]=" + recurence_tma_return.getBy_minuteIndexed(28));
- System.out.println("****** property - exrule ******");
-
- // END - get, set exrule
-
- // START - get, set recurrenceid
- ICalProperty property_recurrenceid_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RECURRENCEID_PROPERTY);
- property_recurrenceid_tma.set_recurrenceid(starttime);
- ICalTimeType recurrenceid_return = property_recurrenceid_tma.get_recurrenceid();
- System.out.println("****** property - recurrenceid ******");
- System.out.println("setYear=" + recurrenceid_return.getYear());
- System.out.println("setMonth=" + recurrenceid_return.getMonth());
- System.out.println("setDay=" + recurrenceid_return.getDay());
- System.out.println("setHour=" + recurrenceid_return.getHour());
- System.out.println("setMinute=" + recurrenceid_return.getMinute());
- System.out.println("setSecond=" + recurrenceid_return.getSecond());
- System.out.println("******* property - recurrenceid *****");
-
- // END - get, set recurrenceid
-
- // START - get, set rrule
- ICalProperty property_rrule_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RRULE_PROPERTY);
- ICalRecurrenceType rrule_tma = new ICalRecurrenceType();
- rrule_tma.setUntil(starttime);
- rrule_tma.setFreq(ICalRecurrenceType.ICalRecurrenceTypeFrequency.ICAL_MINUTELY_RECURRENCE);
- rrule_tma.setWeek_start(ICalRecurrenceType.ICalRecurrenceTypeWeekday.ICAL_SUNDAY_WEEKDAY);
- short test_hour_tma[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
- rrule_tma.setBy_hour(test_hour_tma);
- property_rrule_tma.set_rrule(rrule_tma);
-
- ICalRecurrenceType rrule_tma_return = property_rrule_tma.get_rrule();
- System.out.println("****** property - rrule ******");
- System.out.println("setFreq=" + rrule_tma_return.getFreq());
- System.out.println("setWeek_start=" + rrule_tma_return.getWeek_start());
- System.out.println("setBy_hour[11]=" + rrule_tma_return.getBy_hourIndexed(11));
- System.out.println("****** property - rrule ******");
- // END - get, set rrule
-
- // START - get, set freebusy
- ICalProperty property_freebusy_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_FREEBUSY_PROPERTY);
- ICalPeriodType period_tma = new ICalPeriodType();
- ICalDurationType duration_tma = new ICalDurationType();
- duration_tma.setDays((long) 0);
- duration_tma.setHours((long) 10);
- duration_tma.setMinutes((long) 15);
-
- period_tma.setStart(starttime);
- period_tma.setEnd(endtime);
- period_tma.setDuration(duration_tma);
-
- property_freebusy_tma.set_freebusy(period_tma);
-
- ICalPeriodType period_tma_return = property_freebusy_tma.get_freebusy();
- ICalTimeType start_tma_return = period_tma_return.getStart();
- ICalTimeType end_tma_return = period_tma_return.getEnd();
- ICalDurationType duration_tma_return = period_tma_return.getDuration();
-
- System.out.println("****** property - freebusy - start ******");
- System.out.println("setYear=" + start_tma_return.getYear());
- System.out.println("setMonth=" + start_tma_return.getMonth());
- System.out.println("setDay=" + start_tma_return.getDay());
- System.out.println("setHour=" + start_tma_return.getHour());
- System.out.println("setMinute=" + start_tma_return.getMinute());
- System.out.println("setSecond=" + start_tma_return.getSecond());
- System.out.println("******* property - freebusy - start *****");
-
- System.out.println("****** property - freebusy - end ******");
- System.out.println("setYear=" + end_tma_return.getYear());
- System.out.println("setMonth=" + end_tma_return.getMonth());
- System.out.println("setDay=" + end_tma_return.getDay());
- System.out.println("setHour=" + end_tma_return.getHour());
- System.out.println("setMinute=" + end_tma_return.getMinute());
- System.out.println("setSecond=" + end_tma_return.getSecond());
- System.out.println("******* property - freebusy - end *****");
-
- System.out.println("****** property - freebusy - duration ******");
- System.out.println("setYear=" + duration_tma_return.getDays());
- System.out.println("setMonth=" + duration_tma_return.getHours());
- System.out.println("setDay=" + duration_tma_return.getMinutes());
- System.out.println("******* property - freebusy - duration *****");
-
- // END - get, set freebusy
-
- // START - get, set dtstamp
- ICalProperty property_dtstamp_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTSTAMP_PROPERTY);
- property_dtstamp_tma.set_dtstamp(starttime);
- ICalTimeType dtstamp_tma_return = property_dtstamp_tma.get_dtstamp();
- System.out.println("****** property - dtstamp ******");
- System.out.println("setYear=" + dtstamp_tma_return.getYear());
- System.out.println("setMonth=" + dtstamp_tma_return.getMonth());
- System.out.println("setDay=" + dtstamp_tma_return.getDay());
- System.out.println("setHour=" + dtstamp_tma_return.getHour());
- System.out.println("setMinute=" + dtstamp_tma_return.getMinute());
- System.out.println("setSecond=" + dtstamp_tma_return.getSecond());
- System.out.println("******* property - dtstamp *****");
- // END - get, set dtstamp
- // START - get, set attendee
- ICalProperty property_attendee_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ATTENDEE_PROPERTY);
- property_attendee_tma.set_attendee("John");
- String attendee_tma_return = property_attendee_tma.get_attendee();
- System.out.println("****** property - attendee ******");
- System.out.println("setAttendee=" + attendee_tma_return);
- System.out.println("****** property - attendee ******");
- // END - get, set attendee
- // START - get, set comment
- ICalProperty property_comment_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_COMMENT_PROPERTY);
- property_comment_tma.set_comment("John");
- String comment_tma_return = property_comment_tma.get_comment();
- System.out.println("****** property - comment ******");
- System.out.println("setComment=" + comment_tma_return);
- System.out.println("****** property - comment ******");
- // END - get, set comment
- // START - get, set organizer
- ICalProperty property_organizer_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ORGANIZER_PROPERTY);
- property_organizer_tma.set_organizer("John");
- String organizer_tma_return = property_organizer_tma.get_organizer();
- System.out.println("****** property - organizer ******");
- System.out.println("setOrganizer=" + organizer_tma_return);
- System.out.println("****** property - organizer ******");
- // END - get, set organizer
-
- summProp.set_summary("New Year's Eve Party, and more");
- System.out.println("done setting summProp");
- startProp.set_dtstart(starttime);
- System.out.println("done setting startProp");
- endProp.set_dtend(endtime);
- System.out.println("done setting endProp");
- locationProp.set_location("Bothin, Marin County, CA, USA");
- System.out.println("done setting locationProp\n");
- descProp.set_description("Drive carefully; come to have fun!");
- System.out.println("done setting descProp\n");
-
- VEvent vEvent = new VEvent();
- vEvent.add_property(summProp);
- vEvent.add_property(startProp);
- vEvent.add_property(endProp);
- vEvent.add_property(locationProp);
- vEvent.add_property(descProp);
-
- ICalTimeType sTime = vEvent.get_dtstart();
- ICalTimeType eTime = vEvent.get_dtend();
-
- //System.out.println("VEvent:\n" + vEvent.as_ical_string());
- System.out.println("Summary: \n" + vEvent.get_summary());
- System.out.println("DTSTART: \n" + sTime.getYear() + sTime.getMonth() + sTime.getDay() +
- sTime.getHour() + sTime.getMinute() + sTime.getSecond());
- System.out.println("DTEND: \n" + eTime.getYear() + eTime.getMonth() + eTime.getDay() +
- eTime.getHour() + eTime.getMinute() + eTime.getSecond());
- System.out.println("Location: \n" + vEvent.get_location());
- System.out.println("Description: \n" +vEvent.get_description());
-
- VComponent ic = new VComponent(content);
- if (ic == null)
- System.err.println("Failed to parse component");
- System.out.println("VComponent:\n" + ic.as_ical_string());
-
- // component is wrapped within BEGIN:VCALENDAR END:VCALENDAR
- // we need to unwrap it.
- VEvent sub_ic = (VEvent)ic.get_first_component(VComponent.ICalComponentKind.ICAL_VEVENT_COMPONENT);
- if (sub_ic == null)
- System.out.println("Failed to get subcomponent");
- while (sub_ic != null)
- {
- System.out.println("subcomponent:\n" + sub_ic.as_ical_string());
- sub_ic = (VEvent)ic.get_next_component(VComponent.ICalComponentKind.ICAL_VEVENT_COMPONENT);
- }
-
- // START - get, set recurrenceid
- ICalTimeType time_tma = new ICalTimeType();
- time_tma.setYear(2002);
- time_tma.setMonth(2);
- time_tma.setDay(2);
- time_tma.setHour(2);
- time_tma.setMinute(2);
- time_tma.setSecond(2);
- time_tma.setIs_utc(true);
-
- ic.set_recurrenceid(time_tma);
-
- ICalTimeType time_tma_return = new ICalTimeType();
- time_tma_return = ic.get_recurrenceid();
- System.out.println("****** vcomponent - recurrenceid ******");
- System.out.println("setYear=" + time_tma_return.getYear());
- System.out.println("setMonth=" + time_tma_return.getMonth());
- System.out.println("setDay=" + time_tma_return.getDay());
- System.out.println("setHour=" + time_tma_return.getHour());
- System.out.println("setMinute=" + time_tma_return.getMinute());
- System.out.println("setSecond=" + time_tma_return.getSecond());
- System.out.println("****** vcomponent - recurrenceid ******");
- // END - get, set recurrenceid
- // START - get, set dtstamp
- ic.set_dtstamp(time_tma);
- ICalTimeType vcomponent_dtstamp_tma_return = ic.get_dtstamp();
- System.out.println("****** vcomponent - dtstamp ******");
- System.out.println("setYear=" + vcomponent_dtstamp_tma_return.getYear());
- System.out.println("setMonth=" + vcomponent_dtstamp_tma_return.getMonth());
- System.out.println("setDay=" + vcomponent_dtstamp_tma_return.getDay());
- System.out.println("setHour=" + vcomponent_dtstamp_tma_return.getHour());
- System.out.println("setMinute=" + vcomponent_dtstamp_tma_return.getMinute());
- System.out.println("setSecond=" + vcomponent_dtstamp_tma_return.getSecond());
- System.out.println("****** vcomponent - dtstamp ******");
-
- // END - get, set dtstamp
-
- // VTODO test cases
-
- ICalProperty statusProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_STATUS_PROPERTY);
- ICalProperty dueProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DUE_PROPERTY);
-
- ICalTimeType duetime = new ICalTimeType();
- duetime.setYear(2002);
- duetime.setMonth(12);
- duetime.setDay(21);
- duetime.setHour(18);
- duetime.setMinute(0);
- duetime.setSecond(0);
- duetime.setIs_utc(true);
- System.out.println("done creating duetime");
-
- statusProp.set_status(ICalProperty.ICalPropertyStatus.ICAL_STATUS_COMPLETED);
- dueProp.set_due(duetime);
-
- VToDo vtodo = new VToDo();
-
- vtodo.add_property(statusProp);
- vtodo.add_property(dueProp);
-
- System.out.println("VToDo:\n" + vtodo.as_ical_string());
-
- // VALARM test cases
-
- VAlarm valarm = new VAlarm();
- System.out.println("created valarm");
-
- // 1. Create a ICAL_DURATION_PROPERTY using the TimePeriod.
- ICalDurationType duration = new ICalDurationType();
- duration.setDays((long) 0);
- duration.setHours((long) 0);
- duration.setMinutes((long) 15);
- System.out.println("created duration object");
-
- // Since we want to trigger before the event or task,
- // we always want to set this to 1. If we say this is not
- // a negative duration, that means the alarm will trigger
- // AFTER the event or task start or due date, which is useless.
- duration.setIs_neg(1);
-
- // 2. Create a ICalTriggerType oject and set the duration on it.
- ICalTriggerType trigger = new ICalTriggerType();
- trigger.setDuration(duration);
- System.out.println("set trigger to duration object");
-
- // 3. Create a trigger ICalProperty and set the trigger on it.
- ICalProperty triggerProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_TRIGGER_PROPERTY);
- System.out.println("created trigger property");
- triggerProp.set_trigger(trigger);
- System.out.println("set trigger property");
- trigger = triggerProp.get_trigger();
- System.out.println("get trigger property");
-
- // 4. set the trigger property on the Valarm object.
- valarm.add_property(triggerProp);
- System.out.println("VAlarm:\n" + valarm.as_ical_string());
-
- // 5. create attendee property
- String userEmail = "userid@domain";
- ICalProperty attendeeProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ATTENDEE_PROPERTY);
- attendeeProp.set_attendee("MAILTO:" + userEmail);
- System.out.println("set attendee property");
- userEmail = attendeeProp.get_attendee();
- System.out.println("get attendee property");
- valarm.add_property(attendeeProp);
- System.out.println("VAlarm:\n" + valarm.as_ical_string());
-
- // START - get, set_role
- ICalParameter parameter_role_tma = new ICalParameter(ICalParameter.ICalParameterKind.ICAL_ROLE_PARAMETER);
- parameter_role_tma.set_role(ICalParameter.ICalParameterRole.ICAL_ROLE_REQPARTICIPANT);
- int role_tma_return = parameter_role_tma.get_role();
- System.out.println("******* parameter - role *****");
- System.out.println("setRole=" + role_tma_return);
- System.out.println("******* parameter - role *****");
- // END - get, set_role
- // START - get, set_partstat
- ICalParameter parameter_partstat_tma = new ICalParameter(ICalParameter.ICalParameterKind.ICAL_PARTSTAT_PARAMETER);
- parameter_partstat_tma.set_partstat(ICalParameter.ICalParameterPartStat.ICAL_PARTSTAT_DECLINED);
- int partstat_tma_return = parameter_partstat_tma.get_partstat();
- System.out.println("******* parameter - partstat *****");
- System.out.println("setPartstat=" + partstat_tma_return);
- System.out.println("******* parameter - partstat *****");
- // END - get, set_partstat
- }
-}
diff --git a/libical/src/libical/.cvsignore b/libical/src/libical/.cvsignore
deleted file mode 100644
index f02a2d1fd6..0000000000
--- a/libical/src/libical/.cvsignore
+++ /dev/null
@@ -1,28 +0,0 @@
-icalyacc.h
-icalyacc.c
-icallexer.c
-y.output
-Makefile
-Makefile.in
-icalversion.h
-.deps
-.libs
-*.lo
-*.la
-ical.h
-icalyacc.output
-icalproperty.c
-icalproperty.h
-icalvalue.h
-icalvalue.c
-icalparameter.h
-icalparameter.c
-icalrestriction.c
-icalderivedparameter.c
-icalderivedparameter.h
-icalderivedproperty.c
-icalderivedproperty.h
-icalderivedvalue.c
-icalderivedvalue.h
-icallexer.c
-y.output
diff --git a/libical/src/libical/Makefile.am b/libical/src/libical/Makefile.am
deleted file mode 100644
index ddf1f6987f..0000000000
--- a/libical/src/libical/Makefile.am
+++ /dev/null
@@ -1,287 +0,0 @@
-#======================================================================
-# FILE: Makefile.am
-# CREATOR: eric
-#
-# $Id: Makefile.am,v 1.44 2003/11/05 22:47:34 jpr Exp $
-#
-#
-# (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#
-#
-#
-#======================================================================
-
-
-DESIGNDATA = $(top_srcdir)/design-data
-ICALSCRIPTS = $(top_srcdir)/scripts
-
-if WITH_CXX_BINDINGS
-cxx_lib=libical-evolution_cxx.la
-cxx_headers=vcomponent.h icalparameter_cxx.h icalproperty_cxx.h icalvalue_cxx.h icptrholder.h
-else
-cxx_lib=
-cxx_headers=
-endif
-
-noinst_LTLIBRARIES = libical-evolution.la $(cxx_lib)
-
-AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\""$(privdatadir)"\"
-
-# CFLAGS = -g
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src \
- -I$(srcdir)
-
-libical_evolution_la_LDFLAGS = -version-info 0:0:0
-
-
-libical_evolution_la_SOURCES = \
- $(BUILT_SOURCES) \
- icalarray.c \
- icalarray.h \
- icalattach.h \
- icalattachimpl.h \
- icalattach.c \
- icalcomponent.c \
- icalcomponent.h \
- icalenums.c \
- icalenums.h \
- icalerror.c \
- icalerror.h \
- icalmemory.c \
- icalmemory.h \
- icalmime.c \
- icalmime.h \
- icalparameter.c \
- icalparameter.h \
- icalparameterimpl.h \
- icalparser.c \
- icalparser.h \
- icalproperty.c \
- icalproperty.h \
- icalrecur.c \
- icalrecur.h \
- icalrestriction.h \
- icaltime.c \
- icaltime.h \
- icaltimezone.c \
- icaltimezone.h \
- icalduration.h \
- icalduration.c \
- icalperiod.h \
- icalperiod.c \
- icaltypes.c \
- icaltypes.h \
- icalvalue.c \
- icalvalue.h \
- icalvalueimpl.h \
- pvl.c \
- pvl.h \
- sspm.c \
- sspm.h \
- vsnprintf.c \
- icallangbind.h \
- icallangbind.c \
- caldate.c \
- astime.h
-
-if WITH_CXX_BINDINGS
-libical_evolution_cxx_la_SOURCES = \
- $(libical_evolution_la_SOURCES) \
- vcomponent.h \
- vcomponent.cpp \
- icalproperty_cxx.h \
- icalproperty_cxx.cpp \
- icalparameter_cxx.h \
- icalparameter_cxx.cpp \
- icalvalue_cxx.h \
- icalvalue_cxx.cpp \
- icptrholder.h
-endif
-
-libical_evolutionincludedir = $(privincludedir)/libical
-
-libical_evolutioninclude_HEADERS = \
- ical.h \
- icalarray.h \
- icalattach.h \
- icalcomponent.h \
- icalderivedparameter.h \
- icalderivedproperty.h \
- icalderivedvalue.h \
- icalduration.h \
- icalenums.h \
- icalerror.h \
- icallangbind.h \
- icalmemory.h \
- icalmime.h \
- icalparameter.h \
- icalparser.h \
- icalperiod.h \
- icalproperty.h \
- icalrecur.h \
- icalrestriction.h \
- icaltime.h \
- icaltimezone.h \
- icaltypes.h \
- icalvalue.h \
- pvl.h \
- sspm.h \
- $(cxx_headers)
-
-# ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. It
-# is required to make the combined header ical.h properly
-COMBINEDHEADERS = \
- $(top_builddir)/config.h \
- $(top_builddir)/src/libical/icalversion.h \
- $(top_srcdir)/src/libical/icaltime.h \
- $(top_srcdir)/src/libical/icalduration.h \
- $(top_srcdir)/src/libical/icalperiod.h \
- $(top_srcdir)/src/libical/icalenums.h \
- $(top_srcdir)/src/libical/icaltypes.h \
- $(top_srcdir)/src/libical/icalrecur.h \
- $(top_srcdir)/src/libical/icalattach.h \
- icalderivedvalue.h \
- icalderivedparameter.h \
- $(top_srcdir)/src/libical/icalvalue.h \
- $(top_srcdir)/src/libical/icalparameter.h \
- icalderivedproperty.h \
- $(top_srcdir)/src/libical/icalproperty.h \
- $(top_srcdir)/src/libical/pvl.h \
- $(top_srcdir)/src/libical/icalarray.h \
- $(top_srcdir)/src/libical/icalcomponent.h \
- $(top_srcdir)/src/libical/icaltimezone.h \
- $(top_srcdir)/src/libical/icalparser.h \
- $(top_srcdir)/src/libical/icalmemory.h \
- $(top_srcdir)/src/libical/icalerror.h \
- $(top_srcdir)/src/libical/icalrestriction.h \
- $(top_srcdir)/src/libical/sspm.h \
- $(top_srcdir)/src/libical/icalmime.h \
- $(top_srcdir)/src/libical/icallangbind.h
-
-BUILT_COMBINEDHEADERS = \
- icalderivedparameter.h \
- icalderivedproperty.h \
- icalderivedvalue.h
-
-BUILT_SOURCES = \
- $(BUILT_COMBINEDHEADERS)\
- icalderivedparameter.c \
- icalderivedproperty.c \
- icalrestriction.c \
- icalderivedvalue.c
-
-# parameters
-
-PARAMETERDEPS = \
- $(ICALSCRIPTS)/mkderivedparameters.pl \
- $(DESIGNDATA)/parameters.csv \
- icalderivedparameter.c.in \
- icalderivedparameter.h.in
-
-icalderivedparameter.h: $(PARAMETERDEPS)
- $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.h.in -h $(DESIGNDATA)/parameters.csv > icalderivedparameter.h
-
-icalderivedparameter.c: $(PARAMETERDEPS) $(BUILT_COMBINEDHEADERS)
- $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.c.in -c $(DESIGNDATA)/parameters.csv > icalderivedparameter.c
-
-# properties
-
-PROPERTYDEPS = \
- $(ICALSCRIPTS)/mkderivedproperties.pl \
- $(DESIGNDATA)/properties.csv \
- $(DESIGNDATA)/value-types.csv \
- icalderivedproperty.c.in \
- icalderivedproperty.h.in
-
-
-icalderivedproperty.h: $(PROPERTYDEPS)
- $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \
- -i $(srcdir)/icalderivedproperty.h.in -h $(DESIGNDATA)/properties.csv\
- ${DESIGNDATA}/value-types.csv > icalderivedproperty.h
-
-icalderivedproperty.c: $(PROPERTYDEPS) $(BUILT_COMBINEDHEADERS)
- $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \
- -i $(srcdir)/icalderivedproperty.c.in -c $(DESIGNDATA)/properties.csv \
- ${DESIGNDATA}/value-types.csv > icalderivedproperty.c
-
-# restrictions
-
-RESTRICTIONDEPS = \
- $(ICALSCRIPTS)/mkrestrictiontable.pl \
- $(DESIGNDATA)/restrictions.csv \
- icalrestriction.c.in
-
-icalrestriction.c: $(RESTRICTIONDEPS)
- $(PERL) $(ICALSCRIPTS)/mkrestrictiontable.pl -i $(srcdir)/icalrestriction.c.in \
- $(DESIGNDATA)/restrictions.csv > icalrestriction.c
-
-# values
-
-VALUEDEPS = \
- $(ICALSCRIPTS)/mkderivedvalues.pl \
- $(DESIGNDATA)/value-types.csv \
- icalderivedvalue.c.in \
- icalderivedvalue.h.in
-
-icalderivedvalue.h: $(VALUEDEPS)
- $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \
- -i $(srcdir)/icalderivedvalue.h.in -h $(DESIGNDATA)/value-types.csv > icalderivedvalue.h
-
-icalderivedvalue.c: $(VALUEDEPS) $(BUILT_COMBINEDHEADERS)
- $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \
- -i $(srcdir)/icalderivedvalue.c.in -c $(DESIGNDATA)/value-types.csv > icalderivedvalue.c
-
-# c++ needs ical.h auto-generated.
-icalparameter_cxx.lo: ical.h
-icalproperty_cxx.lo: ical.h
-icalvalue_cxx.lo: ical.h
-vcomponent.lo: ical.h
-
-
-# housekeeping
-CONFIG_CLEAN_FILES = y.output
-
-CLEANFILES = $(BUILT_SOURCES) $(BUILT_COMBINEDHEADERS)
-
-dist-hook:
- cd $(distdir); rm -f $(BUILT_SOURCES)
- cd $(distdir); rm -f icalversion.h
-
-EXTRA_DIST = \
- icalderivedparameter.c.in \
- icalderivedparameter.h.in \
- icalderivedproperty.c.in \
- icalderivedproperty.h.in \
- icalrestriction.c.in \
- icalderivedvalue.c.in \
- icalderivedvalue.h.in \
- icalversion.h.in
-
-$(srcdir)/icalcomponent.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-icalderivedparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-icalderivedproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-icalderivedvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalduration.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icallangbind.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalmime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalparser.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalrestriction.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icaltime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
-$(srcdir)/icalvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h
diff --git a/libical/src/libical/astime.h b/libical/src/libical/astime.h
deleted file mode 100644
index 6962c060a8..0000000000
--- a/libical/src/libical/astime.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1986-2000, Hiram Clawson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * Neither name of The Museum of Hiram nor the names of
- * its contributors may be used to endorse or promote products
- * derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @file astime.h
- * @brief contains definitions of structures used for time calculations.
- */
-
-#ifndef _astime_h_
-#define _astime_h_
-
-typedef struct ut_instant {
- double j_date; /**< julian decimal date, 0 = 01 Jan 4713 BC 12 HR UT */
- long year; /**< year, valid range [-4,713, +2,147,483,647] */
- int month; /**< [1-12] */
- int day; /**< [1-31] */
- int i_hour; /**< [0-23] */
- int i_minute; /**< [0-59] */
- int i_second; /**< [0-59] */
- double d_hour; /**< [0.0-23.9999] includes minute and second */
- double d_minute; /**< [0.0-59.9999] includes second */
- double d_second; /**< [0.0-59.9999] */
- int weekday; /**< [0-6] */
- int day_of_year; /**< [1-366] */
-} UTinstant, * UTinstantPtr;
-
-/* Functions in caldate.c */
-
-long caldat( UTinstantPtr ); /** converts julian date to year,mo,da */
-double juldat( UTinstantPtr ); /** returns julian day from year,mo,da */
-
-#endif /* _astime_h_ */
diff --git a/libical/src/libical/caldate.c b/libical/src/libical/caldate.c
deleted file mode 100644
index f5554f66f8..0000000000
--- a/libical/src/libical/caldate.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 1986-2000, Hiram Clawson
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * Neither name of The Museum of Hiram nor the names of
- * its contributors may be used to endorse or promote products
- * derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "astime.h" /* time structures */
-
-/**
- * caldat computes the day of the week, the day of the year
- * the gregorian (or julian) calendar date and the universal
- * time from the julian decimal date.
- * for astronomical purposes, The Gregorian calendar reform occurred
- * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar.
-
- * Input: a ut_instant structure pointer, where the j_date element
- * has been set. ( = 0 for 01 Jan 4713 B.C. 12 HR UT )
- *
- * output: will set all the other elements of the structure.
- * As a convienence, the function will also return the year.
- *
- * Reference: Astronomial formulae for calculators, meeus, p 23
- * from fortran program by F. Espenak - April 1982 Page 277,
- * 50 Year canon of solar eclipses: 1986-2035
- *
- */
-
-long caldat( date )
-struct ut_instant * date;
-{
- double frac;
- long jd;
- long ka;
- long kb;
- long kc;
- long kd;
- long ke;
- long ialp;
-
- jd = (long) (date->j_date + 0.5); /* integer julian date */
- frac = date->j_date + 0.5 - (double) jd + 1.0e-10; /* day fraction */
- ka = (long) jd;
- if ( jd >= 2299161L )
- {
- ialp = ( (double) jd - 1867216.25 ) / ( 36524.25 );
- ka = jd + 1L + ialp - ( ialp >> 2 );
- }
- kb = ka + 1524L;
- kc = ( (double) kb - 122.1 ) / 365.25;
- kd = (double) kc * 365.25;
- ke = (double) ( kb - kd ) / 30.6001;
- date->day = kb - kd - ((long) ( (double) ke * 30.6001 ));
- if ( ke > 13L )
- date->month = ke - 13L;
- else
- date->month = ke - 1L;
- if ( (date->month == 2) && (date->day > 28) )
- date->day = 29;
- if ( (date->month == 2) && (date->day == 29) && (ke == 3L) )
- date->year = kc - 4716L;
- else if ( date->month > 2 )
- date->year = kc - 4716L;
- else
- date->year = kc - 4715L;
- date->i_hour = date->d_hour = frac * 24.0; /* hour */
- date->i_minute = date->d_minute =
- ( date->d_hour - (double) date->i_hour ) * 60.0; /* minute */
- date->i_second = date->d_second =
- ( date->d_minute - (double) date->i_minute ) * 60.0;/* second */
- date->weekday = (jd + 1L) % 7L; /* day of week */
- if ( date->year == ((date->year >> 2) << 2) )
- date->day_of_year =
- ( ( 275 * date->month ) / 9)
- - ((date->month + 9) / 12)
- + date->day - 30;
- else
- date->day_of_year =
- ( ( 275 * date->month ) / 9)
- - (((date->month + 9) / 12) << 1)
- + date->day - 30;
- return( date->year );
-}
-
-/**
- * juldat computes the julian decimal date (j_date) from
- * the gregorian (or Julian) calendar date.
- * for astronomical purposes, The Gregorian calendar reform occurred
- * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar.
- * Input: a ut_instant structure pointer where Day, Month, Year and
- * i_hour, i_minute, d_second have been set for the date
- * in question.
- *
- * Output: the j_date and weekday elements of the structure will be set.
- * Also, the return value of the function will be the j_date too.
- *
- * Reference: Astronomial formulae for calculators, meeus, p 23
- * from fortran program by F. Espenak - April 1982 Page 276,
- * 50 Year canon of solar eclipses: 1986-2035
- */
-
-double juldat( date )
-struct ut_instant * date;
-{
- double frac, gyr;
- long iy0, im0;
- long ia, ib;
- long jd;
-
- /* decimal day fraction */
- frac = (( double)date->i_hour/ 24.0)
- + ((double) date->i_minute / 1440.0)
- + (date->d_second / 86400.0);
- /* convert date to format YYYY.MMDDdd */
- gyr = (double) date->year
- + (0.01 * (double) date->month)
- + (0.0001 * (double) date->day)
- + (0.0001 * frac) + 1.0e-9;
- /* conversion factors */
- if ( date->month <= 2 )
- {
- iy0 = date->year - 1L;
- im0 = date->month + 12;
- }
- else
- {
- iy0 = date->year;
- im0 = date->month;
- }
- ia = iy0 / 100L;
- ib = 2L - ia + (ia >> 2);
- /* calculate julian date */
- if ( date->year < 0L )
- jd = (long) ((365.25 * (double) iy0) - 0.75)
- + (long) (30.6001 * (im0 + 1L) )
- + (long) date->day + 1720994L;
- else
- jd = (long) (365.25 * (double) iy0)
- + (long) (30.6001 * (double) (im0 + 1L))
- + (long) date->day + 1720994L;
- if ( gyr >= 1582.1015 ) /* on or after 15 October 1582 */
- jd += ib;
- date->j_date = (double) jd + frac + 0.5;
- jd = (long) (date->j_date + 0.5);
- date->weekday = (jd + 1L) % 7L;
- return( date->j_date );
-} /* end of double juldat( date ) */
diff --git a/libical/src/libical/ical.h b/libical/src/libical/ical.h
deleted file mode 100644
index adbe751bd0..0000000000
--- a/libical/src/libical/ical.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#include <libical/icaltime.h>
-#include <libical/icalduration.h>
-#include <libical/icalperiod.h>
-#include <libical/icalenums.h>
-#include <libical/icaltypes.h>
-#include <libical/icalrecur.h>
-#include <libical/icalattach.h>
-#include <libical/icalvalue.h>
-#include <libical/icalparameter.h>
-#include <libical/icalderivedproperty.h>
-#include <libical/icalproperty.h>
-#include <libical/pvl.h>
-#include <libical/icalarray.h>
-#include <libical/icalcomponent.h>
-#include <libical/icaltimezone.h>
-#include <libical/icalparser.h>
-#include <libical/icalmemory.h>
-#include <libical/icalerror.h>
-#include <libical/icalrestriction.h>
-#include <libical/sspm.h>
-#include <libical/icalmime.h>
-#include <libical/icallangbind.h>
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
diff --git a/libical/src/libical/icalarray.c b/libical/src/libical/icalarray.c
deleted file mode 100644
index 896efc35be..0000000000
--- a/libical/src/libical/icalarray.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*-
- ======================================================================
- FILE: icalarray.c
- CREATOR: Damon Chaplin 07 March 2001
-
- $Id$
- $Locker$
-
- (C) Copyright 2001, Ximian, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-/** @file icalarray.c
- *
- * @brief An array of arbitrarily-sized elements which grows
- * dynamically as elements are added.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "icalarray.h"
-#include "icalerror.h"
-
-
-static void icalarray_expand (icalarray *array,
- int space_needed);
-
-/** @brief Constructor
- */
-
-icalarray*
-icalarray_new (int element_size,
- int increment_size)
-{
- icalarray *array;
-
- array = (icalarray*) malloc (sizeof (icalarray));
- if (!array) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return NULL;
- }
-
- array->element_size = element_size;
- array->increment_size = increment_size;
- array->num_elements = 0;
- array->space_allocated = 0;
- array->data = NULL;
-
- return array;
-}
-
-/** @brief Destructor
- */
-
-void
-icalarray_free (icalarray *array)
-{
- if (array->data)
- free (array->data);
- free (array);
-}
-
-
-void
-icalarray_append (icalarray *array,
- void *element)
-{
- if (array->num_elements >= array->space_allocated)
- icalarray_expand (array, 1);
-
- memcpy ((char *)(array->data) + ( array->num_elements * array->element_size ), element,
- array->element_size);
- array->num_elements++;
-}
-
-
-void*
-icalarray_element_at (icalarray *array,
- int position)
-{
- assert (position >= 0);
- assert (position < array->num_elements);
-
- return (char *)(array->data) + (position * array->element_size);
-}
-
-
-void
-icalarray_remove_element_at (icalarray *array,
- int position)
-{
- void *dest;
- int elements_to_move;
-
- assert (position >= 0);
- assert (position < array->num_elements);
-
- dest = (char *)array->data + (position * array->element_size);
- elements_to_move = array->num_elements - position - 1;
-
- if (elements_to_move > 0)
- memmove (dest, (char *)dest + array->element_size,
- elements_to_move * array->element_size);
-
- array->num_elements--;
-}
-
-
-void
-icalarray_sort (icalarray *array,
- int (*compare) (const void *,
- const void *))
-{
- qsort (array->data, array->num_elements, array->element_size, compare);
-}
-
-
-static void
-icalarray_expand (icalarray *array,
- int space_needed)
-{
- int new_space_allocated;
- void *new_data;
-
- new_space_allocated = array->space_allocated + array->increment_size;
-
- if (space_needed > array->increment_size)
- new_space_allocated += space_needed;
-
- /*
- new_data = realloc (array->data,
- new_space_allocated * array->element_size);
- */
- new_data = malloc(new_space_allocated * array->element_size);
- memcpy(new_data,array->data,array->element_size*array->space_allocated);
- free(array->data);
-
- if (new_data) {
- array->data = new_data;
- array->space_allocated = new_space_allocated;
- } else {
- icalerror_set_errno(ICAL_ALLOCATION_ERROR);
- }
-}
-
-
diff --git a/libical/src/libical/icalarray.h b/libical/src/libical/icalarray.h
deleted file mode 100644
index aee8046305..0000000000
--- a/libical/src/libical/icalarray.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*======================================================================
- FILE: icalarray.h
- CREATOR: Damon Chaplin 07 March 2001
-
-
- $Id$
- $Locker$
-
- (C) Copyright 2001, Ximian, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
-======================================================================*/
-
-
-#ifndef ICALARRAY_H
-#define ICALARRAY_H
-
-/** @file icalarray.h
- *
- * @brief An array of arbitrarily-sized elements which grows
- * dynamically as elements are added.
- */
-
-typedef struct _icalarray icalarray;
-struct _icalarray {
- unsigned int element_size;
- unsigned int increment_size;
- unsigned int num_elements;
- unsigned int space_allocated;
- void *data;
-};
-
-
-
-icalarray *icalarray_new (int element_size,
- int increment_size);
-void icalarray_free (icalarray *array);
-
-void icalarray_append (icalarray *array,
- void *element);
-void icalarray_remove_element_at (icalarray *array,
- int position);
-
-void *icalarray_element_at (icalarray *array,
- int position);
-
-void icalarray_sort (icalarray *array,
- int (*compare) (const void *, const void *));
-
-
-#endif /* ICALARRAY_H */
diff --git a/libical/src/libical/icalattach.c b/libical/src/libical/icalattach.c
deleted file mode 100644
index 8da9d4320d..0000000000
--- a/libical/src/libical/icalattach.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalattach.c
- CREATOR: acampi 28 May 02
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Andrea Campi
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icaltypes.c
-
- ======================================================================*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icaltypes.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalattachimpl.h"
-#include <stdlib.h> /* for malloc and abs() */
-#include <errno.h> /* for errno */
-#include <string.h> /* for icalmemory_strdup */
-#include <assert.h>
-
-icalattach *
-icalattach_new_from_url (const char *url)
-{
- icalattach *attach;
- char *url_copy;
-
- icalerror_check_arg_rz ((url != NULL), "url");
-
- if ((attach = malloc (sizeof (icalattach))) == NULL) {
- errno = ENOMEM;
- return NULL;
- }
-
- if ((url_copy = strdup (url)) == NULL) {
- free (attach);
- errno = ENOMEM;
- return NULL;
- }
-
- attach->refcount = 1;
- attach->is_url = 1;
- attach->u.url.url = url_copy;
-
- return attach;
-}
-
-icalattach *
-icalattach_new_from_data (unsigned char *data, icalattach_free_fn_t free_fn,
- void *free_fn_data)
-{
- icalattach *attach;
-
- icalerror_check_arg_rz ((data != NULL), "data");
-
- if ((attach = malloc (sizeof (icalattach))) == NULL) {
- errno = ENOMEM;
- return NULL;
- }
-
- attach->refcount = 1;
- attach->is_url = 0;
- attach->u.data.data = data;
- attach->u.data.free_fn = free_fn;
- attach->u.data.free_fn_data = free_fn_data;
-
- return attach;
-}
-
-void
-icalattach_ref (icalattach *attach)
-{
- icalerror_check_arg_rv ((attach != NULL), "attach");
- icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0");
-
- attach->refcount++;
-}
-
-void
-icalattach_unref (icalattach *attach)
-{
- icalerror_check_arg_rv ((attach != NULL), "attach");
- icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0");
-
- attach->refcount--;
-
- if (attach->refcount != 0)
- return;
-
- if (attach->is_url)
- free (attach->u.url.url);
- else if (attach->u.data.free_fn)
- (* attach->u.data.free_fn) (attach->u.data.data, attach->u.data.free_fn_data);
-
- free (attach);
-}
-
-int
-icalattach_get_is_url (icalattach *attach)
-{
- icalerror_check_arg_rz ((attach != NULL), "attach");
-
- return attach->is_url ? 1 : 0;
-}
-
-const char *
-icalattach_get_url (icalattach *attach)
-{
- icalerror_check_arg_rz ((attach != NULL), "attach");
- icalerror_check_arg_rz ((attach->is_url), "attach->is_url");
-
- return attach->u.url.url;
-}
-
-unsigned char *
-icalattach_get_data (icalattach *attach)
-{
- icalerror_check_arg_rz ((attach != NULL), "attach");
- icalerror_check_arg_rz ((!attach->is_url), "!attach->is_url");
-
- return attach->u.data.data;
-}
diff --git a/libical/src/libical/icalattach.h b/libical/src/libical/icalattach.h
deleted file mode 100644
index ba4488dd2d..0000000000
--- a/libical/src/libical/icalattach.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalattach.h
- CREATOR: acampi 28 May 02
-
-
- (C) COPYRIGHT 2002, Andrea Campi
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalattach.h
-
-======================================================================*/
-
-#ifndef ICALATTACH_H
-#define ICALATTACH_H
-
-
-typedef struct icalattach_impl icalattach;
-
-typedef void (* icalattach_free_fn_t) (unsigned char *data, void *user_data);
-
-icalattach *icalattach_new_from_url (const char *url);
-icalattach *icalattach_new_from_data (unsigned char *data,
- icalattach_free_fn_t free_fn, void *free_fn_data);
-
-void icalattach_ref (icalattach *attach);
-void icalattach_unref (icalattach *attach);
-
-int icalattach_get_is_url (icalattach *attach);
-const char *icalattach_get_url (icalattach *attach);
-unsigned char *icalattach_get_data (icalattach *attach);
-
-struct icalattachtype* icalattachtype_new(void);
-void icalattachtype_add_reference(struct icalattachtype* v);
-void icalattachtype_free(struct icalattachtype* v);
-
-void icalattachtype_set_url(struct icalattachtype* v, char* url);
-char* icalattachtype_get_url(struct icalattachtype* v);
-
-void icalattachtype_set_base64(struct icalattachtype* v, char* base64,
- int owns);
-char* icalattachtype_get_base64(struct icalattachtype* v);
-
-void icalattachtype_set_binary(struct icalattachtype* v, char* binary,
- int owns);
-void* icalattachtype_get_binary(struct icalattachtype* v);
-
-
-
-#endif /* !ICALATTACH_H */
diff --git a/libical/src/libical/icalattachimpl.h b/libical/src/libical/icalattachimpl.h
deleted file mode 100644
index b8abe6396b..0000000000
--- a/libical/src/libical/icalattachimpl.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalattachimpl.h
- CREATOR: acampi 28 May 02
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Andrea Campi
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalattachimpl.h
-
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef ICALATTACHIMPL_H
-#define ICALATTACHIMPL_H
-
-#include "icalattach.h"
-
-/* Private structure for ATTACH values */
-struct icalattach_impl {
- /* Reference count */
- int refcount;
-
- union {
- /* URL attachment data */
- struct {
- char *url;
- } url;
-
- /* Inline data */
- struct {
- unsigned char *data;
- icalattach_free_fn_t free_fn;
- void *free_fn_data;
- } data;
- } u;
-
- /* TRUE if URL, FALSE if inline data */
- unsigned int is_url : 1;
-};
-
-#endif
diff --git a/libical/src/libical/icalattendee.c b/libical/src/libical/icalattendee.c
deleted file mode 100644
index 30cb949c40..0000000000
--- a/libical/src/libical/icalattendee.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalattendee.c
- CREATOR: eric 08 Mar 01
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icaltypes.c
-
- ======================================================================*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalattendee.h"
diff --git a/libical/src/libical/icalattendee.h b/libical/src/libical/icalattendee.h
deleted file mode 100644
index 023b30734c..0000000000
--- a/libical/src/libical/icalattendee.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalattendee.h
- CREATOR: eric 8 Mar 01
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icaltypes.h
-
-======================================================================*/
-
-#ifndef ICALATTENDEE_H
-#define ICALATTENDEE_H
-
-#include <time.h>
-#include "icalenums.h"
-#include "icaltime.h"
-#include "icalduration.h"
-#include "icalperiod.h"
-#include "icalderivedparameter.h"
-#include "icalderivedvalue.h"
-
-struct icalorganizertype {
- const char* value;
- const char* common_name;
- const char* dir;
- const char* sentby;
- const char* language;
-
-};
-
-/* Create a copy of the given organizer. Libical will not own the
- memory for the strings in the copy; the call must free them */
-struct icalorganizertype icalorganizertype_new_clone(struct icalorganizertype a);
-
-
-struct icalattendeetype {
- const char* cuid; /* Cal user id, contents of the property value */
- /*icalparameter_cutype cutype;*/
- const char* member;
- /*icalparameter_role role;*/
- int rsvp;
- const char* delto;
- const char* delfrom;
- const char* sentby;
- const char* cn;
- const char* dir;
- const char* language;
-};
-
-/* Create a copy of the given attendee. Libical will not own the
- memory for the strings in the copy; the call must free them */
-struct icalattendeetype icalattendeetype_new_clone(struct icalattendeetype a);
-
-
-#endif /* !ICALATTENDEE_H */
diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c
deleted file mode 100644
index a892128a0e..0000000000
--- a/libical/src/libical/icalcomponent.c
+++ /dev/null
@@ -1,2611 +0,0 @@
-/*======================================================================
- FILE: icalcomponent.c
- CREATOR: eric 28 April 1999
-
- $Id$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalcomponent.c
-
-======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalcomponent.h"
-#include "pvl.h" /* "Pointer-to-void list" */
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalenums.h"
-#include "icaltime.h"
-#include "icalarray.h"
-#include "icaltimezone.h"
-#include "icalduration.h"
-#include "icalperiod.h"
-#include "icalparser.h"
-#include "icalrestriction.h"
-
-#include <stdlib.h> /* for malloc */
-#include <stdarg.h> /* for va_list, etc */
-#include <errno.h>
-#include <assert.h>
-#include <stdio.h> /* for fprintf */
-#include <string.h> /* for strdup */
-#include <limits.h> /* for INT_MAX */
-
-struct icalcomponent_impl
-{
- char id[5];
- icalcomponent_kind kind;
- char* x_name;
- pvl_list properties;
- pvl_elem property_iterator;
- pvl_list components;
- pvl_elem component_iterator;
- icalcomponent* parent;
-
- /** An array of icaltimezone structs. We use this so we can do fast
- lookup of timezones using binary searches. timezones_sorted is
- set to 0 whenever we add a timezone, so we remember to sort the
- array before doing a binary search. */
- icalarray* timezones;
- int timezones_sorted;
-};
-
-/* icalproperty functions that only components get to use */
-void icalproperty_set_parent(icalproperty* property,
- icalcomponent* component);
-icalcomponent* icalproperty_get_parent(icalproperty* property);
-void icalcomponent_add_children(icalcomponent *impl,va_list args);
-static icalcomponent* icalcomponent_new_impl (icalcomponent_kind kind);
-
-static void icalcomponent_merge_vtimezone (icalcomponent *comp,
- icalcomponent *vtimezone,
- icalarray *tzids_to_rename);
-static void icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp,
- icalcomponent *vtimezone,
- icalproperty *tzid_prop,
- const char *tzid,
- icalarray *tzids_to_rename);
-static unsigned int icalcomponent_get_tzid_prefix_len (const char *tzid);
-static void icalcomponent_rename_tzids(icalcomponent* comp,
- icalarray* rename_table);
-static void icalcomponent_rename_tzids_callback(icalparameter *param,
- void *data);
-static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1,
- icalcomponent *vtimezone2);
-static int icalcomponent_compare_timezone_fn (const void *elem1,
- const void *elem2);
-
-
-void icalcomponent_add_children(icalcomponent *impl, va_list args)
-{
- void* vp;
-
- while((vp = va_arg(args, void*)) != 0) {
-
- assert (icalcomponent_isa_component(vp) != 0 ||
- icalproperty_isa_property(vp) != 0 ) ;
-
- if (icalcomponent_isa_component(vp) != 0 ){
- icalcomponent_add_component(impl, (icalcomponent*)vp);
-
- } else if (icalproperty_isa_property(vp) != 0 ){
- icalcomponent_add_property(impl, (icalproperty*)vp);
- }
- }
-}
-
-static icalcomponent*
-icalcomponent_new_impl (icalcomponent_kind kind)
-{
- icalcomponent* comp;
-
- if (!icalcomponent_kind_is_valid(kind))
- return NULL;
-
- if ( ( comp = (icalcomponent*) malloc(sizeof(icalcomponent))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- strcpy(comp->id,"comp");
-
- comp->kind = kind;
- comp->properties = pvl_newlist();
- comp->property_iterator = 0;
- comp->components = pvl_newlist();
- comp->component_iterator = 0;
- comp->x_name = 0;
- comp->parent = 0;
- comp->timezones = NULL;
- comp->timezones_sorted = 1;
-
- return comp;
-}
-
-/** @brief Constructor
- */
-icalcomponent*
-icalcomponent_new (icalcomponent_kind kind)
-{
- return icalcomponent_new_impl(kind);
-}
-
-/** @brief Constructor
- */
-icalcomponent*
-icalcomponent_vanew (icalcomponent_kind kind, ...)
-{
- va_list args;
-
- icalcomponent *impl = icalcomponent_new_impl(kind);
-
- if (impl == 0){
- return 0;
- }
-
- va_start(args,kind);
- icalcomponent_add_children(impl, args);
- va_end(args);
-
- return impl;
-}
-
-/** @brief Constructor
- */
-icalcomponent* icalcomponent_new_from_string(char* str)
-{
- return icalparser_parse_string(str);
-}
-
-/** @brief Constructor
- */
-icalcomponent* icalcomponent_new_clone(icalcomponent* old)
-{
- icalcomponent *new;
- icalproperty *p;
- icalcomponent *c;
- pvl_elem itr;
-
- icalerror_check_arg_rz( (old!=0), "component");
-
- new = icalcomponent_new_impl(old->kind);
-
- if (new == 0){
- return 0;
- }
-
-
- for( itr = pvl_head(old->properties);
- itr != 0;
- itr = pvl_next(itr))
- {
- p = (icalproperty*)pvl_data(itr);
- icalcomponent_add_property(new,icalproperty_new_clone(p));
- }
-
-
- for( itr = pvl_head(old->components);
- itr != 0;
- itr = pvl_next(itr))
- {
- c = (icalcomponent*)pvl_data(itr);
- icalcomponent_add_component(new,icalcomponent_new_clone(c));
- }
-
- return new;
-
-}
-
-/*** @brief Destructor
- */
-void
-icalcomponent_free (icalcomponent* c)
-{
- icalproperty* prop;
- icalcomponent* comp;
-
- icalerror_check_arg_rv( (c!=0), "component");
-
-#ifdef ICAL_FREE_ON_LIST_IS_ERROR
- icalerror_assert( (c->parent ==0),"Tried to free a component that is still attached to a parent component");
-#else
- if(c->parent != 0){
- return;
- }
-#endif
-
- if(c != 0 ){
-
- if ( c->properties != 0 )
- {
- while( (prop=pvl_pop(c->properties)) != 0){
- assert(prop != 0);
- icalproperty_set_parent(prop,0);
- icalproperty_free(prop);
- }
- pvl_free(c->properties);
- }
-
-
- while( (comp=pvl_data(pvl_head(c->components))) != 0){
- assert(comp!=0);
- icalcomponent_remove_component(c,comp);
- icalcomponent_free(comp);
- }
-
- pvl_free(c->components);
-
- if (c->x_name != 0) {
- free(c->x_name);
- }
-
- if (c->timezones)
- icaltimezone_array_free (c->timezones);
-
- c->kind = ICAL_NO_COMPONENT;
- c->properties = 0;
- c->property_iterator = 0;
- c->components = 0;
- c->component_iterator = 0;
- c->x_name = 0;
- c->id[0] = 'X';
- c->timezones = NULL;
-
- free(c);
- }
-}
-
-char*
-icalcomponent_as_ical_string (icalcomponent* impl)
-{
- char* buf, *out_buf;
- const char* tmp_buf;
- size_t buf_size = 1024;
- char* buf_ptr = 0;
- pvl_elem itr;
-
-/* WIN32 automatically adds the \r, Anybody else need it?
-#ifdef ICAL_UNIX_NEWLINE
-*/
- char newline[] = "\n";
-/*
-#else
- char newline[] = "\r\n";
-#endif
-*/
-
- icalcomponent *c;
- icalproperty *p;
- icalcomponent_kind kind = icalcomponent_isa(impl);
-
- const char* kind_string;
-
- buf = icalmemory_new_buffer(buf_size);
- buf_ptr = buf;
-
- icalerror_check_arg_rz( (impl!=0), "component");
- icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT");
-
- kind_string = icalcomponent_kind_to_string(kind);
-
- icalerror_check_arg_rz( (kind_string!=0),"Unknown kind of component");
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string);
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline);
-
-
-
- for( itr = pvl_head(impl->properties);
- itr != 0;
- itr = pvl_next(itr))
- {
- p = (icalproperty*)pvl_data(itr);
-
- icalerror_assert((p!=0),"Got a null property");
- tmp_buf = icalproperty_as_ical_string(p);
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf);
- }
-
-
- for( itr = pvl_head(impl->components);
- itr != 0;
- itr = pvl_next(itr))
- {
- c = (icalcomponent*)pvl_data(itr);
-
- tmp_buf = icalcomponent_as_ical_string(c);
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf);
-
- }
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size,
- icalcomponent_kind_to_string(kind));
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline);
-
- out_buf = icalmemory_tmp_copy(buf);
- free(buf);
-
- return out_buf;
-}
-
-
-int
-icalcomponent_is_valid (icalcomponent* component)
-{
- if ( (strcmp(component->id,"comp") == 0) &&
- component->kind != ICAL_NO_COMPONENT){
- return 1;
- } else {
- return 0;
- }
-
-}
-
-
-icalcomponent_kind
-icalcomponent_isa (const icalcomponent* component)
-{
- icalerror_check_arg_rx( (component!=0), "component", ICAL_NO_COMPONENT);
-
- if(component != 0)
- {
- return component->kind;
- }
-
- return ICAL_NO_COMPONENT;
-}
-
-
-int
-icalcomponent_isa_component (void* component)
-{
- icalcomponent *impl = component;
-
- icalerror_check_arg_rz( (component!=0), "component");
-
- if (strcmp(impl->id,"comp") == 0) {
- return 1;
- } else {
- return 0;
- }
-
-}
-
-void
-icalcomponent_add_property (icalcomponent* component, icalproperty* property)
-{
- icalerror_check_arg_rv( (component!=0), "component");
- icalerror_check_arg_rv( (property!=0), "property");
-
- icalerror_assert( (!icalproperty_get_parent(property)),"The property has already been added to a component. Remove the property with icalcomponent_remove_property before calling icalcomponent_add_property");
-
- icalproperty_set_parent(property,component);
-
- pvl_push(component->properties,property);
-}
-
-
-void
-icalcomponent_remove_property (icalcomponent* component, icalproperty* property)
-{
- pvl_elem itr, next_itr;
-
- icalerror_check_arg_rv( (component!=0), "component");
- icalerror_check_arg_rv( (property!=0), "property");
-
- icalerror_assert( (icalproperty_get_parent(property)),"The property is not a member of a component");
-
-
- for( itr = pvl_head(component->properties);
- itr != 0;
- itr = next_itr)
- {
- next_itr = pvl_next(itr);
-
- if( pvl_data(itr) == (void*)property ){
-
- if (component->property_iterator == itr){
- component->property_iterator = pvl_next(itr);
- }
-
- pvl_remove( component->properties, itr);
- icalproperty_set_parent(property,0);
- }
- }
-}
-
-int
-icalcomponent_count_properties (icalcomponent* component,
- icalproperty_kind kind)
-{
- int count=0;
- pvl_elem itr;
-
- icalerror_check_arg_rz( (component!=0), "component");
-
- for( itr = pvl_head(component->properties);
- itr != 0;
- itr = pvl_next(itr))
- {
- if(kind == icalproperty_isa((icalproperty*)pvl_data(itr)) ||
- kind == ICAL_ANY_PROPERTY){
- count++;
- }
- }
-
-
- return count;
-
-}
-
-icalproperty* icalcomponent_get_current_property (icalcomponent* component)
-{
- icalerror_check_arg_rz( (component!=0),"component");
-
- if ((component->property_iterator==0)){
- return 0;
- }
-
- return (icalproperty*) pvl_data(component->property_iterator);
-}
-
-icalproperty*
-icalcomponent_get_first_property (icalcomponent* c, icalproperty_kind kind)
-{
- icalerror_check_arg_rz( (c!=0),"component");
-
- for( c->property_iterator = pvl_head(c->properties);
- c->property_iterator != 0;
- c->property_iterator = pvl_next(c->property_iterator)) {
-
- icalproperty *p = (icalproperty*) pvl_data(c->property_iterator);
-
- if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) {
-
- return p;
- }
- }
- return 0;
-}
-
-icalproperty*
-icalcomponent_get_next_property (icalcomponent* c, icalproperty_kind kind)
-{
- icalerror_check_arg_rz( (c!=0),"component");
-
- if (c->property_iterator == 0){
- return 0;
- }
-
- for( c->property_iterator = pvl_next(c->property_iterator);
- c->property_iterator != 0;
- c->property_iterator = pvl_next(c->property_iterator)) {
-
- icalproperty *p = (icalproperty*) pvl_data(c->property_iterator);
-
- if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) {
-
- return p;
- }
- }
-
- return 0;
-}
-
-
-icalproperty**
-icalcomponent_get_properties (icalcomponent* component, icalproperty_kind kind);
-
-
-void
-icalcomponent_add_component (icalcomponent* parent, icalcomponent* child)
-{
- icalerror_check_arg_rv( (parent!=0), "parent");
- icalerror_check_arg_rv( (child!=0), "child");
-
- if (child->parent !=0) {
- icalerror_set_errno(ICAL_USAGE_ERROR);
- }
-
- child->parent = parent;
-
- pvl_push(parent->components,child);
-
- /* If the new component is a VTIMEZONE, add it to our array. */
- if (child->kind == ICAL_VTIMEZONE_COMPONENT) {
- /* FIXME: Currently we are also creating this array when loading in
- a builtin VTIMEZONE, when we don't need it. */
- if (!parent->timezones)
- parent->timezones = icaltimezone_array_new ();
-
- icaltimezone_array_append_from_vtimezone (parent->timezones, child);
-
- /* Flag that we need to sort it before doing any binary searches. */
- parent->timezones_sorted = 0;
- }
-}
-
-
-void
-icalcomponent_remove_component (icalcomponent* parent, icalcomponent* child)
-{
- pvl_elem itr, next_itr;
-
- icalerror_check_arg_rv( (parent!=0), "parent");
- icalerror_check_arg_rv( (child!=0), "child");
-
- /* If the component is a VTIMEZONE, remove it from our array as well. */
- if (child->kind == ICAL_VTIMEZONE_COMPONENT) {
- icaltimezone *zone;
- int i, num_elements;
-
- num_elements = parent->timezones ? parent->timezones->num_elements : 0;
- for (i = 0; i < num_elements; i++) {
- zone = icalarray_element_at (parent->timezones, i);
- if (icaltimezone_get_component (zone) == child) {
- icaltimezone_free (zone, 0);
- icalarray_remove_element_at (parent->timezones, i);
- break;
- }
- }
- }
-
- for( itr = pvl_head(parent->components);
- itr != 0;
- itr = next_itr)
- {
- next_itr = pvl_next(itr);
-
- if( pvl_data(itr) == (void*)child ){
-
- if (parent->component_iterator == itr){
- /* Don't let the current iterator become invalid */
-
- /* HACK. The semantics for this are troubling. */
- parent->component_iterator =
- pvl_next(parent->component_iterator);
-
- }
- pvl_remove( parent->components, itr);
- child->parent = 0;
- break;
- }
- }
-}
-
-
-int
-icalcomponent_count_components (icalcomponent* component,
- icalcomponent_kind kind)
-{
- int count=0;
- pvl_elem itr;
-
- icalerror_check_arg_rz( (component!=0), "component");
-
- for( itr = pvl_head(component->components);
- itr != 0;
- itr = pvl_next(itr))
- {
- if(kind == icalcomponent_isa((icalcomponent*)pvl_data(itr)) ||
- kind == ICAL_ANY_COMPONENT){
- count++;
- }
- }
-
- return count;
-}
-
-icalcomponent*
-icalcomponent_get_current_component(icalcomponent* component)
-{
- icalerror_check_arg_rz( (component!=0),"component");
-
- if (component->component_iterator == 0){
- return 0;
- }
-
- return (icalcomponent*) pvl_data(component->component_iterator);
-}
-
-icalcomponent*
-icalcomponent_get_first_component (icalcomponent* c,
- icalcomponent_kind kind)
-{
- icalerror_check_arg_rz( (c!=0),"component");
-
- for( c->component_iterator = pvl_head(c->components);
- c->component_iterator != 0;
- c->component_iterator = pvl_next(c->component_iterator)) {
-
- icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator);
-
- if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) {
-
- return p;
- }
- }
-
- return 0;
-}
-
-
-icalcomponent*
-icalcomponent_get_next_component (icalcomponent* c, icalcomponent_kind kind)
-{
- icalerror_check_arg_rz( (c!=0),"component");
-
- if (c->component_iterator == 0){
- return 0;
- }
-
- for( c->component_iterator = pvl_next(c->component_iterator);
- c->component_iterator != 0;
- c->component_iterator = pvl_next(c->component_iterator)) {
-
- icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator);
-
- if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) {
-
- return p;
- }
- }
-
- return 0;
-}
-
-icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c)
-{
- icalcomponent *comp;
-
- for(comp = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT);
- comp != 0;
- comp = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){
-
- icalcomponent_kind kind = icalcomponent_isa(comp);
-
- if(kind == ICAL_VEVENT_COMPONENT ||
- kind == ICAL_VTODO_COMPONENT ||
- kind == ICAL_VJOURNAL_COMPONENT ||
- kind == ICAL_VFREEBUSY_COMPONENT ||
- kind == ICAL_VQUERY_COMPONENT ||
- kind == ICAL_VREPLY_COMPONENT ||
- kind == ICAL_VAGENDA_COMPONENT){
- return comp;
- }
- }
- return 0;
-}
-
-
-/** @brief Get the timespan covered by this component, in UTC
- * (deprecated)
- *
- * see icalcomponent_foreach_recurrence() for a better way to
- * extract spans from an component.
- *
- * This method can be called on either a VCALENDAR or any real
- * component. If the VCALENDAR contains no real component, but
- * contains a VTIMEZONE, we return that span instead.
- * This might not be a desirable behavior; we keep it for now
- * for backward compatibility, but it might be deprecated at a
- * future time.
- *
- * FIXME this API needs to be clarified. DTEND is defined as the
- * first available time after the end of this event, so the span
- * should actually end 1 second before DTEND.
- */
-
-icaltime_span icalcomponent_get_span(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalcomponent_kind kind;
- icaltime_span span;
- struct icaltimetype start, end;
-
- span.start = 0;
- span.end = 0;
- span.is_busy= 1;
-
- /* initial Error checking */
- if (comp == NULL) {
- return span;
- }
-
- /* FIXME this might go away */
- kind = icalcomponent_isa(comp);
- if(kind == ICAL_VCALENDAR_COMPONENT){
- inner = icalcomponent_get_first_real_component(comp);
-
- /* Maybe there is a VTIMEZONE in there */
- if (inner == 0){
- inner = icalcomponent_get_first_component(comp,
- ICAL_VTIMEZONE_COMPONENT);
- }
-
- } else {
- inner = comp;
- }
-
- if (inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/
- return span;
- }
-
- kind = icalcomponent_isa(inner);
-
- if( !( kind == ICAL_VEVENT_COMPONENT ||
- kind == ICAL_VJOURNAL_COMPONENT ||
- kind == ICAL_VTODO_COMPONENT ||
- kind == ICAL_VFREEBUSY_COMPONENT )) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/
- return span;
-
- }
-
- /* Get to work. starting with DTSTART */
- start = icalcomponent_get_dtstart(comp);
- if (icaltime_is_null_time(start)) {
- return span;
- }
- span.start = icaltime_as_timet_with_zone(start,
- icaltimezone_get_utc_timezone());
-
- /* The end time could be specified as either a DTEND or a DURATION */
- /* icalcomponent_get_dtend takes care of these cases. */
- end = icalcomponent_get_dtend(comp);
- if (icaltime_is_null_time(end)) {
- if (!icaltime_is_date(start)) {
- /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION
- it takes no time */
- span.start = 0;
- return span;
- } else {
- end = start;
- }
- }
-
- span.end = icaltime_as_timet_with_zone(end,
- icaltimezone_get_utc_timezone());
- if (icaltime_is_date(start)) {
- /* Until the end of the day*/
- span.end += 60*60*24 - 1;
- }
-
- return span;
-
-}
-
-/**
- * Decide if this recurrance is acceptable
- *
- * @param comp A valid icalcomponent.
- * @param dtstart The base dtstart value for this component.
- * @param recurtime The time to test against.
- *
- * @return true if the recurrence value is excluded, false otherwise.
- *
- * This function decides if a specific recurrence value is
- * excluded by EXRULE or EXDATE properties.
- *
- * It's not the most efficient code. You might get better performance
- * if you assume that recurtime is always increasing for each
- * call. Then you could:
- *
- * - sort the EXDATE values
- * - save the state of each EXRULE iterator for the next call.
- *
- * In this case though you don't need to worry how you call this
- * function. It will always return the correct result.
- */
-
-int icalproperty_recurrence_is_excluded(icalcomponent *comp,
- struct icaltimetype *dtstart,
- struct icaltimetype *recurtime) {
- icalproperty *exdate, *exrule;
-
- if (comp == NULL ||
- dtstart == NULL ||
- recurtime == NULL ||
- icaltime_is_null_time(*recurtime))
- /* BAD DATA */
- return 1;
-
- /** first test against the exdate values **/
- for (exdate = icalcomponent_get_first_property(comp,ICAL_EXDATE_PROPERTY);
- exdate != NULL;
- exdate = icalcomponent_get_next_property(comp,ICAL_EXDATE_PROPERTY)) {
-
- struct icaltimetype exdatetime = icalproperty_get_exdate(exdate);
-
- if (icaltime_compare(*recurtime, exdatetime) == 0) {
- /** MATCHED **/
- return 1;
- }
- }
-
- /** Now test against the EXRULEs **/
- for (exrule = icalcomponent_get_first_property(comp,ICAL_EXRULE_PROPERTY);
- exdate != NULL;
- exdate = icalcomponent_get_next_property(comp,ICAL_EXRULE_PROPERTY)) {
-
- struct icalrecurrencetype recur = icalproperty_get_exrule(exrule);
- icalrecur_iterator *exrule_itr = icalrecur_iterator_new(recur, *dtstart);
- struct icaltimetype exrule_time;
-
- while (1) {
- int result;
- exrule_time = icalrecur_iterator_next(exrule_itr);
-
- if (icaltime_is_null_time(exrule_time))
- break;
-
- result = icaltime_compare(*recurtime, exrule_time);
- if (result == 0) {
- icalrecur_iterator_free(exrule_itr);
- return 1; /** MATCH **/
- }
- if (result == 1)
- break; /** exrule_time > recurtime **/
- }
-
- icalrecur_iterator_free(exrule_itr);
- }
-
- return 0; /** no matches **/
-}
-
-/**
- * @brief Return the busy status based on the TRANSP property.
- *
- * @param comp A valid icalcomponent.
- *
- * @return 1 if the event is a busy item, 0 if it is not.
- */
-
-static int icalcomponent_is_busy(icalcomponent *comp) {
- icalproperty *transp;
- enum icalproperty_status status;
- int ret = 1;
-
- /** @todo check access control here, converting busy->free if the
- permissions do not allow access... */
-
- /* Is this a busy time? Check the TRANSP property */
- transp = icalcomponent_get_first_property(comp, ICAL_TRANSP_PROPERTY);
-
- if (transp) {
- icalvalue *transp_val = icalproperty_get_value(transp);
-
- switch (icalvalue_get_transp(transp_val)) {
- case ICAL_TRANSP_OPAQUE:
- case ICAL_TRANSP_OPAQUENOCONFLICT:
- case ICAL_TRANSP_NONE:
- ret = 1;
- break;
- case ICAL_TRANSP_TRANSPARENT:
- case ICAL_TRANSP_TRANSPARENTNOCONFLICT:
- ret = 0;
- break;
- default:
- ret = 0;
- break;
- }
- }
- status = icalcomponent_get_status(comp);
- if (ret && status) {
- switch (status) {
- case ICAL_STATUS_CANCELLED:
- case ICAL_STATUS_TENTATIVE:
- ret = 0;
- break;
- default:
- break;
- }
- }
- return(ret);
-}
-
-
-
-
-/**
- * @brief cycle through all recurrances of an event
- *
- * @param comp A valid VEVENT component
- * @param start Ignore timespans before this
- * @param end Ignore timespans after this
- * @param callback Function called for each timespan within the range
- * @param callback_data Pointer passed back to the callback function
- *
- * This function will call the specified callback function for once
- * for the base value of DTSTART, and foreach recurring date/time
- * value.
- *
- * It will filter out events that are specified as an EXDATE or an EXRULE.
- *
- * @todo We do not filter out duplicate RRULES/RDATES
- * @todo We do not handle RDATEs with explicit periods
- */
-
-void icalcomponent_foreach_recurrence(icalcomponent* comp,
- struct icaltimetype start,
- struct icaltimetype end,
- void (*callback)(icalcomponent *comp,
- struct icaltime_span *span,
- void *data),
- void *callback_data)
-{
- struct icaltimetype dtstart, dtend;
- icaltime_span recurspan, basespan, limit_span;
- time_t limit_start, limit_end;
- int dtduration;
- icalproperty *rrule, *rdate;
- struct icaldurationtype dur;
- pvl_elem property_iterator; /* for saving the iterator */
-
- if (comp == NULL || callback == NULL)
- return;
-
- dtstart = icalcomponent_get_dtstart(comp);
-
- if (icaltime_is_null_time(dtstart))
- return;
-
-
- /* The end time could be specified as either a DTEND or a DURATION */
- /* icalcomponent_get_dtend takes care of these cases. */
- dtend = icalcomponent_get_dtend(comp);
-
- /* Now set up the base span for this item, corresponding to the
- base DTSTART and DTEND */
- basespan = icaltime_span_new(dtstart, dtend, 1);
-
- basespan.is_busy = icalcomponent_is_busy(comp);
-
-
- /** Calculate the ceiling and floor values.. **/
- limit_start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone());
- if (!icaltime_is_null_time(end))
- limit_end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone());
- else
- limit_end = INT_MAX; /* max 32 bit time_t */
-
- limit_span.start = limit_start;
- limit_span.end = limit_end;
-
-
- /* Do the callback for the initial DTSTART entry */
-
- if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &dtstart)) {
- /** call callback action **/
- if (icaltime_span_overlaps(&basespan, &limit_span))
- (*callback) (comp, &basespan, callback_data);
- }
-
- recurspan = basespan;
- dtduration = basespan.end - basespan.start;
-
- /* Now cycle through the rrule entries */
- for (rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY);
- rrule != NULL;
- rrule = icalcomponent_get_next_property(comp,ICAL_RRULE_PROPERTY)) {
-
- struct icalrecurrencetype recur = icalproperty_get_rrule(rrule);
- icalrecur_iterator *rrule_itr = icalrecur_iterator_new(recur, dtstart);
- struct icaltimetype rrule_time;
-
- while (1) {
- rrule_time = icalrecur_iterator_next(rrule_itr);
-
- if (icaltime_is_null_time(rrule_time))
- break;
-
- if (!icaltime_compare(rrule_time, dtstart))
- continue;
-
- dur = icaltime_subtract(rrule_time, dtstart);
-
- recurspan.start = basespan.start + icaldurationtype_as_int(dur);
- recurspan.end = recurspan.start + dtduration;
-
- /** save the iterator ICK! **/
- property_iterator = comp->property_iterator;
-
- if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rrule_time)) {
- /** call callback action **/
- if (icaltime_span_overlaps(&recurspan, &limit_span))
- (*callback) (comp, &recurspan, callback_data);
- }
- comp->property_iterator = property_iterator;
- } /* end of iteration over a specific RRULE */
-
- icalrecur_iterator_free(rrule_itr);
- } /* end of RRULE loop */
-
-
- /** Now process RDATE entries **/
- for (rdate = icalcomponent_get_first_property(comp,ICAL_RDATE_PROPERTY);
- rdate != NULL;
- rdate = icalcomponent_get_next_property(comp,ICAL_RDATE_PROPERTY)) {
-
- struct icaldatetimeperiodtype rdate_period = icalproperty_get_rdate(rdate);
-
- /** RDATES can specify raw datetimes, periods, or dates.
- we only support raw datetimes for now..
-
- @todo Add support for other types **/
-
- if (icaltime_is_null_time(rdate_period.time))
- continue;
-
- dur = icaltime_subtract(rdate_period.time, dtstart);
-
- recurspan.start = basespan.start + icaldurationtype_as_int(dur);
- recurspan.end = recurspan.start + dtduration;
-
- /** save the iterator ICK! **/
- property_iterator = comp->property_iterator;
-
- if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rdate_period.time)) {
- /** call callback action **/
- (*callback) (comp, &recurspan, callback_data);
- }
- comp->property_iterator = property_iterator;
- }
-}
-
-
-
-int icalcomponent_check_restrictions(icalcomponent* comp){
- icalerror_check_arg_rz(comp!=0,"comp");
- return icalrestriction_check(comp);
-}
-
-/** @brief returns the number of errors encountered parsing the data
- *
- * This function counts the number times the X-LIC-ERROR occurs
- * in the data structure.
- */
-
-int icalcomponent_count_errors(icalcomponent* component)
-{
- int errors = 0;
- icalproperty *p;
- icalcomponent *c;
- pvl_elem itr;
-
- for( itr = pvl_head(component->properties);
- itr != 0;
- itr = pvl_next(itr))
- {
- p = (icalproperty*)pvl_data(itr);
-
- if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY)
- {
- errors++;
- }
- }
-
-
- for( itr = pvl_head(component->components);
- itr != 0;
- itr = pvl_next(itr))
- {
- c = (icalcomponent*)pvl_data(itr);
-
- errors += icalcomponent_count_errors(c);
-
- }
-
- return errors;
-}
-
-
-void icalcomponent_strip_errors(icalcomponent* component)
-{
- icalproperty *p;
- icalcomponent *c;
- pvl_elem itr, next_itr;
-
- for( itr = pvl_head(component->properties);
- itr != 0;
- itr = next_itr)
- {
- p = (icalproperty*)pvl_data(itr);
- next_itr = pvl_next(itr);
-
- if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY)
- {
- icalcomponent_remove_property(component,p);
- }
- }
-
- for( itr = pvl_head(component->components);
- itr != 0;
- itr = pvl_next(itr))
- {
- c = (icalcomponent*)pvl_data(itr);
- icalcomponent_strip_errors(c);
- }
-}
-
-/* Hack. This will change the state of the iterators */
-void icalcomponent_convert_errors(icalcomponent* component)
-{
- icalproperty *p, *next_p;
- icalcomponent *c;
-
- for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY);
- p != 0;
- p = next_p){
-
- next_p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY);
-
- if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY)
- {
- struct icalreqstattype rst;
- icalparameter *param = icalproperty_get_first_parameter
- (p,ICAL_XLICERRORTYPE_PARAMETER);
-
- rst.code = ICAL_UNKNOWN_STATUS;
- rst.desc = 0;
-
- switch(icalparameter_get_xlicerrortype(param)){
-
- case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: {
- rst.code = ICAL_3_2_INVPARAM_STATUS;
- break;
- }
- case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: {
- rst.code = ICAL_3_3_INVPARAMVAL_STATUS;
- break;
- }
- case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: {
- rst.code = ICAL_3_0_INVPROPNAME_STATUS;
- break;
- }
- case ICAL_XLICERRORTYPE_VALUEPARSEERROR: {
- rst.code = ICAL_3_1_INVPROPVAL_STATUS;
- break;
- }
- case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: {
- rst.code = ICAL_3_4_INVCOMP_STATUS;
- break;
- }
-
- default: {
- break;
- }
- }
- if (rst.code != ICAL_UNKNOWN_STATUS){
-
- rst.debug = icalproperty_get_xlicerror(p);
- icalcomponent_add_property(component,
- icalproperty_new_requeststatus(rst));
-
- icalcomponent_remove_property(component,p);
- }
- }
- }
-
- for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){
-
- icalcomponent_convert_errors(c);
- }
-}
-
-
-icalcomponent* icalcomponent_get_parent(icalcomponent* component)
-{
- return component->parent;
-}
-
-void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent)
-{
- component->parent = parent;
-}
-
-icalcompiter icalcompiter_null = {ICAL_NO_COMPONENT,0};
-
-
-struct icalcomponent_kind_map {
- icalcomponent_kind kind;
- char name[20];
-};
-
-
-
-static struct icalcomponent_kind_map component_map[] =
-{
- { ICAL_VEVENT_COMPONENT, "VEVENT" },
- { ICAL_VTODO_COMPONENT, "VTODO" },
- { ICAL_VJOURNAL_COMPONENT, "VJOURNAL" },
- { ICAL_VCALENDAR_COMPONENT, "VCALENDAR" },
- { ICAL_VAGENDA_COMPONENT, "VAGENDA" },
- { ICAL_VFREEBUSY_COMPONENT, "VFREEBUSY" },
- { ICAL_VTIMEZONE_COMPONENT, "VTIMEZONE" },
- { ICAL_VALARM_COMPONENT, "VALARM" },
- { ICAL_XSTANDARD_COMPONENT, "STANDARD" }, /*These are part of RFC2445 */
- { ICAL_XDAYLIGHT_COMPONENT, "DAYLIGHT" }, /*but are not really components*/
- { ICAL_X_COMPONENT, "X" },
- { ICAL_VSCHEDULE_COMPONENT, "SCHEDULE" },
-
- /* CAP components */
- { ICAL_VCAR_COMPONENT, "VCAR" },
- { ICAL_VCOMMAND_COMPONENT, "VCOMMAND" },
- { ICAL_VQUERY_COMPONENT, "VQUERY" },
- { ICAL_VREPLY_COMPONENT, "VREPLY" },
-
- /* libical private components */
- { ICAL_XLICINVALID_COMPONENT, "X-LIC-UNKNOWN" },
- { ICAL_XLICMIMEPART_COMPONENT, "X-LIC-MIME-PART" },
- { ICAL_ANY_COMPONENT, "ANY" },
- { ICAL_XROOT_COMPONENT, "XROOT" },
-
- /* End of list */
- { ICAL_NO_COMPONENT, "" },
-};
-
-
-int icalcomponent_kind_is_valid(const icalcomponent_kind kind)
-{
- int i = 0;
- do {
- if (component_map[i].kind == kind)
- return 1;
- } while (component_map[i++].kind != ICAL_NO_COMPONENT);
-
- return 0;
-}
-
-const char* icalcomponent_kind_to_string(icalcomponent_kind kind)
-{
- int i;
-
- for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) {
- if (component_map[i].kind == kind) {
- return component_map[i].name;
- }
- }
-
- return 0;
-
-}
-
-icalcomponent_kind icalcomponent_string_to_kind(const char* string)
-{
- int i;
-
- if (string ==0 ) {
- return ICAL_NO_COMPONENT;
- }
-
- for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) {
- if (strcmp(component_map[i].name, string) == 0) {
- return component_map[i].kind;
- }
- }
-
- return ICAL_NO_COMPONENT;
-}
-
-
-
-icalcompiter
-icalcomponent_begin_component(icalcomponent* component,icalcomponent_kind kind)
-{
- icalcompiter itr;
- pvl_elem i;
-
- itr.kind = kind;
- itr.iter = NULL;
-
- icalerror_check_arg_re(component!=0,"component",icalcompiter_null);
-
- for( i = pvl_head(component->components); i != 0; i = pvl_next(i)) {
-
- icalcomponent *c = (icalcomponent*) pvl_data(i);
-
- if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) {
-
- itr.iter = i;
-
- return itr;
- }
- }
-
- return icalcompiter_null;
-}
-
-icalcompiter
-icalcomponent_end_component(icalcomponent* component,icalcomponent_kind kind)
-{
- icalcompiter itr;
- pvl_elem i;
-
- itr.kind = kind;
-
- icalerror_check_arg_re(component!=0,"component",icalcompiter_null);
-
- for( i = pvl_tail(component->components); i != 0; i = pvl_prior(i)) {
-
- icalcomponent *c = (icalcomponent*) pvl_data(i);
-
- if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) {
-
- itr.iter = pvl_next(i);
-
- return itr;
- }
- }
-
- return icalcompiter_null;;
-}
-
-
-icalcomponent* icalcompiter_next(icalcompiter* i)
-{
- if (i->iter == 0){
- return 0;
- }
-
- icalerror_check_arg_rz( (i!=0),"i");
-
- for( i->iter = pvl_next(i->iter);
- i->iter != 0;
- i->iter = pvl_next(i->iter)) {
-
- icalcomponent *c = (icalcomponent*) pvl_data(i->iter);
-
- if (icalcomponent_isa(c) == i->kind
- || i->kind == ICAL_ANY_COMPONENT) {
-
- return icalcompiter_deref(i);;
- }
- }
-
- return 0;
-
-}
-
-icalcomponent* icalcompiter_prior(icalcompiter* i)
-{
- if (i->iter == 0){
- return 0;
- }
-
- for( i->iter = pvl_prior(i->iter);
- i->iter != 0;
- i->iter = pvl_prior(i->iter)) {
-
- icalcomponent *c = (icalcomponent*) pvl_data(i->iter);
-
- if (icalcomponent_isa(c) == i->kind
- || i->kind == ICAL_ANY_COMPONENT) {
-
- return icalcompiter_deref(i);;
- }
- }
-
- return 0;
-
-}
-icalcomponent* icalcompiter_deref(icalcompiter* i)
-{
- if(i->iter ==0){
- return 0;
- }
-
- return pvl_data(i->iter);
-}
-
-icalcomponent* icalcomponent_get_inner(icalcomponent* comp)
-{
- if (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT){
- return icalcomponent_get_first_real_component(comp);
- } else {
- return comp;
- }
-}
-
-/** @brief sets the METHOD property to the given method
- */
-
-void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method)
-{
- icalproperty *prop
- = icalcomponent_get_first_property(comp, ICAL_METHOD_PROPERTY);
-
-
- if (prop == 0){
- prop = icalproperty_new_method(method);
- icalcomponent_add_property(comp, prop);
- }
-
- icalproperty_set_method(prop,method);
-
-}
-
-/** @brief returns the METHOD property
- */
-
-icalproperty_method icalcomponent_get_method(icalcomponent* comp)
-{
- icalproperty *prop
- = icalcomponent_get_first_property(comp,ICAL_METHOD_PROPERTY);
-
- if (prop == 0){
- return ICAL_METHOD_NONE;
- }
-
- return icalproperty_get_method(prop);
-}
-
-#define ICALSETUPSET(p_kind) \
- icalcomponent *inner; \
- icalproperty *prop; \
- icalerror_check_arg_rv(comp!=0,"comp");\
- inner = icalcomponent_get_inner(comp); \
- if(inner == 0){\
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);\
- return;\
- }\
- prop = icalcomponent_get_first_property(inner, p_kind);
-
-
-/** @brief Set DTSTART property to given icaltime
- *
- * This method respects the icaltime type (DATE vs DATE-TIME) and
- * timezone (or lack thereof).
- */
-void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v)
-{
- char *tzid;
- ICALSETUPSET(ICAL_DTSTART_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_dtstart(v);
- icalcomponent_add_property(inner, prop);
- } else {
- icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER);
- }
-
- icalproperty_set_dtstart(prop,v);
-
- if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) {
- icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid));
- }
-}
-
-/** @brief Get a DATE or DATE-TIME property as an icaltime
- *
- * If the property is a DATE-TIME with a timezone parameter and a
- * corresponding VTIMEZONE is present in the component, the
- * returned component will already be in the correct timezone;
- * otherwise the caller is responsible for converting it.
- *
- * FIXME this is useless until we can flag the failure
- */
-static struct icaltimetype
-icalcomponent_get_datetime(icalcomponent *comp, icalproperty *prop) {
-
- icalcomponent *c;
- icalparameter *param;
- struct icaltimetype ret;
-
- ret = icalvalue_get_datetime(icalproperty_get_value(prop));
-
- if ((param = icalproperty_get_first_parameter(prop, ICAL_TZID_PARAMETER))
- != NULL) {
- const char *tzid = icalparameter_get_tzid(param);
- icaltimezone *tz = NULL;
-
- for (c = comp; c != NULL; c = icalcomponent_get_parent(c)) {
- tz = icalcomponent_get_timezone(c, tzid);
- if (tz != NULL)
- break;
- }
-
- if (tz == NULL)
- tz = icaltimezone_get_builtin_timezone(tzid);
-
- if (tz != NULL)
- ret = icaltime_set_timezone(&ret, tz);
- }
-
- return ret;
-}
-
-/** @brief Get DTSTART property as an icaltime
- *
- * If DTSTART is a DATE-TIME with a timezone parameter and a
- * corresponding VTIMEZONE is present in the component, the
- * returned component will already be in the correct timezone;
- * otherwise the caller is responsible for converting it.
- *
- * FIXME this is useless until we can flag the failure
- */
-struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
- icalproperty *prop;
-
- prop = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY);
- if (prop == 0){
- return icaltime_null_time();
- }
-
- return icalcomponent_get_datetime(comp, prop);
-}
-
-/** @brief Get DTEND property as an icaltime
- *
- * If a DTEND property is not present but a DURATION is, we use
- * that to determine the proper end.
- *
- * If DTSTART is a DATE-TIME with a timezone parameter and a
- * corresponding VTIMEZONE is present in the component, the
- * returned component will already be in the correct timezone;
- * otherwise the caller is responsible for converting it.
- *
- * FIXME this is useless until we can flag the failure
- */
-struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
- icalproperty *end_prop
- = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY);
- icalproperty *dur_prop
- = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY);
- struct icaltimetype ret = icaltime_null_time();
-
- if ( end_prop != 0) {
- ret = icalcomponent_get_datetime(comp, end_prop);
- } else if ( dur_prop != 0) {
-
- struct icaltimetype start =
- icalcomponent_get_dtstart(inner);
- struct icaldurationtype duration =
- icalproperty_get_duration(dur_prop);
-
- struct icaltimetype end = icaltime_add(start,duration);
-
- ret = end;
- }
-
- return ret;
-}
-
-/** @brief Set DTEND property to given icaltime
- *
- * This method respects the icaltime type (DATE vs DATE-TIME) and
- * timezone (or lack thereof).
- *
- * This also checks that a DURATION property isn't already there,
- * and returns an error if it is. It's the caller's responsibility
- * to remove it.
- */
-void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v)
-{
- char *tzid;
- ICALSETUPSET(ICAL_DTEND_PROPERTY);
-
- if (icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY)
- != NULL) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return;
- }
-
- if (prop == 0) {
- prop = icalproperty_new_dtend(v);
- icalcomponent_add_property(inner, prop);
- } else {
- icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER);
- }
-
- icalproperty_set_dtend(prop,v);
-
- if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) {
- icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid));
- }
-}
-
-/** @brief Set DURATION property to given icalduration
- *
- * This method respects the icaltime type (DATE vs DATE-TIME) and
- * timezone (or lack thereof).
- *
- * This also checks that a DTEND property isn't already there,
- * and returns an error if it is. It's the caller's responsibility
- * to remove it.
- */
-void icalcomponent_set_duration(icalcomponent* comp,
- struct icaldurationtype v)
-{
- ICALSETUPSET(ICAL_DURATION_PROPERTY);
-
- if (icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY) != NULL) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return;
- }
-
- if (prop == 0) {
- prop = icalproperty_new_duration(v);
- icalcomponent_add_property(inner, prop);
- } else {
- icalproperty_set_duration(prop,v);
- }
-}
-
-/** @brief Get DURATION property as an icalduration
- *
- * If a DURATION property is not present but a DTEND is, we use
- * that to determine the proper end.
- */
-struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
-
- icalproperty *end_prop
- = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY);
-
- icalproperty *dur_prop
- = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY);
-
- struct icaldurationtype ret = icaldurationtype_null_duration();
-
- if ( dur_prop != 0 && end_prop == 0) {
- ret = icalproperty_get_duration(dur_prop);
-
- } else if ( end_prop != 0 && dur_prop == 0) {
- /**
- * FIXME
- * We assume DTSTART and DTEND are not in different time zones.
- * Does the standard actually guarantee this?
- */
- struct icaltimetype start =
- icalcomponent_get_dtstart(inner);
- struct icaltimetype end =
- icalcomponent_get_dtend(inner);
-
- ret = icaltime_subtract(end, start);
- } else {
- /* Error, both duration and dtend have been specified */
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- }
- return ret;
-}
-
-void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v)
-{
-
- ICALSETUPSET(ICAL_DTSTAMP_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_dtstamp(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_dtstamp(prop,v);
-
-}
-
-
-struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
- icalproperty *prop
- = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY);
-
- if (prop == 0){
- return icaltime_null_time();
- }
-
- return icalproperty_get_dtstamp(prop);
-}
-
-
-void icalcomponent_set_summary(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_SUMMARY_PROPERTY)
-
- if (prop == 0){
- prop = icalproperty_new_summary(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_summary(prop,v);
-}
-
-
-const char* icalcomponent_get_summary(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_SUMMARY_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_summary(prop);
-
-}
-
-void icalcomponent_set_comment(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_COMMENT_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_comment(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_summary(prop,v);
-
-}
-const char* icalcomponent_get_comment(icalcomponent* comp){
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_COMMENT_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_comment(prop);
-}
-
-void icalcomponent_set_uid(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_UID_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_uid(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_summary(prop,v);
-
-}
-const char* icalcomponent_get_uid(icalcomponent* comp){
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_uid(prop);
-}
-
-void icalcomponent_set_recurrenceid(icalcomponent* comp, struct icaltimetype v)
-{
- ICALSETUPSET(ICAL_RECURRENCEID_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_recurrenceid(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_recurrenceid(prop,v);
-}
-struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalproperty *prop;
- if (comp == 0) {
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return icaltime_null_time();
- }
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return icaltime_null_time();
- }
-
- prop= icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY);
-
- if (prop == 0){
- return icaltime_null_time();
- }
-
- return icalproperty_get_recurrenceid(prop);
-}
-
-void icalcomponent_set_description(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_DESCRIPTION_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_description(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_description(prop,v);
-}
-const char* icalcomponent_get_description(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_DESCRIPTION_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_description(prop);
-}
-
-void icalcomponent_set_location(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_LOCATION_PROPERTY)
-
- if (prop == 0){
- prop = icalproperty_new_location(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_location(prop,v);
-}
-const char* icalcomponent_get_location(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_LOCATION_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_location(prop);
-}
-
-void icalcomponent_set_sequence(icalcomponent* comp, int v)
-{
- ICALSETUPSET(ICAL_SEQUENCE_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_sequence(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_sequence(prop,v);
-
-}
-int icalcomponent_get_sequence(icalcomponent* comp){
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_sequence(prop);
-}
-
-
-void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v)
-{
- ICALSETUPSET(ICAL_STATUS_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_status(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_status(prop,v);
-
-}
-enum icalproperty_status icalcomponent_get_status(icalcomponent* comp){
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_STATUS_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_status(prop);
-}
-
-icalcomponent* icalcomponent_new_vcalendar()
-{
- return icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vevent()
-{
- return icalcomponent_new(ICAL_VEVENT_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vtodo()
-{
- return icalcomponent_new(ICAL_VTODO_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vjournal()
-{
- return icalcomponent_new(ICAL_VJOURNAL_COMPONENT);
-}
-icalcomponent* icalcomponent_new_valarm()
-{
- return icalcomponent_new(ICAL_VALARM_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vfreebusy()
-{
- return icalcomponent_new(ICAL_VFREEBUSY_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vtimezone()
-{
- return icalcomponent_new(ICAL_VTIMEZONE_COMPONENT);
-}
-icalcomponent* icalcomponent_new_xstandard()
-{
- return icalcomponent_new(ICAL_XSTANDARD_COMPONENT);
-}
-icalcomponent* icalcomponent_new_xdaylight()
-{
- return icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vagenda()
-{
- return icalcomponent_new(ICAL_VAGENDA_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vquery()
-{
- return icalcomponent_new(ICAL_VQUERY_COMPONENT);
-}
-icalcomponent* icalcomponent_new_vreply()
-{
- return icalcomponent_new(ICAL_VREPLY_COMPONENT);
-}
-
-/*
- * Timezone stuff.
- */
-
-
-/**
- * This takes 2 VCALENDAR components and merges the second one into the first,
- * resolving any problems with conflicting TZIDs. comp_to_merge will no
- * longer exist after calling this function.
- */
-void icalcomponent_merge_component(icalcomponent* comp,
- icalcomponent* comp_to_merge)
-{
- icalcomponent *subcomp, *next_subcomp;
- icalarray *tzids_to_rename;
- int i;
-
- /* Check that both components are VCALENDAR components. */
- assert (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT);
- assert (icalcomponent_isa(comp_to_merge) == ICAL_VCALENDAR_COMPONENT);
-
- /* Step through each subcomponent of comp_to_merge, looking for VTIMEZONEs.
- For each VTIMEZONE found, check if we need to add it to comp and if we
- need to rename it and all TZID references to it. */
- tzids_to_rename = icalarray_new (sizeof (char*), 16);
- subcomp = icalcomponent_get_first_component (comp_to_merge,
- ICAL_VTIMEZONE_COMPONENT);
- while (subcomp) {
- next_subcomp = icalcomponent_get_next_component (comp_to_merge,
- ICAL_VTIMEZONE_COMPONENT);
- /* This will add the VTIMEZONE to comp, if necessary, and also update
- the array of TZIDs we need to rename. */
- icalcomponent_merge_vtimezone (comp, subcomp, tzids_to_rename);
- /* FIXME: Handle possible NEWFAILED error. */
-
- subcomp = next_subcomp;
- }
-
- /* If we need to do any renaming of TZIDs, do it now. */
- if (tzids_to_rename->num_elements != 0) {
- icalcomponent_rename_tzids (comp_to_merge, tzids_to_rename);
-
- /* Now free the tzids_to_rename array. */
- for (i = 0; i < tzids_to_rename->num_elements; i++) {
- free (icalarray_element_at (tzids_to_rename, i));
- }
- icalarray_free (tzids_to_rename);
- }
-
- /* Now move all the components from comp_to_merge to comp, excluding
- VTIMEZONE components. */
- subcomp = icalcomponent_get_first_component (comp_to_merge,
- ICAL_ANY_COMPONENT);
- while (subcomp) {
- next_subcomp = icalcomponent_get_next_component (comp_to_merge,
- ICAL_ANY_COMPONENT);
- if (icalcomponent_isa(subcomp) != ICAL_VTIMEZONE_COMPONENT) {
- icalcomponent_remove_component (comp_to_merge, subcomp);
- icalcomponent_add_component (comp, subcomp);
- }
- subcomp = next_subcomp;
- }
-
- /* Free comp_to_merge. We have moved most of the subcomponents over to
- comp now. */
- icalcomponent_free (comp_to_merge);
-}
-
-
-static void icalcomponent_merge_vtimezone (icalcomponent *comp,
- icalcomponent *vtimezone,
- icalarray *tzids_to_rename)
-{
- icalproperty *tzid_prop;
- const char *tzid;
- char *tzid_copy;
- icaltimezone *existing_vtimezone;
-
- /* Get the TZID of the VTIMEZONE. */
- tzid_prop = icalcomponent_get_first_property (vtimezone, ICAL_TZID_PROPERTY);
- if (!tzid_prop)
- return;
-
- tzid = icalproperty_get_tzid (tzid_prop);
- if (!tzid)
- return;
-
- /* See if there is already a VTIMEZONE in comp with the same TZID. */
- existing_vtimezone = icalcomponent_get_timezone (comp, tzid);
-
- /* If there is no existing VTIMEZONE with the same TZID, we can just move
- the VTIMEZONE to comp and return. */
- if (!existing_vtimezone) {
- icalcomponent_remove_component (icalcomponent_get_parent (vtimezone),
- vtimezone);
- icalcomponent_add_component (comp, vtimezone);
- return;
- }
-
- /* If the TZID has a '/' prefix, then we don't have to worry about the
- clashing TZIDs, as they are supposed to be exactly the same VTIMEZONE. */
- if (tzid[0] == '/')
- return;
-
- /* Now we have two VTIMEZONEs with the same TZID (which isn't a globally
- unique one), so we compare the VTIMEZONE components to see if they are
- the same. If they are, we don't need to do anything. We make a copy of
- the tzid, since the parameter may get modified in these calls. */
- tzid_copy = strdup (tzid);
- if (!tzid_copy) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- if (!icalcomponent_compare_vtimezones (comp, vtimezone)) {
- /* FIXME: Handle possible NEWFAILED error. */
-
- /* Now we have two different VTIMEZONEs with the same TZID. */
- icalcomponent_handle_conflicting_vtimezones (comp, vtimezone, tzid_prop,
- tzid_copy, tzids_to_rename);
- }
- free (tzid_copy);
-}
-
-
-static void
-icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp,
- icalcomponent *vtimezone,
- icalproperty *tzid_prop,
- const char *tzid,
- icalarray *tzids_to_rename)
-{
- int i, suffix, max_suffix = 0, num_elements;
- unsigned int tzid_len;
- char *tzid_copy, *new_tzid, suffix_buf[32];
-
- /* Find the length of the TZID without any trailing digits. */
- tzid_len = icalcomponent_get_tzid_prefix_len (tzid);
-
- /* Step through each of the VTIMEZONEs in comp. We may already have the
- clashing VTIMEZONE in the calendar, but it may have been renamed
- (i.e. a unique number added on the end of the TZID, e.g. 'London2').
- So we compare the new VTIMEZONE with any VTIMEZONEs that have the
- same prefix (e.g. 'London'). If it matches any of those, we have to
- rename the TZIDs to that TZID, else we rename to a new TZID, using
- the biggest numeric suffix found + 1. */
- num_elements = comp->timezones ? comp->timezones->num_elements : 0;
- for (i = 0; i < num_elements; i++) {
- icaltimezone *zone;
- char *existing_tzid, *existing_tzid_copy;
- unsigned int existing_tzid_len;
-
- zone = icalarray_element_at (comp->timezones, i);
- existing_tzid = icaltimezone_get_tzid (zone);
-
- /* Find the length of the TZID without any trailing digits. */
- existing_tzid_len = icalcomponent_get_tzid_prefix_len (existing_tzid);
-
- /* Check if we have the same prefix. */
- if (tzid_len == existing_tzid_len
- && !strncmp (tzid, existing_tzid, tzid_len)) {
- /* Compare the VTIMEZONEs. */
- if (icalcomponent_compare_vtimezones (icaltimezone_get_component (zone),
- vtimezone)) {
- /* The VTIMEZONEs match, so we can use the existing VTIMEZONE. But
- we have to rename TZIDs to this TZID. */
- tzid_copy = strdup (tzid);
- existing_tzid_copy = strdup (existing_tzid);
- if (!tzid_copy || !existing_tzid_copy) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- } else {
- icalarray_append (tzids_to_rename, tzid_copy);
- icalarray_append (tzids_to_rename, existing_tzid_copy);
- }
- return;
- } else {
- /* FIXME: Handle possible NEWFAILED error. */
-
- /* Convert the suffix to an integer and remember the maximum numeric
- suffix found. */
- suffix = atoi (existing_tzid + existing_tzid_len);
- if (max_suffix < suffix)
- max_suffix = suffix;
- }
- }
- }
-
- /* We didn't find a VTIMEZONE that matched, so we have to rename the TZID,
- using the maximum numerical suffix found + 1. */
- tzid_copy = strdup (tzid);
- sprintf (suffix_buf, "%i", max_suffix + 1);
- new_tzid = malloc (tzid_len + strlen (suffix_buf) + 1);
- if (!new_tzid || !tzid_copy) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- strncpy (new_tzid, tzid, tzid_len);
- strcpy (new_tzid + tzid_len, suffix_buf);
- icalarray_append (tzids_to_rename, tzid_copy);
- icalarray_append (tzids_to_rename, new_tzid);
-}
-
-
-/* Returns the length of the TZID, without any trailing digits. */
-static unsigned int icalcomponent_get_tzid_prefix_len (const char *tzid)
-{
- int len;
- const char *p;
-
- len = strlen (tzid);
- p = tzid + len - 1;
- while (len > 0 && *p >= '0' && *p <= '9') {
- p--;
- len--;
- }
-
- return len;
-}
-
-
-/**
- * Renames all references to the given TZIDs to a new name. rename_table
- * contains pairs of strings - a current TZID, and the new TZID to rename it
- * to.
- */
-static void icalcomponent_rename_tzids(icalcomponent* comp,
- icalarray* rename_table)
-{
- icalcomponent_foreach_tzid (comp, icalcomponent_rename_tzids_callback,
- rename_table);
-}
-
-
-static void icalcomponent_rename_tzids_callback(icalparameter *param, void *data)
-{
- icalarray *rename_table = data;
- const char *tzid;
- int i;
-
- tzid = icalparameter_get_tzid (param);
- if (!tzid)
- return;
-
- /* Step through the rename table to see if the current TZID matches
- any of the ones we want to rename. */
- for (i = 0; i < rename_table->num_elements - 1; i += 2) {
- if (!strcmp (tzid, icalarray_element_at (rename_table, i))) {
- icalparameter_set_tzid (param, icalarray_element_at (rename_table, i + 1));
- break;
- }
- }
-}
-
-
-/**
- * Calls the given function for each TZID parameter found in the component.
- */
-void icalcomponent_foreach_tzid(icalcomponent* comp,
- void (*callback)(icalparameter *param, void *data),
- void *callback_data)
-{
- icalproperty *prop;
- icalproperty_kind kind;
- icalparameter *param;
- icalcomponent *subcomp;
-
- /* First look for any TZID parameters used in this component itself. */
- prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY);
- while (prop) {
- kind = icalproperty_isa (prop);
-
- /* These are the only properties that can have a TZID. Note that
- COMPLETED, CREATED, DTSTAMP & LASTMODIFIED must be in UTC. */
- if (kind == ICAL_DTSTART_PROPERTY || kind == ICAL_DTEND_PROPERTY
- || kind == ICAL_DUE_PROPERTY || kind == ICAL_EXDATE_PROPERTY
- || kind == ICAL_RDATE_PROPERTY) {
- param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
- if (param)
- (*callback) (param, callback_data);
- }
-
- prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY);
- }
-
- /* Now recursively check child components. */
- subcomp = icalcomponent_get_first_component (comp, ICAL_ANY_COMPONENT);
- while (subcomp) {
- icalcomponent_foreach_tzid (subcomp, callback, callback_data);
- subcomp = icalcomponent_get_next_component (comp, ICAL_ANY_COMPONENT);
- }
-}
-
-
-
-/**
- * Returns the icaltimezone from the component corresponding to the given
- * TZID, or NULL if the component does not have a corresponding VTIMEZONE.
- */
-icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid)
-{
- icaltimezone *zone;
- int lower, upper, middle, cmp;
- char *zone_tzid;
-
- if (!comp->timezones)
- return NULL;
-
- /* Sort the array if necessary (by the TZID string). */
- if (!comp->timezones_sorted) {
- icalarray_sort (comp->timezones, icalcomponent_compare_timezone_fn);
- comp->timezones_sorted = 1;
- }
-
- /* Do a simple binary search. */
- lower = middle = 0;
- upper = comp->timezones->num_elements;
-
- while (lower < upper) {
- middle = (lower + upper) >> 1;
- zone = icalarray_element_at (comp->timezones, middle);
- zone_tzid = icaltimezone_get_tzid (zone);
- cmp = strcmp (tzid, zone_tzid);
- if (cmp == 0)
- return zone;
- else if (cmp < 0)
- upper = middle;
- else
- lower = middle + 1;
- }
-
- return NULL;
-}
-
-
-/**
- * A function to compare 2 icaltimezone elements, used for qsort().
- */
-static int icalcomponent_compare_timezone_fn (const void *elem1,
- const void *elem2)
-{
- icaltimezone *zone1, *zone2;
- const char *zone1_tzid, *zone2_tzid;
-
- zone1 = (icaltimezone*) elem1;
- zone2 = (icaltimezone*) elem2;
-
- zone1_tzid = icaltimezone_get_tzid (zone1);
- zone2_tzid = icaltimezone_get_tzid (zone2);
-
- return strcmp (zone1_tzid, zone2_tzid);
-}
-
-
-/**
- * Compares 2 VTIMEZONE components to see if they match, ignoring their TZIDs.
- * It returns 1 if they match, 0 if they don't, or -1 on error.
- */
-static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1,
- icalcomponent *vtimezone2)
-{
- icalproperty *prop1, *prop2;
- const char *tzid1, *tzid2;
- char *tzid2_copy, *string1, *string2;
- int cmp;
-
- /* Get the TZID property of the first VTIMEZONE. */
- prop1 = icalcomponent_get_first_property (vtimezone1, ICAL_TZID_PROPERTY);
- if (!prop1)
- return -1;
-
- tzid1 = icalproperty_get_tzid (prop1);
- if (!tzid1)
- return -1;
-
- /* Get the TZID property of the second VTIMEZONE. */
- prop2 = icalcomponent_get_first_property (vtimezone2, ICAL_TZID_PROPERTY);
- if (!prop2)
- return -1;
-
- tzid2 = icalproperty_get_tzid (prop2);
- if (!tzid2)
- return -1;
-
- /* Copy the second TZID, and set the property to the same as the first
- TZID, since we don't care if these match of not. */
- tzid2_copy = strdup (tzid2);
- if (!tzid2_copy) {
- icalerror_set_errno (ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- icalproperty_set_tzid (prop2, tzid1);
-
- /* Now convert both VTIMEZONEs to strings and compare them. */
- string1 = icalcomponent_as_ical_string (vtimezone1);
- if (!string1) {
- free (tzid2_copy);
- return -1;
- }
-
- string2 = icalcomponent_as_ical_string (vtimezone2);
- if (!string2) {
- free (string1);
- free (tzid2_copy);
- return -1;
- }
-
- cmp = strcmp (string1, string2);
-
- free (string1);
- free (string2);
-
- /* Now reset the second TZID. */
- icalproperty_set_tzid (prop2, tzid2_copy);
- free (tzid2_copy);
-
- return (cmp == 0) ? 1 : 0;
-}
-
-
-
-
-
-
-/**
- * @brief set the RELCALID property of a component.
- *
- * @param comp Valid calendar component.
- * @param v Relcalid URL value
- */
-
-void icalcomponent_set_relcalid(icalcomponent* comp, const char* v)
-{
- ICALSETUPSET(ICAL_RELCALID_PROPERTY);
-
- if (prop == 0){
- prop = icalproperty_new_relcalid(v);
- icalcomponent_add_property(inner, prop);
- }
-
- icalproperty_set_relcalid(prop,v);
-
-}
-
-
-/**
- * @brief get the RELCALID property of a component.
- *
- * @param comp Valid calendar component.
- */
-
-const char* icalcomponent_get_relcalid(icalcomponent* comp){
- icalcomponent *inner;
- icalproperty *prop;
- icalerror_check_arg_rz(comp!=0,"comp");
-
- inner = icalcomponent_get_inner(comp);
-
- if(inner == 0){
- return 0;
- }
-
- prop= icalcomponent_get_first_property(inner,ICAL_RELCALID_PROPERTY);
-
- if (prop == 0){
- return 0;
- }
-
- return icalproperty_get_relcalid(prop);
-}
-
-
-/** @brief Return the time a TODO task is DUE.
- *
- * @param comp Valid calendar component.
- *
- * Uses the DUE: property if it exists, otherwise we calculate the DUE
- * value by adding the task's duration to the DTSTART time
- */
-
-struct icaltimetype icalcomponent_get_due(icalcomponent* comp)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
-
- icalproperty *due_prop
- = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY);
-
- icalproperty *dur_prop
- = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY);
-
- if( due_prop == 0 && dur_prop == 0){
- return icaltime_null_time();
- } else if ( due_prop != 0) {
- return icalproperty_get_due(due_prop);
- } else if ( dur_prop != 0) {
-
- struct icaltimetype start =
- icalcomponent_get_dtstart(inner);
- struct icaldurationtype duration =
- icalproperty_get_duration(dur_prop);
-
- struct icaltimetype due = icaltime_add(start,duration);
-
- return due;
-
- } else {
- /* Error, both duration and due have been specified */
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return icaltime_null_time();
-
- }
-
-}
-
-/** @brief Set the due date of a VTODO task.
- *
- * @param comp Valid VTODO component.
- * @param v Valid due date time.
- *
- * - If no duration or due properties then set the DUE property.
- * - If a DUE property is already set, then reset it to the value v.
- * - If a DURATION property is already set, then calculate the new
- * duration based on the supplied value of v.
- */
-
-void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v)
-{
- icalcomponent *inner = icalcomponent_get_inner(comp);
-
- icalproperty *due_prop
- = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY);
-
- icalproperty *dur_prop
- = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY);
-
-
- if( due_prop == 0 && dur_prop == 0){
- due_prop = icalproperty_new_due(v);
- icalcomponent_add_property(inner,due_prop);
- } else if ( due_prop != 0) {
- icalproperty_set_due(due_prop,v);
- } else if ( dur_prop != 0) {
- struct icaltimetype start =
- icalcomponent_get_dtstart(inner);
-
- struct icaltimetype due =
- icalcomponent_get_due(inner);
-
- struct icaldurationtype dur
- = icaltime_subtract(due,start);
-
- icalproperty_set_duration(dur_prop,dur);
-
- } else {
- /* Error, both duration and due have been specified */
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- }
-}
diff --git a/libical/src/libical/icalcomponent.h b/libical/src/libical/icalcomponent.h
deleted file mode 100644
index be9bf8cc17..0000000000
--- a/libical/src/libical/icalcomponent.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcomponent.h
- CREATOR: eric 20 March 1999
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalcomponent.h
-
-======================================================================*/
-
-#ifndef ICALCOMPONENT_H
-#define ICALCOMPONENT_H
-
-#include "icalproperty.h"
-#include "icalvalue.h"
-#include "icalenums.h" /* defines icalcomponent_kind */
-#include "pvl.h"
-
-typedef struct icalcomponent_impl icalcomponent;
-
-#ifndef ICALTIMEZONE_DEFINED
-#define ICALTIMEZONE_DEFINED
-/** @brief An opaque struct representing a timezone.
- * We declare this here to avoid a circular dependancy.
- */
-typedef struct _icaltimezone icaltimezone;
-#endif
-
-
-/* This is exposed so that callers will not have to allocate and
- deallocate iterators. Pretend that you can't see it. */
-typedef struct icalcompiter
-{
- icalcomponent_kind kind;
- pvl_elem iter;
-
-} icalcompiter;
-
-icalcomponent* icalcomponent_new(icalcomponent_kind kind);
-icalcomponent* icalcomponent_new_clone(icalcomponent* component);
-icalcomponent* icalcomponent_new_from_string(char* str);
-icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...);
-void icalcomponent_free(icalcomponent* component);
-
-char* icalcomponent_as_ical_string(icalcomponent* component);
-
-int icalcomponent_is_valid(icalcomponent* component);
-
-icalcomponent_kind icalcomponent_isa(const icalcomponent* component);
-
-int icalcomponent_isa_component (void* component);
-
-/*
- * Working with properties
- */
-
-void icalcomponent_add_property(icalcomponent* component,
- icalproperty* property);
-
-void icalcomponent_remove_property(icalcomponent* component,
- icalproperty* property);
-
-int icalcomponent_count_properties(icalcomponent* component,
- icalproperty_kind kind);
-
-/* Iterate through the properties */
-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);
-
-
-/*
- * Working with components
- */
-
-
-/* Return the first VEVENT, VTODO or VJOURNAL sub-component of cop, or
- comp if it is one of those types */
-
-icalcomponent* icalcomponent_get_inner(icalcomponent* comp);
-
-
-void icalcomponent_add_component(icalcomponent* parent,
- icalcomponent* child);
-
-void icalcomponent_remove_component(icalcomponent* parent,
- icalcomponent* child);
-
-int icalcomponent_count_components(icalcomponent* component,
- icalcomponent_kind kind);
-
-/**
- This takes 2 VCALENDAR components and merges the second one into the first,
- resolving any problems with conflicting TZIDs. comp_to_merge will no
- longer exist after calling this function. */
-void icalcomponent_merge_component(icalcomponent* comp,
- icalcomponent* comp_to_merge);
-
-
-/* Iteration Routines. There are two forms of iterators, internal and
-external. The internal ones came first, and are almost completely
-sufficient, but they fail badly when you want to construct a loop that
-removes components from the container.*/
-
-
-/* Iterate through components */
-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);
-
-/* Using external iterators */
-icalcompiter icalcomponent_begin_component(icalcomponent* component,
- icalcomponent_kind kind);
-icalcompiter icalcomponent_end_component(icalcomponent* component,
- icalcomponent_kind kind);
-icalcomponent* icalcompiter_next(icalcompiter* i);
-icalcomponent* icalcompiter_prior(icalcompiter* i);
-icalcomponent* icalcompiter_deref(icalcompiter* i);
-
-
-/* Working with embedded error properties */
-
-
-/* Check the component against itip rules and insert error properties*/
-/* Working with embedded error properties */
-int icalcomponent_check_restrictions(icalcomponent* comp);
-
-/** Count embedded errors. */
-int icalcomponent_count_errors(icalcomponent* component);
-
-/** Remove all X-LIC-ERROR properties*/
-void icalcomponent_strip_errors(icalcomponent* component);
-
-/** Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/
-void icalcomponent_convert_errors(icalcomponent* component);
-
-/* Internal operations. They are private, and you should not be using them. */
-icalcomponent* icalcomponent_get_parent(icalcomponent* component);
-void icalcomponent_set_parent(icalcomponent* component,
- icalcomponent* parent);
-
-/* Kind conversion routines */
-
-int icalcomponent_kind_is_valid(const icalcomponent_kind kind);
-
-icalcomponent_kind icalcomponent_string_to_kind(const char* string);
-
-const char* icalcomponent_kind_to_string(icalcomponent_kind kind);
-
-
-/************* Derived class methods. ****************************
-
-If the code was in an OO language, the remaining routines would be
-members of classes derived from icalcomponent. Don't call them on the
-wrong component subtypes. */
-
-/** For VCOMPONENT: Return a reference to the first VEVENT, VTODO or
- VJOURNAL */
-icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c);
-
-/** For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end
- times of an event in UTC */
-struct icaltime_span icalcomponent_get_span(icalcomponent* comp);
-
-/******************** Convienience routines **********************/
-
-void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v);
-struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp);
-
-/* For the icalcomponent routines only, dtend and duration are tied
- together. If you call the set routine for one and the other exists,
- the routine will calculate the change to the other. That is, if
- there is a DTEND and you call set_duration, the routine will modify
- DTEND to be the sum of DTSTART and the duration. If you call a get
- routine for one and the other exists, the routine will calculate
- the return value. If you call a set routine and neither exists, the
- routine will create the apcompriate comperty */
-
-
-struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp);
-void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v);
-
-struct icaltimetype icalcomponent_get_due(icalcomponent* comp);
-void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v);
-
-void icalcomponent_set_duration(icalcomponent* comp,
- struct icaldurationtype v);
-struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp);
-
-void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method);
-icalproperty_method icalcomponent_get_method(icalcomponent* comp);
-
-struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp);
-void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v);
-
-void icalcomponent_set_summary(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_summary(icalcomponent* comp);
-
-void icalcomponent_set_comment(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_comment(icalcomponent* comp);
-
-void icalcomponent_set_uid(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_uid(icalcomponent* comp);
-
-void icalcomponent_set_relcalid(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_relcalid(icalcomponent* comp);
-
-void icalcomponent_set_recurrenceid(icalcomponent* comp,
- struct icaltimetype v);
-struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp);
-
-void icalcomponent_set_description(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_description(icalcomponent* comp);
-
-void icalcomponent_set_location(icalcomponent* comp, const char* v);
-const char* icalcomponent_get_location(icalcomponent* comp);
-
-void icalcomponent_set_sequence(icalcomponent* comp, int v);
-int icalcomponent_get_sequence(icalcomponent* comp);
-
-void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v);
-enum icalproperty_status icalcomponent_get_status(icalcomponent* comp);
-
-
-/** Calls the given function for each TZID parameter found in the
- component, and any subcomponents. */
-void icalcomponent_foreach_tzid(icalcomponent* comp,
- void (*callback)(icalparameter *param, void *data),
- void *callback_data);
-
-/** Returns the icaltimezone in the component corresponding to the
- TZID, or NULL if it can't be found. */
-icaltimezone* icalcomponent_get_timezone(icalcomponent* comp,
- const char *tzid);
-
-int icalproperty_recurrence_is_excluded(icalcomponent *comp,
- struct icaltimetype *dtstart,
- struct icaltimetype *recurtime);
-
-void icalcomponent_foreach_recurrence(icalcomponent* comp,
- struct icaltimetype start,
- struct icaltimetype end,
- void (*callback)(icalcomponent *comp,
- struct icaltime_span *span,
- void *data),
- void *callback_data);
-
-
-/*************** Type Specific routines ***************/
-
-icalcomponent* icalcomponent_new_vcalendar();
-icalcomponent* icalcomponent_new_vevent();
-icalcomponent* icalcomponent_new_vtodo();
-icalcomponent* icalcomponent_new_vjournal();
-icalcomponent* icalcomponent_new_valarm();
-icalcomponent* icalcomponent_new_vfreebusy();
-icalcomponent* icalcomponent_new_vtimezone();
-icalcomponent* icalcomponent_new_xstandard();
-icalcomponent* icalcomponent_new_xdaylight();
-icalcomponent* icalcomponent_new_vagenda();
-icalcomponent* icalcomponent_new_vquery();
-
-#endif /* !ICALCOMPONENT_H */
diff --git a/libical/src/libical/icalderivedparameter.c.in b/libical/src/libical/icalderivedparameter.c.in
deleted file mode 100644
index 250cf188ee..0000000000
--- a/libical/src/libical/icalderivedparameter.c.in
+++ /dev/null
@@ -1,205 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalderivedparameters.{c,h}
- CREATOR: eric 09 May 1999
-
- $Id: icalderivedparameter.c.in,v 1.3 2003/10/21 18:28:29 ettore Exp $
- $Locker: $
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalderivedparameters.{c,h}
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
- ======================================================================*/
-/*#line 29 "icalparameter.c.in"*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "icalparameter.h"
-#include "icalparameterimpl.h"
-
-#include "icalproperty.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-
-#include <stdlib.h> /* for malloc() */
-#include <errno.h>
-#include <string.h> /* for memset() */
-
-icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value);
-
-struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind);
-
-/* This map associates each of the parameters with the string
- representation of the paramter's name */
-struct icalparameter_kind_map {
- icalparameter_kind kind;
- char *name;
-
-};
-
-/* This map associates the enumerations for the VALUE parameter with
- the kinds of VALUEs. */
-
-struct icalparameter_value_kind_map {
- icalparameter_value value;
- icalvalue_kind kind;
-};
-
-/* This map associates the parameter enumerations with a specific parameter and the string representation of the enumeration */
-
-struct icalparameter_map {
- icalparameter_kind kind;
- int enumeration;
- const char* str;
-};
-
-
-
-<insert_code_here>
-
-const char* icalparameter_kind_to_string(icalparameter_kind kind)
-{
- int i;
-
- for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) {
- if (parameter_map[i].kind == kind) {
- return parameter_map[i].name;
- }
- }
-
- return 0;
-
-}
-
-icalparameter_kind icalparameter_string_to_kind(const char* string)
-{
- int i;
-
- if (string ==0 ) {
- return ICAL_NO_PARAMETER;
- }
-
- for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) {
-
- if (strcmp(parameter_map[i].name, string) == 0) {
- return parameter_map[i].kind;
- }
- }
-
- if(strncmp(string,"X-",2)==0){
- return ICAL_X_PARAMETER;
- }
-
- return ICAL_NO_PARAMETER;
-}
-
-
-icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value)
-{
- int i;
-
- for (i=0; value_kind_map[i].kind != ICAL_NO_VALUE; i++) {
-
- if (value_kind_map[i].value == value) {
- return value_kind_map[i].kind;
- }
- }
-
- return ICAL_NO_VALUE;
-}
-
-
-const char* icalparameter_enum_to_string(int e)
-{
- int i;
-
- icalerror_check_arg_rz(e >= ICALPARAMETER_FIRST_ENUM,"e");
- icalerror_check_arg_rz(e <= ICALPARAMETER_LAST_ENUM,"e");
-
- for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){
- if(e == icalparameter_map[i].enumeration){
- return icalparameter_map[i].str;
- }
- }
-
- return 0;
-}
-
-int icalparameter_string_to_enum(const char* str)
-{
- int i;
-
- icalerror_check_arg_rz(str != 0,"str");
-
- for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){
- if(strcmp(str,icalparameter_map[i].str) == 0) {
- return icalparameter_map[i].enumeration;
- }
- }
-
- return 0;
-}
-
-icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val)
-{
-
- struct icalparameter_impl* param=0;
- int found_kind = 0;
- int i;
-
- icalerror_check_arg_rz((val!=0),"val");
-
- /* Search through the parameter map to find a matching kind */
-
- param = icalparameter_new_impl(kind);
-
- for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){
- if(kind == icalparameter_map[i].kind) {
- found_kind = 1;
- if(strcmp(val,icalparameter_map[i].str) == 0) {
-
- param->data = (int)icalparameter_map[i].enumeration;
- return param;
- }
- }
- }
-
- if(found_kind == 1){
- /* The kind was in the parameter map, but the string did not
- match, so assume that it is an alternate value, like an
- X-value.*/
-
- icalparameter_set_xvalue(param, val);
-
- } else {
-
- /* If the kind was not found, then it must be a string type */
-
- ((struct icalparameter_impl*)param)->string = icalmemory_strdup(val);
-
- }
-
- return param;
-}
-
-
-
-
diff --git a/libical/src/libical/icalderivedparameter.h.in b/libical/src/libical/icalderivedparameter.h.in
deleted file mode 100644
index 0e7c29fa65..0000000000
--- a/libical/src/libical/icalderivedparameter.h.in
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalparam.h
- CREATOR: eric 20 March 1999
-
-
- $Id: icalderivedparameter.h.in,v 1.3 2003/10/21 18:28:29 ettore Exp $
- $Locker: $
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalparam.h
-
- ======================================================================*/
-
-#ifndef ICALDERIVEDPARAMETER_H
-#define ICALDERIVEDPARAMETER_H
-
-
-typedef struct icalparameter_impl icalparameter;
-
-const char* icalparameter_enum_to_string(int e);
-int icalparameter_string_to_enum(const char* str);
-
-<insert_code_here>
diff --git a/libical/src/libical/icalderivedproperty.c.in b/libical/src/libical/icalderivedproperty.c.in
deleted file mode 100644
index 30b86b0f8c..0000000000
--- a/libical/src/libical/icalderivedproperty.c.in
+++ /dev/null
@@ -1,285 +0,0 @@
-/* -*- Mode: C -*- */
-
-/*======================================================================
- FILE: icalderivedproperty.c
- CREATOR: eric 15 Feb 2001
-
- $Id: icalderivedproperty.c.in,v 1.3 2003/10/21 18:28:29 ettore Exp $
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalproperty.c
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalproperty.h"
-#include "icalcomponent.h"
-#include "pvl.h"
-#include "icalenums.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalparser.h"
-
-#include <string.h> /* For icalmemory_strdup, rindex */
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <stdio.h> /* for printf */
-#include <stdarg.h> /* for va_list, va_start, etc. */
-
-struct icalproperty_impl*
-icalproperty_new_impl (icalproperty_kind kind);
-void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args);
-
-/* This map associates the property kinds with the string
- representation of the property name and the kind of VALUE that the
- property uses as a default */
-
-struct icalproperty_map {
- icalproperty_kind kind;
- const char *name;
- icalvalue_kind value;
-
-};
-
-/* This map associates the property enumerations with the king of
- property that they are used in and the string representation of the
- enumeration */
-
-struct icalproperty_enum_map {
- icalproperty_kind prop;
- int prop_enum;
- const char* str;
-};
-
-
-<insert_code_here>
-
-int icalproperty_kind_is_valid(const icalproperty_kind kind)
-{
- int i = 0;
- do {
- if (property_map[i].kind == kind)
- return 1;
- } while (property_map[i++].kind != ICAL_NO_PROPERTY);
-
- return 0;
-}
-
-const char* icalproperty_kind_to_string(icalproperty_kind kind)
-{
- int i;
-
- for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) {
- if (property_map[i].kind == kind) {
- return property_map[i].name;
- }
- }
-
- return 0;
-
-}
-
-
-icalproperty_kind icalproperty_string_to_kind(const char* string)
-{
- int i;
-
- if (string ==0 ) {
- return ICAL_NO_PROPERTY;
- }
-
-
- for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) {
- if (strcmp(property_map[i].name, string) == 0) {
- return property_map[i].kind;
- }
- }
-
- if(strncmp(string,"X-",2)==0){
- return ICAL_X_PROPERTY;
- }
-
-
- return ICAL_NO_PROPERTY;
-}
-
-
-icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind)
-{
- int i;
-
- for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) {
- if ( property_map[i].value == kind ) {
- return property_map[i].kind;
- }
- }
-
- return ICAL_NO_PROPERTY;
-}
-
-
-
-icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind)
-{
- int i;
-
- for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) {
- if ( property_map[i].kind == kind ) {
- return property_map[i].value;
- }
- }
-
- return ICAL_NO_VALUE;
-}
-
-
-const char* icalproperty_enum_to_string(int e)
-{
- icalerror_check_arg_rz(e >= ICALPROPERTY_FIRST_ENUM,"e");
- icalerror_check_arg_rz(e <= ICALPROPERTY_LAST_ENUM,"e");
-
- return enum_map[e-ICALPROPERTY_FIRST_ENUM].str;
-}
-
-int icalproperty_kind_and_string_to_enum(const int kind, const char* str)
-{
- icalproperty_kind pkind;
- int i;
-
- icalerror_check_arg_rz(str!=0,"str")
-
- if ((pkind = icalproperty_value_kind_to_kind(kind)) == ICAL_NO_VALUE)
- return 0;
-
- while(*str == ' '){
- str++;
- }
-
- for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) {
- if (enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == pkind)
- break;
- }
- if (i == ICALPROPERTY_LAST_ENUM)
- return 0;
-
- for (; i != ICALPROPERTY_LAST_ENUM; i++) {
- if ( strcmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) {
- return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum;
- }
- }
-
- return 0;
-}
-
-/** @deprecated please use icalproperty_kind_and_string_to_enum instead */
-int icalproperty_string_to_enum(const char* str)
-{
- int i;
-
- icalerror_check_arg_rz(str!=0,"str")
-
- while(*str == ' '){
- str++;
- }
-
- for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) {
- if ( strcmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) {
- return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum;
- }
- }
-
- return 0;
-}
-
-int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e)
-{
- int i;
-
-
- for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) {
- if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum == e &&
- enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == kind ){
- return 1;
- }
- }
-
- return 0;
-}
-
-
-const char* icalproperty_method_to_string(icalproperty_method method)
-{
- icalerror_check_arg_rz(method >= ICAL_METHOD_X,"method");
- icalerror_check_arg_rz(method <= ICAL_METHOD_NONE,"method");
-
- return enum_map[method-ICALPROPERTY_FIRST_ENUM].str;
-}
-
-icalproperty_method icalproperty_string_to_method(const char* str)
-{
- int i;
-
- icalerror_check_arg_rx(str!=0,"str",ICAL_METHOD_NONE)
-
- while(*str == ' '){
- str++;
- }
-
- for (i=ICAL_METHOD_X-ICALPROPERTY_FIRST_ENUM;
- i != ICAL_METHOD_NONE-ICALPROPERTY_FIRST_ENUM;
- i++) {
- if ( strcmp(enum_map[i].str, str) == 0) {
- return (icalproperty_method)enum_map[i].prop_enum;
- }
- }
-
- return ICAL_METHOD_NONE;
-}
-
-
-const char* icalenum_status_to_string(icalproperty_status status)
-{
- icalerror_check_arg_rz(status >= ICAL_STATUS_X,"status");
- icalerror_check_arg_rz(status <= ICAL_STATUS_NONE,"status");
-
- return enum_map[status-ICALPROPERTY_FIRST_ENUM].str;
-}
-
-icalproperty_status icalenum_string_to_status(const char* str)
-{
- int i;
-
- icalerror_check_arg_rx(str!=0,"str",ICAL_STATUS_NONE)
-
- while(*str == ' '){
- str++;
- }
-
- for (i=ICAL_STATUS_X-ICALPROPERTY_FIRST_ENUM;
- i != ICAL_STATUS_NONE-ICALPROPERTY_FIRST_ENUM;
- i++) {
- if ( strcmp(enum_map[i].str, str) == 0) {
- return (icalproperty_status)enum_map[i].prop_enum;
- }
- }
-
- return ICAL_STATUS_NONE;
-
-}
diff --git a/libical/src/libical/icalderivedproperty.h.in b/libical/src/libical/icalderivedproperty.h.in
deleted file mode 100644
index 515034742d..0000000000
--- a/libical/src/libical/icalderivedproperty.h.in
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalderivedproperties.{c,h}
- CREATOR: eric 09 May 1999
-
- $Id: icalderivedproperty.h.in,v 1.3 2003/10/21 18:28:29 ettore Exp $
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-
-
-#ifndef ICALDERIVEDPROPERTY_H
-#define ICALDERIVEDPROPERTY_H
-
-#include <time.h>
-#include "icalparameter.h"
-#include "icalderivedvalue.h"
-#include "icalrecur.h"
-
-typedef struct icalproperty_impl icalproperty;
-
-<insert_code_here>
diff --git a/libical/src/libical/icalderivedvalue.c.in b/libical/src/libical/icalderivedvalue.c.in
deleted file mode 100644
index 33f5083589..0000000000
--- a/libical/src/libical/icalderivedvalue.c.in
+++ /dev/null
@@ -1,337 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue.c
- CREATOR: eric 02 May 1999
-
- $Id: icalderivedvalue.c.in,v 1.5 2003/10/21 18:28:29 ettore Exp $
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvalue.c
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalparser.h"
-#include "icalenums.h"
-
-#include "icalvalueimpl.h"
-
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for sprintf */
-#include <string.h> /* For memset, others */
-#include <stddef.h> /* For offsetof() macro */
-#include <errno.h>
-#include <time.h> /* for mktime */
-#include <stdlib.h> /* for atoi and atof */
-#include <limits.h> /* for SHRT_MAX */
-
-struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind);
-
-/* This map associates each of the value types with its string
- representation */
-struct icalvalue_kind_map {
- icalvalue_kind kind;
- char name[20];
-};
-
-<insert_code_here>
-
-
-int icalvalue_kind_is_valid(const icalvalue_kind kind)
-{
- int i = 0;
- do {
- if (value_map[i].kind == kind)
- return 1;
- } while (value_map[i++].kind != ICAL_NO_VALUE);
-
- return 0;
-}
-
-const char* icalvalue_kind_to_string(const icalvalue_kind kind)
-{
- int i;
-
- for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) {
- if (value_map[i].kind == kind) {
- return value_map[i].name;
- }
- }
-
- return 0;
-}
-
-icalvalue_kind icalvalue_string_to_kind(const char* str)
-{
- int i;
-
- for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) {
- if (strcmp(value_map[i].name,str) == 0) {
- return value_map[i].kind;
- }
- }
-
- return value_map[i].kind;
-
-}
-
-icalvalue* icalvalue_new_x (const char* v){
- struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_X_VALUE);
- icalerror_check_arg_rz( (v!=0),"v");
-
- icalvalue_set_x((icalvalue*)impl,v);
- return (icalvalue*)impl;
-}
-void icalvalue_set_x(icalvalue* impl, const char* v) {
- icalerror_check_arg_rv( (impl!=0),"value");
- icalerror_check_arg_rv( (v!=0),"v");
-
- if(impl->x_value!=0) {free((void*)impl->x_value);}
-
- impl->x_value = icalmemory_strdup(v);
-
- if (impl->x_value == 0){
- errno = ENOMEM;
- }
-
- }
-const char* icalvalue_get_x(const icalvalue* value) {
-
- icalerror_check_arg( (value!=0),"value");
- icalerror_check_value_type(value, ICAL_X_VALUE);
- return value->x_value;
-}
-
-/* Recur is a special case, so it is not auto generated. */
-icalvalue*
-icalvalue_new_recur (struct icalrecurrencetype v)
-{
- struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_RECUR_VALUE);
-
- icalvalue_set_recur((icalvalue*)impl,v);
-
- return (icalvalue*)impl;
-}
-
-void
-icalvalue_set_recur(icalvalue* impl, struct icalrecurrencetype v)
-{
- icalerror_check_arg_rv( (impl!=0),"value");
- icalerror_check_value_type(value, ICAL_RECUR_VALUE);
-
- if (impl->data.v_recur != 0){
- free(impl->data.v_recur);
- impl->data.v_recur = 0;
- }
-
- impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype));
-
- if (impl->data.v_recur == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- } else {
- memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype));
- }
-
-}
-
-struct icalrecurrencetype
-icalvalue_get_recur(const icalvalue* value)
-{
- icalerror_check_arg( (value!=0),"value");
- icalerror_check_value_type(value, ICAL_RECUR_VALUE);
-
- return *(value->data.v_recur);
-}
-
-
-
-
-icalvalue*
-icalvalue_new_trigger (struct icaltriggertype v)
-{
- struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRIGGER_VALUE);
-
- icalvalue_set_trigger((icalvalue*)impl,v);
-
- return (icalvalue*)impl;
-}
-
-void
-icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v)
-{
- icalerror_check_arg_rv( (value!=0),"value");
-
- if(!icaltime_is_null_time(v.time)){
- icalvalue_set_datetime(value,v.time);
- value->kind = ICAL_DATETIME_VALUE;
- } else {
- icalvalue_set_duration(value,v.duration);
- value->kind = ICAL_DURATION_VALUE;
- }
-}
-
-struct icaltriggertype
-icalvalue_get_trigger(const icalvalue* impl)
-{
- struct icaltriggertype tr;
-
- icalerror_check_arg( (impl!=0),"value");
- icalerror_check_arg( (impl!=0),"value");
-
- if(impl->kind == ICAL_DATETIME_VALUE){
- tr.duration = icaldurationtype_from_int(0);
- tr.time = impl->data.v_time;
- } else if(impl->kind == ICAL_DURATION_VALUE){
- tr.time = icaltime_null_time();
- tr.duration = impl->data.v_duration;
- } else {
- tr.duration = icaldurationtype_from_int(0);
- tr.time = icaltime_null_time();
- icalerror_set_errno(ICAL_BADARG_ERROR);
- }
-
- return tr;
-}
-
-/* DATE-TIME-PERIOD is a special case, and is not auto generated */
-
-icalvalue*
-icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v)
-{
- struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE);
-
- icalvalue_set_datetimeperiod(impl,v);
-
- return (icalvalue*)impl;
-}
-
-void
-icalvalue_set_datetimeperiod(icalvalue* impl, struct icaldatetimeperiodtype v)
-{
- icalerror_check_arg_rv( (impl!=0),"value");
-
- icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE);
-
- if(!icaltime_is_null_time(v.time)){
- if(!icaltime_is_valid_time(v.time)){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return;
- }
- impl->kind = ICAL_DATETIME_VALUE;
- icalvalue_set_datetime(impl,v.time);
- } else if (!icalperiodtype_is_null_period(v.period)) {
- if(!icalperiodtype_is_valid_period(v.period)){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return;
- }
- impl->kind = ICAL_PERIOD_VALUE;
- icalvalue_set_period(impl,v.period);
- } else {
- icalerror_set_errno(ICAL_BADARG_ERROR);
- }
-}
-
-struct icaldatetimeperiodtype
-icalvalue_get_datetimeperiod(const icalvalue* impl)
-{
- struct icaldatetimeperiodtype dtp;
-
- icalerror_check_arg( (impl!=0),"value");
- icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE);
-
- if(impl->kind == ICAL_DATETIME_VALUE){
- dtp.period = icalperiodtype_null_period();
- dtp.time = impl->data.v_time;
- } else if(impl->kind == ICAL_PERIOD_VALUE) {
- dtp.period = impl->data.v_period;
- dtp.time = icaltime_null_time();
- } else {
- dtp.period = icalperiodtype_null_period();
- dtp.time = icaltime_null_time();
- icalerror_set_errno(ICAL_BADARG_ERROR);
- }
-
- return dtp;
-}
-
-
-
-icalvalue *
-icalvalue_new_attach (icalattach *attach)
-{
- struct icalvalue_impl *impl;
-
- icalerror_check_arg_rz ((attach != NULL), "attach");
-
- impl = icalvalue_new_impl (ICAL_ATTACH_VALUE);
- if (!impl) {
- errno = ENOMEM;
- return NULL;
- }
-
- icalvalue_set_attach ((icalvalue *) impl, attach);
- return (icalvalue *) impl;
-}
-
-void
-icalvalue_set_attach (icalvalue *value, icalattach *attach)
-{
- struct icalvalue_impl *impl;
-
- icalerror_check_arg_rv ((value != NULL), "value");
- icalerror_check_value_type (value, ICAL_ATTACH_VALUE);
- icalerror_check_arg_rv ((attach != NULL), "attach");
-
- impl = (struct icalvalue_impl *) value;
-
- icalattach_ref (attach);
-
- if (impl->data.v_attach)
- icalattach_unref (impl->data.v_attach);
-
- impl->data.v_attach = attach;
-}
-
-icalattach *
-icalvalue_get_attach (const icalvalue *value)
-{
- icalerror_check_arg_rz ((value != NULL), "value");
- icalerror_check_value_type (value, ICAL_ATTACH_VALUE);
-
- return value->data.v_attach;
-}
-
-
-
-
-
-
-
-/* The remaining interfaces are 'new', 'set' and 'get' for each of the value
- types */
-
-
-/* Everything below this line is machine generated. Do not edit. */
diff --git a/libical/src/libical/icalderivedvalue.h.in b/libical/src/libical/icalderivedvalue.h.in
deleted file mode 100644
index ab52499aa8..0000000000
--- a/libical/src/libical/icalderivedvalue.h.in
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue.h
- CREATOR: eric 20 March 1999
-
-
- $Id: icalderivedvalue.h.in,v 1.4 2003/10/21 18:28:29 ettore Exp $
- $Locker: $
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvalue.h
-
- ======================================================================*/
-
-#ifndef ICALDERIVEDVALUE_H
-#define ICALDERIVEDVALUE_H
-
-#include "icaltypes.h"
-#include "icalrecur.h"
-#include "icaltime.h"
-#include "icalduration.h"
-#include "icalperiod.h"
-#include "icalattach.h"
-
-typedef struct icalvalue_impl icalvalue;
-
-
-
-void icalvalue_set_x(icalvalue* value, const char* v);
-icalvalue* icalvalue_new_x(const char* v);
-const char* icalvalue_get_x(const icalvalue* value);
-
-icalvalue* icalvalue_new_recur (struct icalrecurrencetype v);
-void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v);
-struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value);
-
-icalvalue* icalvalue_new_trigger (struct icaltriggertype v);
-void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v);
-struct icaltriggertype icalvalue_get_trigger(const icalvalue* value);
-
-icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v);
-void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v);
-struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value);
-
-icalvalue *icalvalue_new_attach (icalattach *attach);
-void icalvalue_set_attach (icalvalue *value, icalattach *attach);
-icalattach *icalvalue_get_attach (const icalvalue *value);
-
-void icalvalue_reset_kind(icalvalue* value);
-
-<insert_code_here>
diff --git a/libical/src/libical/icalduration.c b/libical/src/libical/icalduration.c
deleted file mode 100644
index 821a3b7688..0000000000
--- a/libical/src/libical/icalduration.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaltime.c
- CREATOR: eric 02 June 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalduration.h"
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalvalue.h"
-
-
-
-
-/* From Seth Alves, <alves@hungry.com> */
-struct icaldurationtype icaldurationtype_from_int(int t)
-{
- struct icaldurationtype dur;
- int used = 0;
-
- dur = icaldurationtype_null_duration();
-
- if(t < 0){
- dur.is_neg = 1;
- t = -t;
- }
-
- if (t % (60 * 60 * 24 * 7) == 0) {
- dur.weeks = t / (60 * 60 * 24 * 7);
- } else {
- used += dur.weeks * (60 * 60 * 24 * 7);
- dur.days = (t - used) / (60 * 60 * 24);
- used += dur.days * (60 * 60 * 24);
- dur.hours = (t - used) / (60 * 60);
- used += dur.hours * (60 * 60);
- dur.minutes = (t - used) / (60);
- used += dur.minutes * (60);
- dur.seconds = (t - used);
- }
-
- return dur;
-}
-
-struct icaldurationtype icaldurationtype_from_string(const char* str)
-{
-
- int i;
- int begin_flag = 0;
- int time_flag = 0;
- int date_flag = 0;
- int week_flag = 0;
- int digits=-1;
- int scan_size = -1;
- int size = strlen(str);
- char p;
- struct icaldurationtype d;
-
- memset(&d, 0, sizeof(struct icaldurationtype));
-
- for(i=0;i != size;i++){
- p = str[i];
-
- switch(p)
- {
- case '-': {
- if(i != 0 || begin_flag == 1) goto error;
-
- d.is_neg = 1;
- break;
- }
-
- case 'P': {
- if (i != 0 && i !=1 ) goto error;
- begin_flag = 1;
- break;
- }
-
- case 'T': {
- time_flag = 1;
- break;
- }
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
-
- /* HACK. Skip any more digits if the l;ast one
- read has not been assigned */
- if(digits != -1){
- break;
- }
-
- if (begin_flag == 0) goto error;
- /* Get all of the digits, not one at a time */
- scan_size = sscanf(&str[i],"%d",&digits);
- if(scan_size == 0) goto error;
- break;
- }
-
- case 'H': {
- if (time_flag == 0||week_flag == 1||d.hours !=0||digits ==-1)
- goto error;
- d.hours = digits; digits = -1;
- break;
- }
- case 'M': {
- if (time_flag == 0||week_flag==1||d.minutes != 0||digits ==-1)
- goto error;
- d.minutes = digits; digits = -1;
- break;
- }
- case 'S': {
- if (time_flag == 0||week_flag==1||d.seconds!=0||digits ==-1)
- goto error;
- d.seconds = digits; digits = -1;
- break;
- }
- case 'W': {
- if (time_flag==1||date_flag==1||d.weeks!=0||digits ==-1)
- goto error;
- week_flag = 1;
- d.weeks = digits; digits = -1;
- break;
- }
- case 'D': {
- if (time_flag==1||week_flag==1||d.days!=0||digits ==-1)
- goto error;
- date_flag = 1;
- d.days = digits; digits = -1;
- break;
- }
- default: {
- goto error;
- }
-
- }
- }
-
- return d;
-
-
- error:
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return icaldurationtype_bad_duration();
-}
-
-#define TMP_BUF_SIZE 1024
-static
-void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size,
- char* sep, unsigned int value) {
-
- char temp[TMP_BUF_SIZE];
-
- sprintf(temp,"%d",value);
-
- icalmemory_append_string(buf, buf_ptr, buf_size, temp);
- icalmemory_append_string(buf, buf_ptr, buf_size, sep);
-
-}
-
-char* icaldurationtype_as_ical_string(struct icaldurationtype d)
-{
-
- char *buf, *output_line;
- size_t buf_size = 256;
- char* buf_ptr = 0;
- int seconds;
-
- buf = (char*)icalmemory_new_buffer(buf_size);
- buf_ptr = buf;
-
-
- seconds = icaldurationtype_as_int(d);
-
- if(seconds !=0){
-
- if(d.is_neg == 1){
- icalmemory_append_char(&buf, &buf_ptr, &buf_size, '-');
- }
-
- icalmemory_append_char(&buf, &buf_ptr, &buf_size, 'P');
-
- if (d.weeks != 0 ) {
- append_duration_segment(&buf, &buf_ptr, &buf_size, "W", d.weeks);
- }
-
- if (d.days != 0 ) {
- append_duration_segment(&buf, &buf_ptr, &buf_size, "D", d.days);
- }
-
- if (d.hours != 0 || d.minutes != 0 || d.seconds != 0) {
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "T");
-
- if (d.hours != 0 ) {
- append_duration_segment(&buf, &buf_ptr, &buf_size, "H", d.hours);
- }
- if (d.minutes != 0 ) {
- append_duration_segment(&buf, &buf_ptr, &buf_size, "M",
- d.minutes);
- }
- if (d.seconds != 0 ) {
- append_duration_segment(&buf, &buf_ptr, &buf_size, "S",
- d.seconds);
- }
-
- }
- } else {
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "PT0S");
- }
-
- output_line = icalmemory_tmp_copy(buf);
- icalmemory_free_buffer(buf);
-
- return output_line;
-
-}
-
-
-/* From Russel Steinthal */
-int icaldurationtype_as_int(struct icaldurationtype dur)
-{
- return (int)( (dur.seconds +
- (60 * dur.minutes) +
- (60 * 60 * dur.hours) +
- (60 * 60 * 24 * dur.days) +
- (60 * 60 * 24 * 7 * dur.weeks))
- * (dur.is_neg==1? -1 : 1) ) ;
-}
-
-struct icaldurationtype icaldurationtype_null_duration(void)
-{
- struct icaldurationtype d;
-
- memset(&d,0,sizeof(struct icaldurationtype));
-
- return d;
-}
-
-int icaldurationtype_is_null_duration(struct icaldurationtype d)
-{
- if(icaldurationtype_as_int(d) == 0){
- return 1;
- } else {
- return 0;
- }
-}
-
-/* in icalvalue_new_from_string_with_error, we should not call
- icaldurationtype_is_null_duration() to see if there is an error
- condition. Null duration is perfectly valid for an alarm.
- We cannot depend on the caller to check icalerrno either,
- following the philosophy of unix errno. we set the is_neg
- to -1 to indicate that this is a bad duration.
-*/
-struct icaldurationtype icaldurationtype_bad_duration()
-{
- struct icaldurationtype d;
- memset(&d,0,sizeof(struct icaldurationtype));
- d.is_neg = -1;
- return d;
-}
-
-int icaldurationtype_is_bad_duration(struct icaldurationtype d)
-{
- return (d.is_neg == -1);
-}
-
-
-struct icaltimetype icaltime_add(struct icaltimetype t,
- struct icaldurationtype d)
-{
- int dt = icaldurationtype_as_int(d);
-
- t.second += dt;
-
- t = icaltime_normalize(t);
-
- return t;
-}
-
-struct icaldurationtype icaltime_subtract(struct icaltimetype t1,
- struct icaltimetype t2)
-{
-
- time_t t1t = icaltime_as_timet(t1);
- time_t t2t = icaltime_as_timet(t2);
-
- return icaldurationtype_from_int((int)(t1t-t2t));
-
-
-}
-
diff --git a/libical/src/libical/icalduration.h b/libical/src/libical/icalduration.h
deleted file mode 100644
index 0e64cad9cd..0000000000
--- a/libical/src/libical/icalduration.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalduration.h
- CREATOR: eric 26 Jan 2001
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALDURATION_H
-#define ICALDURATION_H
-
-#include "icaltime.h"
-
-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(void);
-struct icaldurationtype icaldurationtype_bad_duration(void);
-int icaldurationtype_is_null_duration(struct icaldurationtype d);
-int icaldurationtype_is_bad_duration(struct icaldurationtype d);
-
-struct icaltimetype icaltime_add(struct icaltimetype t,
- struct icaldurationtype d);
-
-struct icaldurationtype icaltime_subtract(struct icaltimetype t1,
- struct icaltimetype t2);
-
-#endif /* !ICALDURATION_H */
-
-
-
diff --git a/libical/src/libical/icalenums.c b/libical/src/libical/icalenums.c
deleted file mode 100644
index 66c5ccd0cf..0000000000
--- a/libical/src/libical/icalenums.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalenum.c
- CREATOR: eric 29 April 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalenum.c
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalenums.h"
-
-#include <stdio.h> /* For fprintf */
-#include <stdio.h> /* For stderr */
-#include <string.h> /* For strncmp */
-#include <assert.h>
-#include "icalmemory.h"
-
-/*** @brief Allowed request status values
- */
-static struct {
- enum icalrequeststatus kind;
- int major;
- int minor;
- const char* str;
-} request_status_map[] = {
- {ICAL_2_0_SUCCESS_STATUS, 2,0,"Success."},
- {ICAL_2_1_FALLBACK_STATUS, 2,1,"Success but fallback taken on one or more property values."},
- {ICAL_2_2_IGPROP_STATUS, 2,2,"Success, invalid property ignored."},
- {ICAL_2_3_IGPARAM_STATUS, 2,3,"Success, invalid property parameter ignored."},
- {ICAL_2_4_IGXPROP_STATUS, 2,4,"Success, unknown non-standard property ignored."},
- {ICAL_2_5_IGXPARAM_STATUS, 2,5,"Success, unknown non standard property value ignored."},
- {ICAL_2_6_IGCOMP_STATUS, 2,6,"Success, invalid calendar component ignored."},
- {ICAL_2_7_FORWARD_STATUS, 2,7,"Success, request forwarded to Calendar User."},
- {ICAL_2_8_ONEEVENT_STATUS, 2,8,"Success, repeating event ignored. Scheduled as a single component."},
- {ICAL_2_9_TRUNC_STATUS, 2,9,"Success, truncated end date time to date boundary."},
- {ICAL_2_10_ONETODO_STATUS, 2,10,"Success, repeating VTODO ignored. Scheduled as a single VTODO."},
- {ICAL_2_11_TRUNCRRULE_STATUS, 2,11,"Success, unbounded RRULE clipped at some finite number of instances "},
- {ICAL_3_0_INVPROPNAME_STATUS, 3,0,"Invalid property name."},
- {ICAL_3_1_INVPROPVAL_STATUS, 3,1,"Invalid property value."},
- {ICAL_3_2_INVPARAM_STATUS, 3,2,"Invalid property parameter."},
- {ICAL_3_3_INVPARAMVAL_STATUS, 3,3,"Invalid property parameter value."},
- {ICAL_3_4_INVCOMP_STATUS, 3,4,"Invalid calendar component."},
- {ICAL_3_5_INVTIME_STATUS, 3,5,"Invalid date or time."},
- {ICAL_3_6_INVRULE_STATUS, 3,6,"Invalid rule."},
- {ICAL_3_7_INVCU_STATUS, 3,7,"Invalid Calendar User."},
- {ICAL_3_8_NOAUTH_STATUS, 3,8,"No authority."},
- {ICAL_3_9_BADVERSION_STATUS, 3,9,"Unsupported version."},
- {ICAL_3_10_TOOBIG_STATUS, 3,10,"Request entity too large."},
- {ICAL_3_11_MISSREQCOMP_STATUS, 3,11,"Required component or property missing."},
- {ICAL_3_12_UNKCOMP_STATUS, 3,12,"Unknown component or property found."},
- {ICAL_3_13_BADCOMP_STATUS, 3,13,"Unsupported component or property found"},
- {ICAL_3_14_NOCAP_STATUS, 3,14,"Unsupported capability."},
- {ICAL_3_15_INVCOMMAND, 3,15,"Invalid command."},
- {ICAL_4_0_BUSY_STATUS, 4,0,"Event conflict. Date/time is busy."},
- {ICAL_4_1_STORE_ACCESS_DENIED, 4,1,"Store Access Denied."},
- {ICAL_4_2_STORE_FAILED, 4,2,"Store Failed."},
- {ICAL_4_3_STORE_NOT_FOUND, 4,3,"Store not found."},
- {ICAL_5_0_MAYBE_STATUS, 5,0,"Request MAY supported."},
- {ICAL_5_1_UNAVAIL_STATUS, 5,1,"Service unavailable."},
- {ICAL_5_2_NOSERVICE_STATUS, 5,2,"Invalid calendar service."},
- {ICAL_5_3_NOSCHED_STATUS, 5,3,"No scheduling support for user."},
- {ICAL_6_1_CONTAINER_NOT_FOUND, 6,1,"Container not found."},
- {ICAL_9_0_UNRECOGNIZED_COMMAND, 9,0,"An unrecognized command was received."},
- {ICAL_UNKNOWN_STATUS, 0,0,"Error: Unknown request status"}
-};
-
-
-/*** @brief Return the descriptive text for a request status
- */
-const char* icalenum_reqstat_desc(icalrequeststatus stat)
-{
- int i;
-
- for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) {
- if ( request_status_map[i].kind == stat) {
- return request_status_map[i].str;
- }
- }
-
- return 0;
-}
-
-/*** @brief Return the code for a request status
- */
-char* icalenum_reqstat_code(icalrequeststatus stat)
-{
- int i, major, minor;
- char tmpbuf[36];
-
- for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) {
- if ( request_status_map[i].kind == stat) {
- major = request_status_map[i].major;
- minor = request_status_map[i].minor;
- sprintf(tmpbuf, "%i.%i", major, minor);
- return icalmemory_tmp_copy(tmpbuf);
- }
- }
- return NULL;
-}
-
-/*** @brief Return the major number for a request status
- */
-short icalenum_reqstat_major(icalrequeststatus stat)
-{
- int i;
-
- for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) {
- if ( request_status_map[i].kind == stat) {
- return request_status_map[i].major;
- }
- }
- return -1;
-}
-
-/*** @brief Return the minor number for a request status
- */
-short icalenum_reqstat_minor(icalrequeststatus stat)
-{
- int i;
-
- for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) {
- if ( request_status_map[i].kind == stat) {
- return request_status_map[i].minor;
- }
- }
- return -1;
-}
-
-
-/*** @brief Return a request status for major/minor status numbers
- */
-icalrequeststatus icalenum_num_to_reqstat(short major, short minor)
-{
- int i;
-
- for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) {
- if ( request_status_map[i].major == major && request_status_map[i].minor == minor) {
- return request_status_map[i].kind;
- }
- }
- return 0;
-}
-
-
-
diff --git a/libical/src/libical/icalenums.h b/libical/src/libical/icalenums.h
deleted file mode 100644
index dde5e5afb6..0000000000
--- a/libical/src/libical/icalenums.h
+++ /dev/null
@@ -1,166 +0,0 @@
-
-/* -*- Mode: C -*-*/
-/*======================================================================
- FILE: icalenums.h
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalenums.h
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
-======================================================================*/
-
-#ifndef ICALENUMS_H
-#define ICALENUMS_H
-
-
-
-/***********************************************************************
- * Component enumerations
-**********************************************************************/
-
-typedef enum icalcomponent_kind {
- ICAL_NO_COMPONENT,
- ICAL_ANY_COMPONENT, /* Used to select all components*/
- ICAL_XROOT_COMPONENT,
- ICAL_XATTACH_COMPONENT, /* MIME attached data, returned by parser. */
- ICAL_VEVENT_COMPONENT,
- ICAL_VTODO_COMPONENT,
- ICAL_VJOURNAL_COMPONENT,
- ICAL_VCALENDAR_COMPONENT,
- ICAL_VAGENDA_COMPONENT,
- ICAL_VFREEBUSY_COMPONENT,
- ICAL_VALARM_COMPONENT,
- ICAL_XAUDIOALARM_COMPONENT,
- ICAL_XDISPLAYALARM_COMPONENT,
- ICAL_XEMAILALARM_COMPONENT,
- ICAL_XPROCEDUREALARM_COMPONENT,
- ICAL_VTIMEZONE_COMPONENT,
- ICAL_XSTANDARD_COMPONENT,
- ICAL_XDAYLIGHT_COMPONENT,
- ICAL_X_COMPONENT,
- ICAL_VSCHEDULE_COMPONENT,
- ICAL_VQUERY_COMPONENT,
- ICAL_VREPLY_COMPONENT,
- ICAL_VCAR_COMPONENT,
- ICAL_VCOMMAND_COMPONENT,
- ICAL_XLICINVALID_COMPONENT,
- ICAL_XLICMIMEPART_COMPONENT /* a non-stardard component that mirrors
- structure of MIME data */
-
-} icalcomponent_kind;
-
-
-
-/***********************************************************************
- * Request Status codes
- **********************************************************************/
-
-typedef enum icalrequeststatus {
- ICAL_UNKNOWN_STATUS,
- ICAL_2_0_SUCCESS_STATUS,
- ICAL_2_1_FALLBACK_STATUS,
- ICAL_2_2_IGPROP_STATUS,
- ICAL_2_3_IGPARAM_STATUS,
- ICAL_2_4_IGXPROP_STATUS,
- ICAL_2_5_IGXPARAM_STATUS,
- ICAL_2_6_IGCOMP_STATUS,
- ICAL_2_7_FORWARD_STATUS,
- ICAL_2_8_ONEEVENT_STATUS,
- ICAL_2_9_TRUNC_STATUS,
- ICAL_2_10_ONETODO_STATUS,
- ICAL_2_11_TRUNCRRULE_STATUS,
- ICAL_3_0_INVPROPNAME_STATUS,
- ICAL_3_1_INVPROPVAL_STATUS,
- ICAL_3_2_INVPARAM_STATUS,
- ICAL_3_3_INVPARAMVAL_STATUS,
- ICAL_3_4_INVCOMP_STATUS,
- ICAL_3_5_INVTIME_STATUS,
- ICAL_3_6_INVRULE_STATUS,
- ICAL_3_7_INVCU_STATUS,
- ICAL_3_8_NOAUTH_STATUS,
- ICAL_3_9_BADVERSION_STATUS,
- ICAL_3_10_TOOBIG_STATUS,
- ICAL_3_11_MISSREQCOMP_STATUS,
- ICAL_3_12_UNKCOMP_STATUS,
- ICAL_3_13_BADCOMP_STATUS,
- ICAL_3_14_NOCAP_STATUS,
- ICAL_3_15_INVCOMMAND,
- ICAL_4_0_BUSY_STATUS,
- ICAL_4_1_STORE_ACCESS_DENIED,
- ICAL_4_2_STORE_FAILED,
- ICAL_4_3_STORE_NOT_FOUND,
- ICAL_5_0_MAYBE_STATUS,
- ICAL_5_1_UNAVAIL_STATUS,
- ICAL_5_2_NOSERVICE_STATUS,
- ICAL_5_3_NOSCHED_STATUS,
- ICAL_6_1_CONTAINER_NOT_FOUND,
- ICAL_9_0_UNRECOGNIZED_COMMAND
-} icalrequeststatus;
-
-
-const char* icalenum_reqstat_desc(icalrequeststatus stat);
-short icalenum_reqstat_major(icalrequeststatus stat);
-short icalenum_reqstat_minor(icalrequeststatus stat);
-icalrequeststatus icalenum_num_to_reqstat(short major, short minor);
-char* icalenum_reqstat_code(icalrequeststatus stat);
-
-/***********************************************************************
- * Conversion functions
-**********************************************************************/
-
-
-/* Thse routines used to be in icalenums.c, but were moved into the
- icalproperty, icalparameter, icalvalue, or icalcomponent modules. */
-
-/* const char* icalproperty_kind_to_string(icalproperty_kind kind);*/
-#define icalenum_property_kind_to_string(x) icalproperty_kind_to_string(x)
-
-/*icalproperty_kind icalproperty_string_to_kind(const char* string)*/
-#define icalenum_string_to_property_kind(x) icalproperty_string_to_kind(x)
-
-/*icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);*/
-#define icalenum_property_kind_to_value_kind(x) icalproperty_kind_to_value_kind(x)
-
-/*const char* icalenum_method_to_string(icalproperty_method);*/
-#define icalenum_method_to_string(x) icalproperty_method_to_string(x)
-
-/*icalproperty_method icalenum_string_to_method(const char* string);*/
-#define icalenum_string_to_method(x) icalproperty_string_to_method(x)
-
-/*const char* icalenum_status_to_string(icalproperty_status);*/
-#define icalenum_status_to_string(x) icalproperty_status_to_string(x)
-
-/*icalproperty_status icalenum_string_to_status(const char* string);*/
-#define icalenum_string_to_status(x) icalproperty_string_to_status(x)
-
-/*icalvalue_kind icalenum_string_to_value_kind(const char* str);*/
-#define icalenum_string_to_value_kind(x) icalvalue_string_to_kind(x)
-
-/*const char* icalenum_value_kind_to_string(icalvalue_kind kind);*/
-#define icalenum_value_kind_to_string(x) icalvalue_kind_to_string(x)
-
-/*const char* icalenum_component_kind_to_string(icalcomponent_kind kind);*/
-#define icalenum_component_kind_to_string(x) icalcomponent_kind_to_string(x)
-
-/*icalcomponent_kind icalenum_string_to_component_kind(const char* string);*/
-#define icalenum_string_to_component_kind(x) icalcomponent_string_to_kind(x)
-
-
-#endif /* !ICALENUMS_H */
-
diff --git a/libical/src/libical/icalerror.c b/libical/src/libical/icalerror.c
deleted file mode 100644
index 61043b2fce..0000000000
--- a/libical/src/libical/icalerror.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalerror.c
- CREATOR: eric 16 May 1999
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalerror.c
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h> /* for malloc() */
-#include <string.h> /* for strcmp */
-#include "icalerror.h"
-
-#ifdef HAVE_PTHREAD
-#include <pthread.h>
-
-static pthread_key_t icalerrno_key;
-static pthread_once_t icalerrno_key_once = PTHREAD_ONCE_INIT;
-
-static void icalerrno_destroy(void* buf) {
- free(buf);
- pthread_setspecific(icalerrno_key, NULL);
-}
-
-static void icalerrno_key_alloc(void) {
- pthread_key_create(&icalerrno_key, icalerrno_destroy);
-}
-
-icalerrorenum *icalerrno_return(void) {
- icalerrorenum *_errno;
-
- pthread_once(&icalerrno_key_once, icalerrno_key_alloc);
-
- _errno = (icalerrorenum*) pthread_getspecific(icalerrno_key);
-
- if (!_errno) {
- _errno = malloc(sizeof(icalerrorenum));
- *_errno = ICAL_NO_ERROR;
- pthread_setspecific(icalerrno_key, _errno);
- }
- return _errno;
-}
-
-#else
-
-static icalerrorenum icalerrno_storage = ICAL_NO_ERROR;
-
-icalerrorenum *icalerrno_return(void) {
- return &icalerrno_storage;
-}
-
-#endif
-
-
-static int foo;
-
-void icalerror_stop_here(void)
-{
- foo++; /* Keep optimizers from removing routine */
-}
-
-void icalerror_crash_here(void)
-{
- int *p=0;
- *p = 1;
-
- assert( *p);
-}
-
-#ifdef ICAL_SETERROR_ISFUNC
-void icalerror_set_errno(icalerrorenum x)
-{
- icalerrno = x;
- if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL ||
- (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT &&
- icalerror_errors_are_fatal == 1 )){
- icalerror_warn(icalerror_strerror(x));
- assert(0);
- }
-
-}
-#endif
-
-void icalerror_clear_errno() {
-
- icalerrno = ICAL_NO_ERROR;
-}
-
-#ifdef ICAL_ERRORS_ARE_FATAL
-int icalerror_errors_are_fatal = 1;
-#else
-int icalerror_errors_are_fatal = 0;
-#endif
-
-struct icalerror_state {
- icalerrorenum error;
- icalerrorstate state;
-};
-
-static struct icalerror_state error_state_map[] =
-{
- { ICAL_BADARG_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_NEWFAILED_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_ALLOCATION_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_PARSE_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_INTERNAL_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_FILE_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_USAGE_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_UNIMPLEMENTED_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_UNKNOWN_ERROR,ICAL_ERROR_DEFAULT},
- { ICAL_NO_ERROR,ICAL_ERROR_DEFAULT}
-
-};
-
-struct icalerror_string_map {
- const char* str;
- icalerrorenum error;
- char name[160];
-};
-
-static struct icalerror_string_map string_map[] =
-{
- {"BADARG",ICAL_BADARG_ERROR,"BADARG: Bad argument to function"},
- { "NEWFAILED",ICAL_NEWFAILED_ERROR,"NEWFAILED: Failed to create a new object via a *_new() routine"},
- { "ALLOCATION",ICAL_ALLOCATION_ERROR,"ALLOCATION: Failed to allocate new memory"},
- {"MALFORMEDDATA",ICAL_MALFORMEDDATA_ERROR,"MALFORMEDDATA: An input string was not correctly formed or a component has missing or extra properties"},
- { "PARSE",ICAL_PARSE_ERROR,"PARSE: Failed to parse a part of an iCal component"},
- {"INTERNAL",ICAL_INTERNAL_ERROR,"INTERNAL: Random internal error. This indicates an error in the library code, not an error in use"},
- { "FILE",ICAL_FILE_ERROR,"FILE: An operation on a file failed. Check errno for more detail."},
- { "USAGE",ICAL_USAGE_ERROR,"USAGE: Failed to propertyl sequence calls to a set of interfaces"},
- { "UNIMPLEMENTED",ICAL_UNIMPLEMENTED_ERROR,"UNIMPLEMENTED: This feature has not been implemented"},
- { "NO",ICAL_NO_ERROR,"NO: No error"},
- {"UNKNOWN",ICAL_UNKNOWN_ERROR,"UNKNOWN: Unknown error type -- icalerror_strerror() was probably given bad input"}
-};
-
-
-icalerrorenum icalerror_error_from_string(const char* str){
-
- icalerrorenum e;
- int i = 0;
-
- for( i = 0; string_map[i].error != ICAL_NO_ERROR; i++){
- if (strcmp(string_map[i].str,str) == 0){
- e = string_map[i].error;
- }
- }
-
- return e;
-}
-
-icalerrorstate icalerror_supress(const char* error){
-
- icalerrorenum e = icalerror_error_from_string(error);
- icalerrorstate es;
-
- if (e == ICAL_NO_ERROR){
- return ICAL_ERROR_UNKNOWN;
- }
-
-
- es = icalerror_get_error_state(e);
- icalerror_set_error_state(e,ICAL_ERROR_NONFATAL);
-
- return es;
-}
-
-char* icalerror_perror()
-{
- return icalerror_strerror(icalerrno);
-}
-
-void icalerror_restore(const char* error, icalerrorstate es){
-
-
- icalerrorenum e = icalerror_error_from_string(error);
-
- if (e != ICAL_NO_ERROR){
- icalerror_set_error_state(e,es);
- }
-
-}
-
-
-
-void icalerror_set_error_state( icalerrorenum error,
- icalerrorstate state)
-{
- int i;
-
- for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){
- if(error_state_map[i].error == error){
- error_state_map[i].state = state;
- }
- }
-}
-
-icalerrorstate icalerror_get_error_state( icalerrorenum error)
-{
- int i;
-
- for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){
- if(error_state_map[i].error == error){
- return error_state_map[i].state;
- }
- }
-
- return ICAL_ERROR_UNKNOWN;
-}
-
-
-
-
-char* icalerror_strerror(icalerrorenum e) {
-
- int i;
-
- for (i=0; string_map[i].error != ICAL_UNKNOWN_ERROR; i++) {
- if (string_map[i].error == e) {
- return string_map[i].name;
- }
- }
-
- return string_map[i].name; /* Return string for ICAL_UNKNOWN_ERROR*/
-
-}
-
-
-
diff --git a/libical/src/libical/icalerror.h b/libical/src/libical/icalerror.h
deleted file mode 100644
index 7826041855..0000000000
--- a/libical/src/libical/icalerror.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalerror.h
- CREATOR: eric 09 May 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalerror.h
-
-======================================================================*/
-
-
-#ifndef ICALERROR_H
-#define ICALERROR_H
-
-#include <assert.h>
-#include <stdio.h> /* For icalerror_warn() */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define ICAL_SETERROR_ISFUNC
-
-
-/** This routine is called before any error is triggered. It is called
- by icalerror_set_errno, so it does not appear in all of the macros
- below */
-void icalerror_stop_here(void);
-
-void icalerror_crash_here(void);
-
-typedef enum icalerrorenum {
- ICAL_NO_ERROR, /* icalerrno may not be initialized - put it first so and pray that the compiler initialize things to zero */
- ICAL_BADARG_ERROR,
- ICAL_NEWFAILED_ERROR,
- ICAL_ALLOCATION_ERROR,
- ICAL_MALFORMEDDATA_ERROR,
- ICAL_PARSE_ERROR,
- ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */
- ICAL_FILE_ERROR,
- ICAL_USAGE_ERROR,
- ICAL_UNIMPLEMENTED_ERROR,
- ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/
-
-} icalerrorenum;
-
-icalerrorenum * icalerrno_return(void);
-#define icalerrno (*(icalerrno_return()))
-
-/** If true, libicl aborts after a call to icalerror_set_error
- *
- * @warning NOT THREAD SAFE -- recommended that you do not change
- * this in a multithreaded program.
- */
-extern int icalerror_errors_are_fatal;
-
-/* Warning messages */
-
-#ifdef __GNUC__ca
-#define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);}
-#else /* __GNU_C__ */
-#define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);}
-#endif /* __GNU_C__ */
-
-
-void icalerror_clear_errno(void);
-void _icalerror_set_errno(icalerrorenum);
-
-/* Make an individual error fatal or non-fatal. */
-typedef enum icalerrorstate {
- 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 ;
-
-char* icalerror_strerror(icalerrorenum e);
-char* icalerror_perror();
-void icalerror_set_error_state( icalerrorenum error, icalerrorstate);
-icalerrorstate icalerror_get_error_state( icalerrorenum error);
-
-#ifndef ICAL_SETERROR_ISFUNC
-#define icalerror_set_errno(x) \
-icalerrno = x; \
-if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || \
- (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && \
- icalerror_errors_are_fatal == 1 )){ \
- icalerror_warn(icalerror_strerror(x)); \
- assert(0); \
-}
-#else
-void icalerror_set_errno(icalerrorenum x);
-#endif
-
-#ifdef ICAL_ERRORS_ARE_FATAL
-#undef NDEBUG
-#endif
-
-#define icalerror_check_value_type(value,type);
-#define icalerror_check_property_type(value,type);
-#define icalerror_check_parameter_type(value,type);
-#define icalerror_check_component_type(value,type);
-
-/* Assert with a message */
-#ifdef ICAL_ERRORS_ARE_FATAL
-
-#ifdef __GNUC__
-#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();}
-#else /*__GNUC__*/
-#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();}
-#endif /*__GNUC__*/
-
-#else /* ICAL_ERRORS_ARE_FATAL */
-#define icalerror_assert(test,message)
-#endif /* ICAL_ERRORS_ARE_FATAL */
-
-/* Check & abort if check fails */
-#define icalerror_check_arg(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); }
-
-/* Check & return void if check fails*/
-#define icalerror_check_arg_rv(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return; }
-
-/* Check & return 0 if check fails*/
-#define icalerror_check_arg_rz(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0;}
-
-/* Check & return an error if check fails*/
-#define icalerror_check_arg_re(test,arg,error) if(!(test)) { icalerror_stop_here(); assert(0); return error;}
-
-/* Check & return something*/
-#define icalerror_check_arg_rx(test,arg,x) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return x;}
-
-
-
-/* String interfaces to set an error to NONFATAL and restore it to its
- original value */
-
-icalerrorstate icalerror_supress(const char* error);
-void icalerror_restore(const char* error, icalerrorstate es);
-
-
-#endif /* !ICALERROR_H */
-
-
-
diff --git a/libical/src/libical/icallangbind.c b/libical/src/libical/icallangbind.c
deleted file mode 100644
index 1a3ad48a31..0000000000
--- a/libical/src/libical/icallangbind.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icallangbind.c
- CREATOR: eric 15 dec 2000
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 1999 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. )
-
- ======================================================================*/
-
-#include "icalcomponent.h"
-#include "icalproperty.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalvalue.h"
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-int* icallangbind_new_array(int size){
- int* p = (int*)malloc(size*sizeof(int));
- return p; /* Caller handles failures */
-}
-
-void icallangbind_free_array(int* array){
- free(array);
-}
-
-int icallangbind_access_array(int* array, int index) {
- return array[index];
-}
-
-/** Iterators to fetch parameters given property */
-
-icalparameter* icallangbind_get_first_parameter(icalproperty *prop)
-
-{
- icalparameter_kind kind = ICAL_ANY_PARAMETER;
-
- return icalproperty_get_first_parameter(prop,kind);
-}
-
-icalparameter* icallangbind_get_next_parameter(icalproperty *prop)
-{
- icalparameter_kind kind = ICAL_ANY_PARAMETER;
-
- return icalproperty_get_next_parameter(prop,kind);
-}
-
-
-/** Like icalcomponent_get_first_component(), but takes a string for the
- kind and can iterate over X properties as if each X name was a
- seperate kind */
-
-icalproperty* icallangbind_get_first_property(icalcomponent *c,
- const char* prop)
-{
- icalproperty_kind kind = icalproperty_string_to_kind(prop);
- icalproperty *p;
-
- if (kind == ICAL_NO_PROPERTY){
- return 0;
- }
-
- if(kind == ICAL_X_PROPERTY){
- for(p = icalcomponent_get_first_property(c,kind);
- p !=0;
- p = icalcomponent_get_next_property(c,kind)){
-
- if(strcmp(icalproperty_get_x_name(p),prop) == 0){
- return p;
- }
- }
- } else {
- p=icalcomponent_get_first_property(c,kind);
-
- return p;
- }
-
- return 0;
-
-}
-
-icalproperty* icallangbind_get_next_property(icalcomponent *c,
- const char* prop)
-{
- icalproperty_kind kind = icalenum_string_to_property_kind(prop);
- icalproperty *p;
-
- if (kind == ICAL_NO_PROPERTY){
- return 0;
- }
-
- if(kind == ICAL_X_PROPERTY){
- for(p = icalcomponent_get_next_property(c,kind);
- p !=0;
- p = icalcomponent_get_next_property(c,kind)){
-
- if(strcmp(icalproperty_get_x_name(p),prop) == 0){
- return p;
- }
- }
- } else {
- p=icalcomponent_get_next_property(c,kind);
-
- return p;
- }
-
- return 0;
-
-}
-
-
-icalcomponent* icallangbind_get_first_component(icalcomponent *c,
- const char* comp)
-{
- icalcomponent_kind kind = icalenum_string_to_component_kind(comp);
-
- if (kind == ICAL_NO_COMPONENT){
- return 0;
- }
- return icalcomponent_get_first_component(c,kind);
-}
-
-icalcomponent* icallangbind_get_next_component(icalcomponent *c,
- const char* comp)
-{
- icalcomponent_kind kind = icalenum_string_to_component_kind(comp);
-
- if (kind == ICAL_NO_COMPONENT){
- return 0;
- }
- return icalcomponent_get_next_component(c,kind);
-}
-
-
-#define APPENDS(x) icalmemory_append_string(&buf, &buf_ptr, &buf_size, x);
-
-#define APPENDC(x) icalmemory_append_char(&buf, &buf_ptr, &buf_size, x);
-
-
-const char* icallangbind_property_eval_string(icalproperty* prop, char* sep)
-{
- char tmp[25];
- size_t buf_size = 1024;
- char* buf = icalmemory_new_buffer(buf_size);
- char* buf_ptr = buf;
- icalparameter *param;
-
- icalvalue* value;
-
- if( prop == 0){
- return 0;
- }
-
- APPENDS("{ ");
-
- value = icalproperty_get_value(prop);
-
- APPENDS(" 'name' ");
- APPENDS(sep);
- APPENDC('\'');
- APPENDS(icalproperty_kind_to_string(icalproperty_isa(prop)));
- APPENDC('\'');
-
- if(value){
- APPENDS(", 'value_type' ");
- APPENDS(sep);
- APPENDC('\'');
- APPENDS(icalvalue_kind_to_string(icalvalue_isa(value)));
- APPENDC('\'');
- }
-
- APPENDS(", 'pid' ");
- APPENDS(sep);
- APPENDC('\'');
- snprintf(tmp,25,"%p",prop);
- APPENDS(tmp);
- APPENDC('\'');
-
-
- if(value){
- switch (icalvalue_isa(value)){
-
- case ICAL_ATTACH_VALUE:
- case ICAL_BINARY_VALUE:
- case ICAL_NO_VALUE: {
- icalerror_set_errno(ICAL_INTERNAL_ERROR);
- break;
- }
-
- default:
- {
- const char* str = icalvalue_as_ical_string(value);
- char* copy = (char*) malloc(strlen(str)+1);
-
- const char *i;
- char *j;
-
- if(copy ==0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- break;
- }
- /* Remove any newlines */
-
- for(j=copy, i = str; *i != 0; j++,i++){
- if(*i=='\n'){
- i++;
- }
- *j = *i;
- }
-
- *j = 0;
-
- APPENDS(", 'value'");
- APPENDS(sep);
- APPENDC('\'');
- APPENDS(copy);
- APPENDC('\'');
-
- free(copy);
- break;
-
- }
- }
- }
-
- /* Add Parameters */
-
- for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER);
- param != 0;
- param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)){
-
- const char* str = icalparameter_as_ical_string(param);
- char *copy = icalmemory_tmp_copy(str);
- char *v;
-
- if(copy == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- continue;
- }
-
- v = strchr(copy,'=');
-
-
- if(v == 0){
- continue;
- }
-
- *v = 0;
-
- v++;
-
- APPENDS(", ");
- APPENDC('\'');
- APPENDS(copy);
- APPENDC('\'');
- APPENDS(sep);
- APPENDC('\'');
- APPENDS(v);
- APPENDC('\'');
-
- }
-
-
- APPENDC('}');
-
- icalmemory_add_tmp_buffer(buf);
- return buf;
-
-}
-
-#include "fcntl.h"
-int icallangbind_string_to_open_flag(const char* str)
-{
- if (strcmp(str,"r") == 0) {return O_RDONLY;}
- else if (strcmp(str,"r+") == 0) {return O_RDWR;}
- else if (strcmp(str,"w") == 0) {return O_WRONLY;}
- else if (strcmp(str,"w+") == 0) {return O_RDWR|O_CREAT;}
- else if (strcmp(str,"a") == 0) {return O_WRONLY|O_APPEND;}
- else return -1;
-}
-
-
-const char* icallangbind_quote_as_ical(const char* str)
-{
- size_t buf_size = 2 * strlen(str);
-
- /* assume every char could be quoted */
- char* buf = icalmemory_new_buffer(buf_size);
- int result;
-
- result = icalvalue_encode_ical_string(str, buf, buf_size);
-
- icalmemory_add_tmp_buffer(buf);
-
- return buf;
-}
diff --git a/libical/src/libical/icallangbind.h b/libical/src/libical/icallangbind.h
deleted file mode 100644
index fed3626c32..0000000000
--- a/libical/src/libical/icallangbind.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icallangbind.h
- CREATOR: eric 25 jan 2001
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 1999 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. )
-
- ======================================================================*/
-
-#ifndef __ICALLANGBIND_H__
-#define __ICALLANGBIND_H__
-
-int* icallangbind_new_array(int size);
-void icallangbind_free_array(int* array);
-int icallangbind_access_array(int* array, int index);
-icalproperty* icallangbind_get_property(icalcomponent *c, int n, const char* prop);
-const char* icallangbind_get_property_val(icalproperty* p);
-const char* icallangbind_get_parameter(icalproperty *p, const char* parameter);
-icalcomponent* icallangbind_get_component(icalcomponent *c, const char* comp);
-
-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);
-
-icalparameter* icallangbind_get_first_parameter(icalproperty *prop);
-
-icalparameter* icallangbind_get_next_parameter(icalproperty *prop);
-
-const char* icallangbind_property_eval_string(icalproperty* prop, char* sep);
-
-
-int icallangbind_string_to_open_flag(const char* str);
-
-const char* icallangbind_quote_as_ical(const char* str);
-#endif /*__ICALLANGBIND_H__*/
diff --git a/libical/src/libical/icallexer.l b/libical/src/libical/icallexer.l
deleted file mode 100644
index fe292c8b6d..0000000000
--- a/libical/src/libical/icallexer.l
+++ /dev/null
@@ -1,161 +0,0 @@
-%{
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icallexer.l
- CREATOR: eric 10 June 1999
-
- DESCRIPTION:
-
- $Id: icallexer.l,v 1.10 2003/10/21 18:28:28 ettore Exp $
- $Locker: $
-
- (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
- The original code is icalitip.y
-
-
-
- ======================================================================*/
-#include "icalparser.h"
-#include "icalenums.h"
-#include "icalmemory.h"
-#include "assert.h"
-#include "icalyacc.h"
-
-#include <string.h> /* For strdup() */
-
-int icalparser_flex_input(char* buf, int max_size);
-void icalparser_clear_flex_input(void);
-
-
-#define ICAL_MAX_STR_CONST 1024
-
-#undef YY_INPUT
-#define YY_INPUT(b,r,ms) ( r= icalparser_flex_input(b,ms))
-#undef yywrap
-
-#undef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) ical_yyerror(msg)
-
-icalvalue_kind value_kind=ICAL_NO_VALUE;
-void set_parser_value_state(icalvalue_kind kind);
-extern int yydebug;
-
-void ical_yyerror(char *s);
-
-void init_str_buf(void);
-
-int last_state;
-
-char *str_buf;
-char *str_buf_p;
-size_t buf_sz; /* = ICAL_MAX_STR_CONST;*/
-
-%}
-
-crlf \x0D?\x0A
-space [ ]
-qsafechar [^\x00-\x1F\"]
-safechar [^\x00-\x1F\"\:\;\,]
-tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E]
-valuechar [^\x00-\x08\x10-\x1F]
-xname X-[a-zA-Z0-9\-]+
-xname2 [a-zA-Z0-9\-\ ]
-paramtext {safechar}+
-value {valuechar}+
-quotedstring \"{qsafechar}+\"
-digit [0-9]
-
-%array /* Make yytext an array. Slow, but handy. HACK */
-
-%option caseless
-
-%s quoted_string
-%s binary_value boolean_value uri_value time_value duration_value number_value period_value recur_value text_value utcoffset_value
-%s enum_param_value string_param_value stringlist_param_value keyword line_start component seperator parameter end_of_value paramtext
-
-
-
-%%
-
-%{
-%}
-
-
-<time_value>{
-{digit}+ { ical_yylval.v_string =icalmemory_tmp_copy(yytext) ;
- return DIGITS; }
-T { return TIME_CHAR; }
-Z { return UTC_CHAR; }
-[\/\+\-PWHMSD] { return yytext[0]; }
-{crlf} { return EOL;}
-
-}
-
-<utcoffset_value>{
-{crlf} { return EOL;}
-\-|\+ { return yytext[0]; }
-{digit}{digit} { ical_yylval.v_int=atoi(yytext); return INTNUMBER; }
-
-}
-
-<enum_param_value>{
-. { return CHARACTER; }
-{crlf} { return EOL;}
-
-}
-
-<seperator>{
-, { BEGIN(last_state); return COMMA; }
-}
-
-
-%%
-
-int yywrap()
-{
- return 1;
-}
-
-
-void set_parser_value_state(icalvalue_kind kind)
-{
-
- switch (kind){
-
- case ICAL_UTCOFFSET_VALUE:
- {BEGIN(utcoffset_value);break;}
-
- case ICAL_DATETIMEPERIOD_VALUE:
- case ICAL_DURATION_VALUE:
- case ICAL_PERIOD_VALUE:
- {BEGIN(time_value);break;}
-
- default:
- {
- assert(1==0);
- }
- }
-}
-
-void init_str_buf(void)
-{
- str_buf = icalmemory_tmp_buffer(ICAL_MAX_STR_CONST);
- str_buf_p = str_buf;
- buf_sz = ICAL_MAX_STR_CONST;
-
-
-}
-
diff --git a/libical/src/libical/icalmemory.c b/libical/src/libical/icalmemory.c
deleted file mode 100644
index 058ef3791f..0000000000
--- a/libical/src/libical/icalmemory.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalmemory.c
- CREATOR: eric 30 June 1999
-
- $Id$
- $Locker$
-
- 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.
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is icalmemory.h
-
- ======================================================================*/
-
-/**
- * @file icalmemory.c
- * @brief Common memory management routines.
- *
- * libical often passes strings back to the caller. To make these
- * interfaces simple, I did not want the caller to have to pass in a
- * memory buffer, but having libical pass out newly allocated memory
- * makes it difficult to de-allocate the memory.
- *
- * The ring buffer in this scheme makes it possible for libical to pass
- * out references to memory which the caller does not own, and be able
- * to de-allocate the memory later. The ring allows libical to have
- * several buffers active simultaneously, which is handy when creating
- * string representations of components.
- */
-
-#define ICALMEMORY_C
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef DMALLOC
-#include "dmalloc.h"
-#endif
-
-#include "icalmemory.h"
-#include "icalerror.h"
-
-#include <stdio.h> /* for printf (debugging) */
-#include <stdlib.h> /* for malloc, realloc */
-#include <string.h> /* for memset(), strdup */
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#define BUFFER_RING_SIZE 2500
-#define MIN_BUFFER_SIZE 200
-
-
-/* HACK. Not threadsafe */
-
-typedef struct {
- int pos;
- void *ring[BUFFER_RING_SIZE];
-} buffer_ring;
-
-void icalmemory_free_tmp_buffer (void* buf);
-void icalmemory_free_ring_byval(buffer_ring *br);
-
-static buffer_ring* global_buffer_ring = 0;
-
-#ifdef HAVE_PTHREAD
-#include <pthread.h>
-
-static pthread_key_t ring_key;
-static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT;
-
-static void ring_destroy(void * buf) {
- if (buf) icalmemory_free_ring_byval((buffer_ring *) buf);
- pthread_setspecific(ring_key, NULL);
-}
-
-static void ring_key_alloc(void) {
- pthread_key_create(&ring_key, ring_destroy);
-}
-#endif
-
-
-static buffer_ring * buffer_ring_new(void) {
- buffer_ring *br;
- int i;
-
- br = (buffer_ring *)malloc(sizeof(buffer_ring));
-
- for(i=0; i<BUFFER_RING_SIZE; i++){
- br->ring[i] = 0;
- }
- br->pos = 0;
- return(br);
-}
-
-
-#ifdef HAVE_PTHREAD
-static buffer_ring* get_buffer_ring_pthread(void) {
- buffer_ring *br;
-
- pthread_once(&ring_key_once, ring_key_alloc);
-
- br = pthread_getspecific(ring_key);
-
- if (!br) {
- br = buffer_ring_new();
- pthread_setspecific(ring_key, br);
- }
- return(br);
-}
-#endif
-
-/* get buffer ring via a single global for a non-threaded program */
-static buffer_ring* get_buffer_ring_global(void) {
- if (global_buffer_ring == 0) {
- global_buffer_ring = buffer_ring_new();
- }
- return(global_buffer_ring);
-}
-
-static buffer_ring *get_buffer_ring(void) {
-#ifdef HAVE_PTHREAD
- return(get_buffer_ring_pthread());
-#else
- return get_buffer_ring_global();
-#endif
-}
-
-
-/** Add an existing buffer to the buffer ring */
-void icalmemory_add_tmp_buffer(void* buf)
-{
- buffer_ring *br = get_buffer_ring();
-
-
- /* Wrap around the ring */
- if(++(br->pos) == BUFFER_RING_SIZE){
- br->pos = 0;
- }
-
- /* Free buffers as their slots are overwritten */
- if ( br->ring[br->pos] != 0){
- free( br->ring[br->pos]);
- }
-
- /* Assign the buffer to a slot */
- br->ring[br->pos] = buf;
-}
-
-
-/**
- * Create a new temporary buffer on the ring. Libical owns these and
- * will deallocate them.
- */
-
-void*
-icalmemory_tmp_buffer (size_t size)
-{
- char *buf;
-
- if (size < MIN_BUFFER_SIZE){
- size = MIN_BUFFER_SIZE;
- }
-
- buf = (void*)malloc(size);
-
- if( buf == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(buf,0,size);
-
- icalmemory_add_tmp_buffer(buf);
-
- return buf;
-}
-
-/** get rid of this buffer ring */
-void icalmemory_free_ring_byval(buffer_ring *br) {
- int i;
- for(i=0; i<BUFFER_RING_SIZE; i++){
- if ( br->ring[i] != 0){
- free( br->ring[i]);
- }
- }
- free(br);
-}
-
-void icalmemory_free_ring()
-{
- buffer_ring *br;
- br = get_buffer_ring();
-
- icalmemory_free_ring_byval(br);
-}
-
-
-
-/** Like strdup, but the buffer is on the ring. */
-char*
-icalmemory_tmp_copy(const char* str)
-{
- char* b = icalmemory_tmp_buffer(strlen(str)+1);
-
- strcpy(b,str);
-
- return b;
-}
-
-
-char* icalmemory_strdup(const char *s)
-{
- return strdup(s);
-}
-
-void
-icalmemory_free_tmp_buffer (void* buf)
-{
- if(buf == 0)
- {
- return;
- }
-
- free(buf);
-}
-
-
-/*
- * These buffer routines create memory the old fashioned way -- so the
- * caller will have to deallocate the new memory
- */
-
-void* icalmemory_new_buffer(size_t size)
-{
- void *b = malloc(size);
-
- if( b == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(b,0,size);
-
- return b;
-}
-
-void* icalmemory_resize_buffer(void* buf, size_t size)
-{
- void *b = realloc(buf, size);
-
- if( b == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- return b;
-}
-
-void icalmemory_free_buffer(void* buf)
-{
- free(buf);
-}
-
-void
-icalmemory_append_string(char** buf, char** pos, size_t* buf_size,
- const char* string)
-{
- char *new_buf;
- char *new_pos;
-
- size_t data_length, final_length, string_length;
-
-#ifndef ICAL_NO_INTERNAL_DEBUG
- icalerror_check_arg_rv( (buf!=0),"buf");
- icalerror_check_arg_rv( (*buf!=0),"*buf");
- icalerror_check_arg_rv( (pos!=0),"pos");
- icalerror_check_arg_rv( (*pos!=0),"*pos");
- icalerror_check_arg_rv( (buf_size!=0),"buf_size");
- icalerror_check_arg_rv( (*buf_size!=0),"*buf_size");
- icalerror_check_arg_rv( (string!=0),"string");
-#endif
-
- string_length = strlen(string);
- data_length = (size_t)*pos - (size_t)*buf;
- final_length = data_length + string_length;
-
- if ( final_length >= (size_t) *buf_size) {
-
-
- *buf_size = (*buf_size) * 2 + final_length;
-
- new_buf = realloc(*buf,*buf_size);
-
- new_pos = (void*)((size_t)new_buf + data_length);
-
- *pos = new_pos;
- *buf = new_buf;
- }
-
- strcpy(*pos, string);
-
- *pos += string_length;
-}
-
-
-void
-icalmemory_append_char(char** buf, char** pos, size_t* buf_size,
- char ch)
-{
- char *new_buf;
- char *new_pos;
-
- size_t data_length, final_length;
-
-#ifndef ICAL_NO_INTERNAL_DEBUG
- icalerror_check_arg_rv( (buf!=0),"buf");
- icalerror_check_arg_rv( (*buf!=0),"*buf");
- icalerror_check_arg_rv( (pos!=0),"pos");
- icalerror_check_arg_rv( (*pos!=0),"*pos");
- icalerror_check_arg_rv( (buf_size!=0),"buf_size");
- icalerror_check_arg_rv( (*buf_size!=0),"*buf_size");
-#endif
-
- data_length = (size_t)*pos - (size_t)*buf;
-
- final_length = data_length + 2;
-
- if ( final_length > (size_t) *buf_size ) {
-
-
- *buf_size = (*buf_size) * 2 + final_length +1;
-
- new_buf = realloc(*buf,*buf_size);
-
- new_pos = (void*)((size_t)new_buf + data_length);
-
- *pos = new_pos;
- *buf = new_buf;
- }
-
- **pos = ch;
- *pos += 1;
- **pos = 0;
-}
diff --git a/libical/src/libical/icalmemory.h b/libical/src/libical/icalmemory.h
deleted file mode 100644
index 7c42566eb5..0000000000
--- a/libical/src/libical/icalmemory.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalmemory.h
- CREATOR: eric 30 June 1999
-
-
- $Id$
- $Locker$
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Initial Developer of the Original Code is Eric Busboom
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-======================================================================*/
-
-#ifndef ICALMEMORY_H
-#define ICALMEMORY_H
-
-#ifndef WIN32
-#include <sys/types.h> /* for size_t */
-#else
-#include <stddef.h>
-#endif
-
-/* Tmp buffers are managed by ical. References can be returned to the
- caller, although the caller will not own the memory. */
-
-void* icalmemory_tmp_buffer(size_t size);
-char* icalmemory_tmp_copy(const char* str);
-
-/** Add an externally allocated buffer to the ring. */
-void icalmemory_add_tmp_buffer(void*);
-
-
-/** Free all memory used in the ring */
-void icalmemory_free_ring(void);
-
-/* Non-tmp buffers must be freed. These are mostly wrappers around
- * malloc, etc, but are used so the caller can change the memory
- * allocators in a future version of the library */
-
-void* icalmemory_new_buffer(size_t size);
-void* icalmemory_resize_buffer(void* buf, size_t size);
-void icalmemory_free_buffer(void* buf);
-
-/**
- icalmemory_append_string will copy the string 'string' to the
- buffer 'buf' starting at position 'pos', reallocing 'buf' if it is
- too small. 'buf_size' is the size of 'buf' and will be changed if
- 'buf' is reallocated. 'pos' will point to the last byte of the new
- string in 'buf', usually a '\0' */
-
-/* THESE ROUTINES CAN NOT BE USED ON TMP BUFFERS. Only use them on
- normally allocated memory, or on buffers created from
- icalmemory_new_buffer, never with buffers created by
- icalmemory_tmp_buffer. If icalmemory_append_string has to resize a
- buffer on the ring, the ring will loose track of it an you will
- have memory problems. */
-
-void icalmemory_append_string(char** buf, char** pos, size_t* buf_size,
- const char* string);
-
-/** icalmemory_append_char is similar, but is appends a character instead of a string */
-void icalmemory_append_char(char** buf, char** pos, size_t* buf_size,
- char ch);
-
-/** A wrapper around strdup. Partly to trap calls to strdup, partly
- because in -ansi, gcc on Red Hat claims that strdup is undeclared */
-char* icalmemory_strdup(const char *s);
-
-#endif /* !ICALMEMORY_H */
-
-
-
diff --git a/libical/src/libical/icalmime.c b/libical/src/libical/icalmime.c
deleted file mode 100644
index e5d1c90601..0000000000
--- a/libical/src/libical/icalmime.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/* -*- Mode: C -*-*/
-/*======================================================================
- FILE: icalmime.c
- CREATOR: eric 26 July 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#include "icalmime.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "sspm.h"
-#include "stdlib.h"
-#include <string.h> /* For strdup */
-#include <stdio.h> /* for snprintf*/
-
-#ifdef DMALLOC
-#include "dmalloc.h"
-#endif
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-/* These *_part routines are called by the MIME parser via the
- local_action_map */
-
-struct text_part
-{
- char* buf;
- char* buf_pos;
- size_t buf_size;
-};
-
-void* icalmime_text_new_part()
-{
-
-#define BUF_SIZE 2048
-
- struct text_part* impl;
-
- if ( ( impl = (struct text_part*)
- malloc(sizeof(struct text_part))) == 0) {
- return 0;
- }
-
- impl->buf = icalmemory_new_buffer(BUF_SIZE);
- impl->buf_pos = impl->buf;
- impl->buf_size = BUF_SIZE;
-
- return impl;
-}
-void icalmime_text_add_line(void *part,
- struct sspm_header *header,
- char* line, size_t size)
-{
- struct text_part* impl = (struct text_part*) part;
-
- icalmemory_append_string(&(impl->buf),&(impl->buf_pos),
- &(impl->buf_size),line);
-
-}
-
-void* icalmime_textcalendar_end_part(void* part)
-{
-
- struct text_part* impl = (struct text_part*) part;
- icalcomponent *c = icalparser_parse_string(impl->buf);
-
- icalmemory_free_buffer(impl->buf);
- free(impl);
-
- return c;
-
-}
-
-void* icalmime_text_end_part(void* part)
-{
- struct text_part* impl = ( struct text_part*) part;
-
- icalmemory_add_tmp_buffer(impl->buf);
- free(impl);
-
- return impl->buf;
-}
-
-void icalmime_text_free_part(void *part)
-{
- part = part;
-}
-
-
-/* Ignore Attachments for now */
-
-void* icalmime_attachment_new_part()
-{
- return 0;
-}
-void icalmime_attachment_add_line(void *part, struct sspm_header *header,
- char* line, size_t size)
-{
- part = part;
- header = header;
- line = line;
- size = size;
-}
-
-void* icalmime_attachment_end_part(void* part)
-{
- return 0;
-}
-
-void icalmime_attachment_free_part(void *part)
-{
-}
-
-
-
-
-struct sspm_action_map icalmime_local_action_map[] =
-{
- {SSPM_TEXT_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_textcalendar_end_part,icalmime_text_free_part},
- {SSPM_TEXT_MAJOR_TYPE,SSPM_ANY_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part},
- {SSPM_TEXT_MAJOR_TYPE,SSPM_PLAIN_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part},
- {SSPM_APPLICATION_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part},
- {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part},
- {SSPM_AUDIO_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part},
- {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part},
- {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,0,0,0,0}
-};
-
-#define NUM_PARTS 100 /* HACK. Hard Limit */
-
-
-
-struct sspm_part* icalmime_make_part(icalcomponent* comp)
-{
- comp = comp;
- return 0;
-}
-
-char* icalmime_as_mime_string(char* icalcomponent);
-
-icalcomponent* icalmime_parse(char* (*get_string)(char *s, size_t size,
- void *d),
- void *data)
-{
- struct sspm_part *parts;
- int i, last_level=0;
- icalcomponent *root=0, *parent=0, *comp=0, *last = 0;
-
- if ( (parts = (struct sspm_part *)
- malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(parts,0,sizeof(parts));
-
- sspm_parse_mime(parts,
- NUM_PARTS, /* Max parts */
- icalmime_local_action_map, /* Actions */
- get_string,
- data, /* data for get_string*/
- 0 /* First header */);
-
-
-
- for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; i++){
-
-#define TMPSZ 1024
- char mimetype[TMPSZ];
- char* major = sspm_major_type_string(parts[i].header.major);
- char* minor = sspm_minor_type_string(parts[i].header.minor);
-
- if(parts[i].header.minor == SSPM_UNKNOWN_MINOR_TYPE ){
- assert(parts[i].header.minor_text !=0);
- minor = parts[i].header.minor_text;
- }
-
- sprintf(mimetype,"%s/%s",major,minor);
-
- comp = icalcomponent_new(ICAL_XLICMIMEPART_COMPONENT);
-
- if(comp == 0){
- /* HACK Handle Error */
- assert(0);
- }
-
- if(parts[i].header.error!=SSPM_NO_ERROR){
- char *str = "Unknown error";
- char temp[256];
-
- if(parts[i].header.error==SSPM_MALFORMED_HEADER_ERROR){
- str = "Malformed header, possibly due to input not in MIME format";
- }
-
- if(parts[i].header.error==SSPM_UNEXPECTED_BOUNDARY_ERROR){
- str = "Got an unexpected boundary, possibly due to a MIME header for a MULTIPART part that is missing the Content-Type line";
- }
-
- if(parts[i].header.error==SSPM_WRONG_BOUNDARY_ERROR){
- str = "Got the wrong boundary for the opening of a MULTIPART part.";
- }
-
- if(parts[i].header.error==SSPM_NO_BOUNDARY_ERROR){
- str = "Got a multipart header that did not specify a boundary";
- }
-
- if(parts[i].header.error==SSPM_NO_HEADER_ERROR){
- str = "Did not get a header for the part. Is there a blank\
-line between the header and the previous boundary\?";
-
- }
-
- if(parts[i].header.error_text != 0){
- snprintf(temp,sizeof(temp),
- "%s: %s",str,parts[i].header.error_text);
- } else {
- strcpy(temp,str);
- }
-
- icalcomponent_add_property
- (comp,
- icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_MIMEPARSEERROR),
- 0));
- }
-
- if(parts[i].header.major != SSPM_NO_MAJOR_TYPE &&
- parts[i].header.major != SSPM_UNKNOWN_MAJOR_TYPE){
-
- icalcomponent_add_property(comp,
- icalproperty_new_xlicmimecontenttype((char*)
- icalmemory_strdup(mimetype)));
-
- }
-
- if (parts[i].header.encoding != SSPM_NO_ENCODING){
-
- icalcomponent_add_property(comp,
- icalproperty_new_xlicmimeencoding(
- sspm_encoding_string(parts[i].header.encoding)));
- }
-
- if (parts[i].header.filename != 0){
- icalcomponent_add_property(comp,
- icalproperty_new_xlicmimefilename(parts[i].header.filename));
- }
-
- if (parts[i].header.content_id != 0){
- icalcomponent_add_property(comp,
- icalproperty_new_xlicmimecid(parts[i].header.content_id));
- }
-
- if (parts[i].header.charset != 0){
- icalcomponent_add_property(comp,
- icalproperty_new_xlicmimecharset(parts[i].header.charset));
- }
-
- /* Add iCal components as children of the component */
- if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE &&
- parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE &&
- parts[i].data != 0){
-
- icalcomponent_add_component(comp,
- (icalcomponent*)parts[i].data);
- parts[i].data = 0;
-
- } else if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE &&
- parts[i].header.minor != SSPM_CALENDAR_MINOR_TYPE &&
- parts[i].data != 0){
-
- /* Add other text components as "DESCRIPTION" properties */
-
- icalcomponent_add_property(comp,
- icalproperty_new_description(
- (char*)icalmemory_strdup((char*)parts[i].data)));
-
- parts[i].data = 0;
- }
-
-
- if(root!= 0 && parts[i].level == 0){
- /* We've already assigned the root, but there is another
- part at the root level. This is probably a parse
- error*/
- icalcomponent_free(comp);
- continue;
- }
-
- if(parts[i].level == last_level && last_level != 0){
- icalerror_assert(parent!=0,"No parent for adding component");
-
- icalcomponent_add_component(parent,comp);
-
- } else if (parts[i].level == last_level && last_level == 0 &&
- root == 0) {
-
- root = comp;
- parent = comp;
-
- } else if (parts[i].level > last_level){
-
- parent = last;
- icalcomponent_add_component(parent,comp);
-
- last_level = parts[i].level;
-
- } else if (parts[i].level < last_level){
-
- parent = icalcomponent_get_parent(parent);
- icalcomponent_add_component(parent,comp);
-
- last_level = parts[i].level;
- } else {
- assert(0);
- }
-
- last = comp;
- last_level = parts[i].level;
- assert(parts[i].data == 0);
- }
-
- sspm_free_parts(parts,NUM_PARTS);
- free(parts);
-
- return root;
-}
-
-
-
-int icalmime_test(char* (*get_string)(char *s, size_t size, void *d),
- void *data)
-{
- char *out;
- struct sspm_part *parts;
- int i;
-
- if ( (parts = (struct sspm_part *)
- malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(parts,0,sizeof(parts));
-
- sspm_parse_mime(parts,
- NUM_PARTS, /* Max parts */
- icalmime_local_action_map, /* Actions */
- get_string,
- data, /* data for get_string*/
- 0 /* First header */);
-
- for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ;
- i++){
- if(parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE){
- parts[i].data = icalmemory_strdup(
- icalcomponent_as_ical_string((icalcomponent*)parts[i].data));
- }
- }
-
- sspm_write_mime(parts,NUM_PARTS,&out,"To: bob@bob.org");
-
- printf("%s\n",out);
-
- return 0;
-
-}
-
-
diff --git a/libical/src/libical/icalmime.h b/libical/src/libical/icalmime.h
deleted file mode 100644
index b22288842d..0000000000
--- a/libical/src/libical/icalmime.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalmime.h
- CREATOR: eric 26 July 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-======================================================================*/
-
-#ifndef ICALMIME_H
-#define ICALMIME_H
-
-#include "icalcomponent.h"
-#include "icalparser.h"
-
-icalcomponent* icalmime_parse( char* (*line_gen_func)(char *s, size_t size,
- void *d),
- void *data);
-
-/* The inverse of icalmime_parse, not implemented yet. Use sspm.h directly. */
-char* icalmime_as_mime_string(char* component);
-
-
-
-#endif /* !ICALMIME_H */
-
-
-
diff --git a/libical/src/libical/icalparameter.c b/libical/src/libical/icalparameter.c
deleted file mode 100644
index 9c55419021..0000000000
--- a/libical/src/libical/icalparameter.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalderivedparameters.{c,h}
- CREATOR: eric 09 May 1999
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalderivedparameters.{c,h}
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
- ======================================================================*/
-/*#line 29 "icalparameter.c.in"*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "icalparameter.h"
-#include "icalproperty.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalparameterimpl.h"
-
-#include <stdlib.h> /* for malloc() */
-#include <errno.h>
-#include <string.h> /* for memset() */
-
-/* In icalderivedparameter */
-icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val);
-
-
-struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind)
-{
- struct icalparameter_impl* v;
-
- if ( ( v = (struct icalparameter_impl*)
- malloc(sizeof(struct icalparameter_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- strcpy(v->id,"para");
-
- v->kind = kind;
- v->size = 0;
- v->string = 0;
- v->x_name = 0;
- v->parent = 0;
- v->data = 0;
-
- return v;
-}
-
-icalparameter*
-icalparameter_new (icalparameter_kind kind)
-{
- struct icalparameter_impl* v = icalparameter_new_impl(kind);
-
- return (icalparameter*) v;
-
-}
-
-void
-icalparameter_free (icalparameter* param)
-{
-
-/* HACK. This always triggers, even when parameter is non-zero
- icalerror_check_arg_rv((parameter==0),"parameter");*/
-
-
-#ifdef ICAL_FREE_ON_LIST_IS_ERROR
- icalerror_assert( (param->parent ==0),"Tried to free a parameter that is still attached to a component. ");
-
-#else
- if(param->parent !=0){
- return;
- }
-#endif
-
-
- if (param->string != 0){
- free ((void*)param->string);
- }
-
- if (param->x_name != 0){
- free ((void*)param->x_name);
- }
-
- memset(param,0,sizeof(param));
-
- param->parent = 0;
- param->id[0] = 'X';
- free(param);
-}
-
-
-
-icalparameter*
-icalparameter_new_clone(icalparameter* old)
-{
- struct icalparameter_impl *new;
-
- new = icalparameter_new_impl(old->kind);
-
- icalerror_check_arg_rz((old!=0),"param");
-
- if (new == 0){
- return 0;
- }
-
- memcpy(new,old,sizeof(struct icalparameter_impl));
-
- if (old->string != 0){
- new->string = icalmemory_strdup(old->string);
- if (new->string == 0){
- icalparameter_free(new);
- return 0;
- }
- }
-
- if (old->x_name != 0){
- new->x_name = icalmemory_strdup(old->x_name);
- if (new->x_name == 0){
- icalparameter_free(new);
- return 0;
- }
- }
-
- return new;
-}
-
-icalparameter* icalparameter_new_from_string(const char *str)
-{
- char* eq;
- char* cpy;
- icalparameter_kind kind;
- icalparameter *param;
-
- icalerror_check_arg_rz(str != 0,"str");
-
- cpy = icalmemory_strdup(str);
-
- if (cpy == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- eq = strchr(cpy,'=');
-
- if(eq == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- *eq = '\0';
-
- eq++;
-
- kind = icalparameter_string_to_kind(cpy);
-
- if(kind == ICAL_NO_PARAMETER){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- param = icalparameter_new_from_value_string(kind,eq);
-
- if(kind == ICAL_X_PARAMETER){
- icalparameter_set_xname(param,cpy);
- }
-
- free(cpy);
-
- return param;
-
-}
-
-/**
- * Return a string representation of the parameter according to RFC2445.
- *
- * param = param-name "=" param-value
- * param-name = iana-token / x-token
- * param-value = paramtext /quoted-string
- * paramtext = *SAFE-SHARE
- * quoted-string= DQUOTE *QSAFE-CHARE DQUOTE
- * QSAFE-CHAR = any character except CTLs and DQUOTE
- * SAFE-CHAR = any character except CTLs, DQUOTE. ";", ":", ","
- */
-char*
-icalparameter_as_ical_string (icalparameter* param)
-{
- size_t buf_size = 1024;
- char* buf;
- char* buf_ptr;
- char *out_buf;
- const char *kind_string;
-
- icalerror_check_arg_rz( (param!=0), "parameter");
-
- /* Create new buffer that we can append names, parameters and a
- value to, and reallocate as needed. Later, this buffer will be
- copied to a icalmemory_tmp_buffer, which is managed internally
- by libical, so it can be given to the caller without fear of
- the caller forgetting to free it */
-
- buf = icalmemory_new_buffer(buf_size);
- buf_ptr = buf;
-
- if(param->kind == ICAL_X_PARAMETER) {
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size,
- icalparameter_get_xname(param));
-
- } else {
-
- kind_string = icalparameter_kind_to_string(param->kind);
-
- if (param->kind == ICAL_NO_PARAMETER ||
- param->kind == ICAL_ANY_PARAMETER ||
- kind_string == 0)
- {
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return 0;
- }
-
-
- /* Put the parameter name into the string */
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string);
-
- }
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "=");
-
- if(param->string !=0){
- int qm = 0;
-
- /* Encapsulate the property in quotes if necessary */
- if (strpbrk(param->string, ";:,") != 0) {
- icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"');
- qm = 1;
- }
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, param->string);
- if (qm == 1) {
- icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"');
- }
- } else if (param->data != 0){
- const char* str = icalparameter_enum_to_string(param->data);
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, str);
- } else {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- /* Now, copy the buffer to a tmp_buffer, which is safe to give to
- the caller without worring about de-allocating it. */
-
- out_buf = icalmemory_tmp_copy(buf);
- icalmemory_free_buffer(buf);
-
- return out_buf;
-
-}
-
-
-int
-icalparameter_is_valid (icalparameter* parameter);
-
-
-icalparameter_kind
-icalparameter_isa (icalparameter* parameter)
-{
- if(parameter == 0){
- return ICAL_NO_PARAMETER;
- }
-
- return parameter->kind;
-}
-
-
-int
-icalparameter_isa_parameter (void* parameter)
-{
- struct icalparameter_impl *impl = (struct icalparameter_impl *)parameter;
-
- if (parameter == 0){
- return 0;
- }
-
- if (strcmp(impl->id,"para") == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-void
-icalparameter_set_xname (icalparameter* param, const char* v)
-{
- icalerror_check_arg_rv( (param!=0),"param");
- icalerror_check_arg_rv( (v!=0),"v");
-
- if (param->x_name != 0){
- free((void*)param->x_name);
- }
-
- param->x_name = icalmemory_strdup(v);
-
- if (param->x_name == 0){
- errno = ENOMEM;
- }
-
-}
-
-const char*
-icalparameter_get_xname (icalparameter* param)
-{
- icalerror_check_arg_rz( (param!=0),"param");
-
- return param->x_name;
-}
-
-void
-icalparameter_set_xvalue (icalparameter* param, const char* v)
-{
- icalerror_check_arg_rv( (param!=0),"param");
- icalerror_check_arg_rv( (v!=0),"v");
-
- if (param->string != 0){
- free((void*)param->string);
- }
-
- param->string = icalmemory_strdup(v);
-
- if (param->string == 0){
- errno = ENOMEM;
- }
-
-}
-
-const char*
-icalparameter_get_xvalue (icalparameter* param)
-{
- icalerror_check_arg_rz( (param!=0),"param");
-
- return param->string;
-}
-
-void icalparameter_set_parent(icalparameter* param,
- icalproperty* property)
-{
- icalerror_check_arg_rv( (param!=0),"param");
-
- param->parent = property;
-}
-
-icalproperty* icalparameter_get_parent(icalparameter* param)
-{
- icalerror_check_arg_rz( (param!=0),"param");
-
- return param->parent;
-}
-
-
-/* Everything below this line is machine generated. Do not edit. */
-/* ALTREP */
diff --git a/libical/src/libical/icalparameter.h b/libical/src/libical/icalparameter.h
deleted file mode 100644
index f3d64ab9e5..0000000000
--- a/libical/src/libical/icalparameter.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalparam.h
- CREATOR: eric 20 March 1999
-
-
- $Id$
- $Locker$
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalparam.h
-
- ======================================================================*/
-
-#ifndef ICALPARAM_H
-#define ICALPARAM_H
-
-#include "icalderivedparameter.h"
-
-/* Declared in icalderivedparameter.h */
-/*typedef struct icalparameter_impl icalparameter;*/
-
-icalparameter* icalparameter_new(icalparameter_kind kind);
-icalparameter* icalparameter_new_clone(icalparameter* p);
-
-/* Create from string of form "PARAMNAME=VALUE" */
-icalparameter* icalparameter_new_from_string(const char* value);
-
-/* Create from just the value, the part after the "=" */
-icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind, const char* value);
-
-void icalparameter_free(icalparameter* parameter);
-
-char* icalparameter_as_ical_string(icalparameter* parameter);
-
-int icalparameter_is_valid(icalparameter* parameter);
-
-icalparameter_kind icalparameter_isa(icalparameter* parameter);
-
-int icalparameter_isa_parameter(void* param);
-
-/* Acess the name of an X parameer */
-void icalparameter_set_xname (icalparameter* param, const char* v);
-const char* icalparameter_get_xname(icalparameter* param);
-void icalparameter_set_xvalue (icalparameter* param, const char* v);
-const char* icalparameter_get_xvalue(icalparameter* param);
-
-/* Convert enumerations */
-
-const char* icalparameter_kind_to_string(icalparameter_kind kind);
-icalparameter_kind icalparameter_string_to_kind(const char* string);
-
-
-
-#endif
diff --git a/libical/src/libical/icalparameter_cxx.cpp b/libical/src/libical/icalparameter_cxx.cpp
deleted file mode 100644
index 4b54a69991..0000000000
--- a/libical/src/libical/icalparameter_cxx.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icalparameter_cxx.cpp
- * @author fnguyen (12/10/01)
- * @brief Implementation of C++ Wrapper for icalparameter.c
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-#ifndef ICALPARAMETER_CXX_H
-#include "icalparameter_cxx.h"
-#endif
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-typedef char* string; // Will use the string library from STL
-
-ICalParameter::ICalParameter() throw(icalerrorenum) : imp(icalparameter_new(ICAL_ANY_PARAMETER)){
-}
-
-ICalParameter::ICalParameter(const ICalParameter& v) throw(icalerrorenum) {
- imp = icalparameter_new_clone(v.imp);
- if (!imp) throw icalerrno;
-}
-
-ICalParameter& ICalParameter::operator=(const ICalParameter& v) throw(icalerrorenum) {
- if (this == &v) return *this;
-
- if (imp != NULL)
- {
- icalparameter_free(imp);
- imp = icalparameter_new_clone(v.imp);
- if (!imp) throw icalerrno;
- }
-
- return *this;
-}
-
-ICalParameter::~ICalParameter(){
- if (imp != NULL) icalparameter_free(imp);
-}
-
-ICalParameter::ICalParameter(icalparameter* v) throw(icalerrorenum) : imp(v){
-}
-
-/// Create from string of form "PARAMNAME=VALUE"
-ICalParameter::ICalParameter(string str) throw(icalerrorenum) {
- imp = icalparameter_new_from_string(str);
- if (!imp) throw icalerrno;
-}
-
-/// Create from just the value, the part after the "="
-ICalParameter::ICalParameter(icalparameter_kind kind, string str) throw(icalerrorenum) {
- imp = icalparameter_new_from_value_string(kind, str);
- if (!imp) throw icalerrno;
-}
-
-ICalParameter::ICalParameter(icalparameter_kind kind) throw(icalerrorenum) {
- imp = icalparameter_new(kind);
- if (!imp) throw icalerrno;
-}
-
-string ICalParameter::as_ical_string() throw(icalerrorenum) {
- char *str = icalparameter_as_ical_string(imp);
-
- if (!str) throw icalerrno;
-
- return str;
-}
-
-bool ICalParameter::is_valid(){
- if (imp == NULL) return false;
- return (icalparameter_isa_parameter((void*)imp) ? true : false);
-}
-icalparameter_kind ICalParameter::isa(){
- return icalparameter_isa(imp);
-}
-int ICalParameter::isa_parameter(void* param){
- return icalparameter_isa_parameter(param);
-}
-
-/* Acess the name of an X parameer */
-void ICalParameter::set_xname(ICalParameter &param, string v){
- icalparameter_set_xname(param, v);
-}
-string ICalParameter::get_xname(ICalParameter &param){
- return (string)icalparameter_get_xname(param);
-}
-void ICalParameter::set_xvalue (ICalParameter &param, string v){
- icalparameter_set_xvalue(param, v);
-}
-string ICalParameter::get_xvalue(ICalParameter &param){
- return (string)icalparameter_get_xvalue(param);
-}
-
-/* Convert enumerations */
-string ICalParameter::kind_to_string(icalparameter_kind kind){
- return (string)icalparameter_kind_to_string(kind);
-}
-icalparameter_kind ICalParameter::string_to_kind(string str){
- return icalparameter_string_to_kind(str);
-}
-
-/* DELEGATED-FROM */
-string ICalParameter::get_delegatedfrom(){
- return (string)icalparameter_get_delegatedfrom(imp);
-}
-void ICalParameter::set_delegatedfrom(string v){
- icalparameter_set_delegatedfrom(imp, v);
-}
-
-/* RELATED */
-icalparameter_related ICalParameter::get_related(){
- return icalparameter_get_related(imp);
-}
-void ICalParameter::set_related(icalparameter_related v){
- icalparameter_set_related(imp, v);
-}
-
-/* SENT-BY */
-string ICalParameter::get_sentby(){
- return (string)icalparameter_get_sentby(imp);
-}
-void ICalParameter::set_sentby(string v){
- icalparameter_set_sentby(imp, v);
-}
-
-/* LANGUAGE */
-string ICalParameter::get_language(){
- return (string)icalparameter_get_language(imp);
-}
-void ICalParameter::set_language(string v){
- icalparameter_set_language(imp, v);
-}
-
-/* RELTYPE */
-icalparameter_reltype ICalParameter::get_reltype(){
- return icalparameter_get_reltype(imp);
-}
-void ICalParameter::set_reltype(icalparameter_reltype v){
- icalparameter_set_reltype(imp, v);
-}
-
-/* ENCODING */
-icalparameter_encoding ICalParameter::get_encoding(){
- return icalparameter_get_encoding(imp);
-}
-void ICalParameter::set_encoding(icalparameter_encoding v){
- icalparameter_set_encoding(imp, v);
-}
-
-/* ALTREP */
-string ICalParameter::get_altrep(){
- return (string)icalparameter_get_language(imp);
-}
-void ICalParameter::set_altrep(string v){
- icalparameter_set_altrep(imp, v);
-}
-
-/* FMTTYPE */
-string ICalParameter::get_fmttype(){
- return (string)icalparameter_get_fmttype(imp);
-}
-void ICalParameter::set_fmttype(string v){
- icalparameter_set_fmttype(imp, v);
-}
-
-/* FBTYPE */
-icalparameter_fbtype ICalParameter::get_fbtype(){
- return icalparameter_get_fbtype(imp);
-}
-void ICalParameter::set_fbtype(icalparameter_fbtype v){
- icalparameter_set_fbtype(imp, v);
-}
-
-/* RSVP */
-icalparameter_rsvp ICalParameter::get_rsvp(){
- return icalparameter_get_rsvp(imp);
-}
-void ICalParameter::set_rsvp(icalparameter_rsvp v){
- icalparameter_set_rsvp(imp, v);
-}
-
-/* RANGE */
-icalparameter_range ICalParameter::get_range(){
- return icalparameter_get_range(imp);
-}
-void ICalParameter::set_range(icalparameter_range v){
- icalparameter_set_range(imp, v);
-}
-
-/* DELEGATED-TO */
-string ICalParameter::get_delegatedto(){
- return (string)icalparameter_get_delegatedto(imp);
-}
-void ICalParameter::set_delegatedto(string v){
- icalparameter_set_delegatedto(imp, v);
-}
-
-/* CN */
-string ICalParameter::get_cn(){
- return (string)icalparameter_get_cn(imp);
-}
-void ICalParameter::set_cn(string v){
- icalparameter_set_cn(imp, v);
-}
-
-/* ROLE */
-icalparameter_role ICalParameter::get_role(){
- return icalparameter_get_role(imp);
-}
-void ICalParameter::set_role(icalparameter_role v){
- icalparameter_set_role(imp, v);
-}
-
-/* X-LIC-COMPARETYPE */
-icalparameter_xliccomparetype ICalParameter::get_xliccomparetype(){
- return icalparameter_get_xliccomparetype(imp);
-}
-void ICalParameter::set_xliccomparetype(icalparameter_xliccomparetype v){
- icalparameter_set_xliccomparetype(imp, v);
-}
-
-/* PARTSTAT */
-icalparameter_partstat ICalParameter::get_partstat(){
- return icalparameter_get_partstat(imp);
-}
-void ICalParameter::set_partstat(icalparameter_partstat v){
- icalparameter_set_partstat(imp, v);
-}
-
-/* X-LIC-ERRORTYPE */
-icalparameter_xlicerrortype ICalParameter::get_xlicerrortype(){
- return icalparameter_get_xlicerrortype(imp);
-}
-void ICalParameter::set_xlicerrortype(icalparameter_xlicerrortype v){
- icalparameter_set_xlicerrortype(imp, v);
-}
-
-/* MEMBER */
-string ICalParameter::get_member(){
- return (string)icalparameter_get_member(imp);
-}
-void ICalParameter::set_member(string v){
- icalparameter_set_member(imp, v);
-}
-
-/* X */
-string ICalParameter::get_x(){
- return (string)icalparameter_get_x(imp);
-}
-void ICalParameter::set_x(string v){
- icalparameter_set_x(imp, v);
-}
-
-/* CUTYPE */
-icalparameter_cutype ICalParameter::get_cutype(){
- return icalparameter_get_cutype(imp);
-}
-void ICalParameter::set_cutype(icalparameter_cutype v){
- icalparameter_set_cutype(imp, v);
-}
-
-/* TZID */
-string ICalParameter::get_tzid(){
- return (string)icalparameter_get_tzid(imp);
-}
-void ICalParameter::set_tzid(string v){
- icalparameter_set_tzid(imp, v);
-}
-
-/* VALUE */
-icalparameter_value ICalParameter::get_value(){
- return icalparameter_get_value(imp);
-}
-void ICalParameter::set_value(icalparameter_value v){
- icalparameter_set_value(imp, v);
-}
-
-/* DIR */
-string ICalParameter::get_dir(){
- return (string)icalparameter_get_dir(imp);
-}
-void ICalParameter::set_dir(string v){
- icalparameter_set_dir(imp, v);
-}
diff --git a/libical/src/libical/icalparameter_cxx.h b/libical/src/libical/icalparameter_cxx.h
deleted file mode 100644
index fe35d6d4ed..0000000000
--- a/libical/src/libical/icalparameter_cxx.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icalparameter_cxx.h
- * @author fnguyen (12/10/01)
- * @brief Definition of C++ Wrapper for icalparameter.c
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-
-#ifndef ICALPARAMETER_CXX_H
-#define ICALPARAMETER_CXX_H
-
-extern "C" {
-#include "ical.h"
-};
-
-#include "icptrholder.h"
-
-typedef char* string; // Will use the string library from STL
-
-class ICalParameter {
-public:
- ICalParameter() throw(icalerrorenum);
- ICalParameter(const ICalParameter&) throw(icalerrorenum);
- ICalParameter& operator=(const ICalParameter&) throw(icalerrorenum);
- ~ICalParameter();
-
- ICalParameter(icalparameter* v) throw(icalerrorenum);
-
- // Create from string of form "PARAMNAME=VALUE"
- ICalParameter(string str) throw(icalerrorenum);
-
- // Create from just the value, the part after the "="
- ICalParameter(icalparameter_kind kind, string str) throw(icalerrorenum);
- ICalParameter(icalparameter_kind kind) throw(icalerrorenum);
-
- operator icalparameter*() { return imp; }
-
- void detach() {
- imp = NULL;
- }
-
-public:
- string as_ical_string() throw(icalerrorenum);
- bool is_valid();
- icalparameter_kind isa( );
- int isa_parameter(void* param);
-
-public:
- /* Acess the name of an X parameer */
- static void set_xname (ICalParameter &param, string v);
- static string get_xname(ICalParameter &param);
- static void set_xvalue (ICalParameter &param, string v);
- static string get_xvalue(ICalParameter &param);
-
- /* Convert enumerations */
- static string kind_to_string(icalparameter_kind kind);
- static icalparameter_kind string_to_kind(string str);
-
-public:
- /* DELEGATED-FROM */
- string get_delegatedfrom();
- void set_delegatedfrom(string v);
-
- /* RELATED */
- icalparameter_related get_related();
- void set_related(icalparameter_related v);
-
- /* SENT-BY */
- string get_sentby();
- void set_sentby(string v);
-
- /* LANGUAGE */
- string get_language();
- void set_language(string v);
-
- /* RELTYPE */
- icalparameter_reltype get_reltype();
- void set_reltype(icalparameter_reltype v);
-
- /* ENCODING */
- icalparameter_encoding get_encoding();
- void set_encoding(icalparameter_encoding v);
-
- /* ALTREP */
- string get_altrep();
- void set_altrep(string v);
-
- /* FMTTYPE */
- string get_fmttype();
- void set_fmttype(string v);
-
- /* FBTYPE */
- icalparameter_fbtype get_fbtype();
- void set_fbtype(icalparameter_fbtype v);
-
- /* RSVP */
- icalparameter_rsvp get_rsvp();
- void set_rsvp(icalparameter_rsvp v);
-
- /* RANGE */
- icalparameter_range get_range();
- void set_range(icalparameter_range v);
-
- /* DELEGATED-TO */
- string get_delegatedto();
- void set_delegatedto(string v);
-
- /* CN */
- string get_cn();
- void set_cn(string v);
-
- /* ROLE */
- icalparameter_role get_role();
- void set_role(icalparameter_role v);
-
- /* X-LIC-COMPARETYPE */
- icalparameter_xliccomparetype get_xliccomparetype();
- void set_xliccomparetype(icalparameter_xliccomparetype v);
-
- /* PARTSTAT */
- icalparameter_partstat get_partstat();
- void set_partstat(icalparameter_partstat v);
-
- /* X-LIC-ERRORTYPE */
- icalparameter_xlicerrortype get_xlicerrortype();
- void set_xlicerrortype(icalparameter_xlicerrortype v);
-
- /* MEMBER */
- string get_member();
- void set_member(string v);
-
- /* X */
- string get_x();
- void set_x(string v);
-
- /* CUTYPE */
- icalparameter_cutype get_cutype();
- void set_cutype(icalparameter_cutype v);
-
- /* TZID */
- string get_tzid();
- void set_tzid(string v);
-
- /* VALUE */
- icalparameter_value get_value();
- void set_value(icalparameter_value v);
-
- /* DIR */
- string get_dir();
- void set_dir(string v);
-
-private:
- icalparameter* imp;
-};
-
-#endif
diff --git a/libical/src/libical/icalparameterimpl.h b/libical/src/libical/icalparameterimpl.h
deleted file mode 100644
index 2d0fdd642d..0000000000
--- a/libical/src/libical/icalparameterimpl.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalparameterimpl.h
- CREATOR: eric 09 May 1999
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalderivedparameters.{c,h}
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
- ======================================================================*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef ICALPARAMETER_IMPL
-#define ICALPARAMETER_IMPL
-
-#include "icalparameter.h"
-#include "icalproperty.h"
-
-struct icalparameter_impl
-{
- icalparameter_kind kind;
- char id[5];
- int size;
- const char* string;
- const char* x_name;
- icalproperty* parent;
-
- int data;
-};
-
-
-#endif /*ICALPARAMETER_IMPL*/
diff --git a/libical/src/libical/icalparser.c b/libical/src/libical/icalparser.c
deleted file mode 100644
index 0090cf9568..0000000000
--- a/libical/src/libical/icalparser.c
+++ /dev/null
@@ -1,1112 +0,0 @@
-/* -*- Mode: C; tab-width: 4; c-basic-offset: 8; -*-
- ======================================================================
- FILE: icalparser.c
- CREATOR: eric 04 August 1999
-
- $Id$
- $Locker$
-
- 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.
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Initial Developer of the Original Code is Eric Busboom
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-#include "pvl.h"
-#include "icalerror.h"
-#include "icalvalue.h"
-#include "icalderivedparameter.h"
-#include "icalparameter.h"
-#include "icalproperty.h"
-#include "icalcomponent.h"
-
-#include <string.h> /* For strncpy & size_t */
-#include <stdio.h> /* For FILE and fgets and sprintf */
-#include <stdlib.h> /* for free */
-
-#include "icalmemory.h"
-#include "icalparser.h"
-
-#ifdef WIN32
-#define HAVE_CTYPE_H
-#define HAVE_ISWSPACE
-#endif
-
-#ifdef HAVE_WCTYPE_H
-#include <wctype.h>
-#endif
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#ifndef HAVE_ISWSPACE
-#ifdef HAVE_ISSPACE
-# define iswspace isspace
-#else
-#error "You don't have isspace. Please report the error to libical@softwarestudio.org."
-#endif
-#endif
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-char* icalparser_get_next_char(char c, char *str, int qm);
-char* icalparser_get_next_parameter(char* line,char** end);
-char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind);
-char* icalparser_get_prop_name(char* line, char** end);
-char* icalparser_get_param_name(char* line, char **end);
-
-#define TMP_BUF_SIZE 80
-
-struct icalparser_impl
-{
- int buffer_full; /* flag indicates that temp is smaller that
- data being read into it*/
- int continuation_line; /* last line read was a continuation line */
- size_t tmp_buf_size;
- char temp[TMP_BUF_SIZE];
- icalcomponent *root_component;
- int version;
- int level;
- int lineno;
- icalparser_state state;
- pvl_list components;
-
- void *line_gen_data;
-
-};
-
-
-icalparser* icalparser_new(void)
-{
- struct icalparser_impl* impl = 0;
- if ( ( impl = (struct icalparser_impl*)
- malloc(sizeof(struct icalparser_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- impl->root_component = 0;
- impl->components = pvl_newlist();
- impl->level = 0;
- impl->state = ICALPARSER_SUCCESS;
- impl->tmp_buf_size = TMP_BUF_SIZE;
- impl->buffer_full = 0;
- impl->continuation_line = 0;
- impl->lineno = 0;
- impl->continuation_line = 0;
- memset(impl->temp,0, TMP_BUF_SIZE);
-
- return (icalparser*)impl;
-}
-
-
-void icalparser_free(icalparser* parser)
-{
- icalcomponent *c;
-
- if (parser->root_component != 0){
- icalcomponent_free(parser->root_component);
- }
-
- while( (c=pvl_pop(parser->components)) != 0){
- icalcomponent_free(c);
- }
-
- pvl_free(parser->components);
-
- free(parser);
-}
-
-void icalparser_set_gen_data(icalparser* parser, void* data)
-{
- parser->line_gen_data = data;
-}
-
-
-icalvalue* icalvalue_new_From_string_with_error(icalvalue_kind kind,
- char* str,
- icalproperty **error);
-
-
-
-char* icalparser_get_next_char(char c, char *str, int qm)
-{
- int quote_mode = 0;
- char* p;
-
- for(p=str; *p!=0; p++){
- if (qm == 1) {
- if ( quote_mode == 0 && *p=='"' && *(p-1) != '\\' ){
- quote_mode =1;
- continue;
- }
-
- if ( quote_mode == 1 && *p=='"' && *(p-1) != '\\' ){
- quote_mode =0;
- continue;
- }
- }
-
- if (quote_mode == 0 && *p== c && *(p-1) != '\\' ){
- return p;
- }
-
- }
-
- return 0;
-}
-
-
-/** make a new tmp buffer out of a substring */
-static char* make_segment(char* start, char* end)
-{
- char *buf, *tmp;
- size_t size = (size_t)end - (size_t)start;
-
- buf = icalmemory_tmp_buffer(size+1);
-
-
- strncpy(buf,start,size);
- *(buf+size) = 0;
-
- tmp = (buf+size);
- while ( *tmp == '\0' || iswspace(*tmp) )
- {
- *tmp = 0;
- tmp--;
- }
-
- return buf;
-}
-
-
-char* icalparser_get_prop_name(char* line, char** end)
-{
- char* p;
- char* v;
- char *str;
-
- p = icalparser_get_next_char(';',line,1);
- v = icalparser_get_next_char(':',line,1);
- if (p== 0 && v == 0) {
- return 0;
- }
-
- /* There is no ';' or, it is after the ';' that marks the beginning of
- the value */
- if (v!=0 && ( p == 0 || p > v)){
- str = make_segment(line,v);
- *end = v+1;
- } else {
- str = make_segment(line,p);
- *end = p+1;
- }
-
- return str;
-}
-
-
-char* icalparser_get_param_name(char* line, char **end)
-{
- char* next;
- char *str;
-
- next = icalparser_get_next_char('=',line,1);
-
- if (next == 0) {
- return 0;
- }
-
- str = make_segment(line,next);
- *end = next+1;
- if (**end == '"') {
- *end = *end+1;
- next = icalparser_get_next_char('"',*end,0);
- if (next == 0) {
- return 0;
- }
-
- *end = make_segment(*end,next);
- }
-
- return str;
-}
-
-
-char* icalparser_get_next_paramvalue(char* line, char **end)
-{
- char* next;
- char *str;
-
- next = icalparser_get_next_char(',',line,1);
-
- if (next == 0){
- next = (char*)(size_t)line+(size_t)strlen(line);\
- }
-
- if (next == line){
- return 0;
- } else {
- str = make_segment(line,next);
- *end = next+1;
- return str;
- }
-}
-
-
-/**
- A property may have multiple values, if the values are seperated by
- commas in the content line. This routine will look for the next
- comma after line and will set the next place to start searching in
- end. */
-
-char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind)
-{
-
- char* next;
- char *p;
- char *str;
- size_t length = strlen(line);
-
- p = line;
- while(1){
-
- next = icalparser_get_next_char(',',p,1);
-
- /* Unforunately, RFC2445 says that for the RECUR value, COMMA
- can both seperate digits in a list, and it can seperate
- multiple recurrence specifications. This is not a friendly
- part of the spec. This weirdness tries to
- distinguish the two uses. it is probably a HACK*/
-
- if( kind == ICAL_RECUR_VALUE ) {
- if ( next != 0 &&
- (*end+length) > next+5 &&
- strncmp(next,"FREQ",4) == 0
- ) {
- /* The COMMA was followed by 'FREQ', is it a real seperator*/
- /* Fall through */
- } else if (next != 0){
- /* Not real, get the next COMMA */
- p = next+1;
- next = 0;
- continue;
- }
- }
- /* ignore all , for query value. select dtstart, dtend etc ... */
- else if( kind == ICAL_QUERY_VALUE) {
- if ( next != 0) {
- p = next+1;
- continue;
- }
- else
- break;
- }
-
- /* If the comma is preceeded by a '\', then it is a literal and
- not a value seperator*/
-
- if ( (next!=0 && *(next-1) == '\\') ||
- (next!=0 && *(next-3) == '\\')
- )
- /*second clause for '/' is on prev line. HACK may be out of bounds */
- {
- p = next+1;
- } else {
- break;
- }
-
- }
-
- if (next == 0){
- next = (char*)(size_t)line+length;
- *end = next;
- } else {
- *end = next+1;
- }
-
- if (next == line){
- return 0;
- }
-
-
- str = make_segment(line,next);
- return str;
-
-}
-
-char* icalparser_get_next_parameter(char* line,char** end)
-{
- char *next;
- char *v;
- char *str;
-
- v = icalparser_get_next_char(':',line,1);
- next = icalparser_get_next_char(';', line,1);
-
- /* There is no ';' or, it is after the ':' that marks the beginning of
- the value */
-
- if (next == 0 || next > v) {
- next = icalparser_get_next_char(':', line,1);
- }
-
- if (next != 0) {
- str = make_segment(line,next);
- *end = next+1;
- return str;
- } else {
- *end = line;
- return 0;
- }
-}
-
-
-/**
- * Get a single property line, from the property name through the
- * final new line, and include any continuation lines
- */
-char* icalparser_get_line(icalparser *parser,
- char* (*line_gen_func)(char *s, size_t size, void *d))
-{
- char *line;
- char *line_p;
- size_t buf_size = parser->tmp_buf_size;
-
- line_p = line = icalmemory_new_buffer(buf_size);
- line[0] = '\0';
-
- /* Read lines by calling line_gen_func and putting the data into
- parser->temp. If the line is a continuation line ( begins with a
- space after a newline ) then append the data onto line and read
- again. Otherwise, exit the loop. */
-
- while(1) {
-
- /* The first part of the loop deals with the temp buffer,
- which was read on he last pass through the loop. The
- routine is split like this because it has to read lone line
- ahead to determine if a line is a continuation line. */
-
-
- /* The tmp buffer is not clear, so transfer the data in it to the
- output. This may be left over from a previous call */
- if (parser->temp[0] != '\0' ) {
-
- /* If the last position in the temp buffer is occupied,
- mark the buffer as full. The means we will do another
- read later, because the line is not finished */
- if (parser->temp[parser->tmp_buf_size-1] == 0 &&
- parser->temp[parser->tmp_buf_size-2] != '\n'&&
- parser->temp[parser->tmp_buf_size-2] != 0 ){
- parser->buffer_full = 1;
- } else {
- parser->buffer_full = 0;
- }
-
- /* Copy the temp to the output and clear the temp buffer. */
- if(parser->continuation_line==1){
- /* back up the pointer to erase the continuation characters */
- parser->continuation_line = 0;
- line_p--;
-
- if ( *(line_p-1) == '\r'){
- line_p--;
- }
-
- /* copy one space up to eliminate the leading space*/
- icalmemory_append_string(&line,&line_p,&buf_size,
- parser->temp+1);
-
- } else {
- icalmemory_append_string(&line,&line_p,&buf_size,parser->temp);
- }
-
- parser->temp[0] = '\0' ;
- }
-
- parser->temp[parser->tmp_buf_size-1] = 1; /* Mark end of buffer */
-
- /****** Here is where the routine gets string data ******************/
- if ((*line_gen_func)(parser->temp,parser->tmp_buf_size,parser->line_gen_data)
- ==0){/* Get more data */
-
- /* If the first position is clear, it means we didn't get
- any more data from the last call to line_ge_func*/
- if (parser->temp[0] == '\0'){
-
- if(line[0] != '\0'){
- /* There is data in the output, so fall trhough and process it*/
- break;
- } else {
- /* No data in output; return and signal that there
- is no more input*/
- free(line);
- return 0;
- }
- }
- }
-
-
- /* If the output line ends in a '\n' and the temp buffer
- begins with a ' ', then the buffer holds a continuation
- line, so keep reading. */
-
- if ( line_p > line+1 && *(line_p-1) == '\n' && parser->temp[0] == ' ') {
-
- parser->continuation_line = 1;
-
- } else if ( parser->buffer_full == 1 ) {
-
- /* The buffer was filled on the last read, so read again */
-
- } else {
-
- /* Looks like the end of this content line, so break */
- break;
- }
-
-
- }
-
- /* Erase the final newline and/or carriage return*/
- if ( line_p > line+1 && *(line_p-1) == '\n') {
- *(line_p-1) = '\0';
- if ( *(line_p-2) == '\r'){
- *(line_p-2) = '\0';
- }
-
- } else {
- *(line_p) = '\0';
- }
-
- while ( (*line_p == '\0' || iswspace(*line_p)) && line_p > line )
- {
- *line_p = '\0';
- line_p--;
- }
-
- return line;
-
-}
-
-static void insert_error(icalcomponent* comp, char* text,
- char* message, icalparameter_xlicerrortype type)
-{
- char temp[1024];
-
- if (text == 0){
- snprintf(temp,1024,"%s:",message);
- } else {
- snprintf(temp,1024,"%s: %s",message,text);
- }
-
- icalcomponent_add_property
- (comp,
- icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(type),
- 0));
-}
-
-
-static int line_is_blank(char* line){
- int i=0;
-
- for(i=0; *(line+i)!=0; i++){
- char c = *(line+i);
-
- if(c != ' ' && c != '\n' && c != '\t'){
- return 0;
- }
- }
-
- return 1;
-}
-
-icalcomponent* icalparser_parse(icalparser *parser,
- char* (*line_gen_func)(char *s, size_t size,
- void* d))
-{
-
- char* line;
- icalcomponent *c=0;
- icalcomponent *root=0;
- icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR);
- int cont;
-
- icalerror_check_arg_rz((parser !=0),"parser");
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
-
- do{
- line = icalparser_get_line(parser, line_gen_func);
-
- if ((c = icalparser_add_line(parser,line)) != 0){
-
- if(icalcomponent_get_parent(c) !=0){
- /* This is bad news... assert? */
- }
-
- assert(parser->root_component == 0);
- assert(pvl_count(parser->components) ==0);
-
- if (root == 0){
- /* Just one component */
- root = c;
- } else if(icalcomponent_isa(root) != ICAL_XROOT_COMPONENT) {
- /*Got a second component, so move the two components under
- an XROOT container */
- icalcomponent *tempc = icalcomponent_new(ICAL_XROOT_COMPONENT);
- icalcomponent_add_component(tempc, root);
- icalcomponent_add_component(tempc, c);
- root = tempc;
- } else if(icalcomponent_isa(root) == ICAL_XROOT_COMPONENT) {
- /* Already have an XROOT container, so add the component
- to it*/
- icalcomponent_add_component(root, c);
-
- } else {
- /* Badness */
- assert(0);
- }
-
- c = 0;
-
- }
- cont = 0;
- if(line != 0){
- icalmemory_free_buffer(line);
- cont = 1;
- }
- } while ( cont );
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
-
- return root;
-
-}
-
-
-icalcomponent* icalparser_add_line(icalparser* parser,
- char* line)
-{
- char *str;
- char *end;
- int vcount = 0;
- icalproperty *prop;
- icalproperty_kind prop_kind;
- icalvalue *value;
- icalvalue_kind value_kind = ICAL_NO_VALUE;
-
-
- icalerror_check_arg_rz((parser != 0),"parser");
-
-
- if (line == 0)
- {
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
-
- if(line_is_blank(line) == 1){
- return 0;
- }
-
- /* Begin by getting the property name at the start of the line. The
- property name may end up being "BEGIN" or "END" in which case it
- is not really a property, but the marker for the start or end of
- a component */
-
- end = 0;
- str = icalparser_get_prop_name(line, &end);
-
- if (str == 0 || strlen(str) == 0 ){
- /* Could not get a property name */
- icalcomponent *tail = pvl_data(pvl_tail(parser->components));
-
- if (tail){
- insert_error(tail,line,
- "Got a data line, but could not find a property name or component begin tag",
- ICAL_XLICERRORTYPE_COMPONENTPARSEERROR);
- }
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
-
- /**********************************************************************
- * Handle begin and end of components
- **********************************************************************/
- /* If the property name is BEGIN or END, we are actually
- starting or ending a new component */
-
-
- if(strcmp(str,"BEGIN") == 0){
- icalcomponent *c;
- icalcomponent_kind comp_kind;
-
-
- parser->level++;
- str = icalparser_get_next_value(end,&end, value_kind);
-
-
- comp_kind = icalenum_string_to_component_kind(str);
-
-
- if (comp_kind == ICAL_NO_COMPONENT){
-
-
- c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT);
- insert_error(c,str,"Parse error in component name",
- ICAL_XLICERRORTYPE_COMPONENTPARSEERROR);
- }
-
- c = icalcomponent_new(comp_kind);
-
- if (c == 0){
- c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT);
- insert_error(c,str,"Parse error in component name",
- ICAL_XLICERRORTYPE_COMPONENTPARSEERROR);
- }
-
- pvl_push(parser->components,c);
-
- parser->state = ICALPARSER_BEGIN_COMP;
- return 0;
-
- } else if (strcmp(str,"END") == 0 ) {
- icalcomponent* tail;
-
- parser->level--;
- str = icalparser_get_next_value(end,&end, value_kind);
-
- /* Pop last component off of list and add it to the second-to-last*/
- parser->root_component = pvl_pop(parser->components);
-
- tail = pvl_data(pvl_tail(parser->components));
-
- if(tail != 0){
- icalcomponent_add_component(tail,parser->root_component);
- }
-
- tail = 0;
-
- /* Return the component if we are back to the 0th level */
- if (parser->level == 0){
- icalcomponent *rtrn;
-
- if(pvl_count(parser->components) != 0){
- /* There are still components on the stack -- this means
- that one of them did not have a proper "END" */
- pvl_push(parser->components,parser->root_component);
- icalparser_clean(parser); /* may reset parser->root_component*/
- }
-
- assert(pvl_count(parser->components) == 0);
-
- parser->state = ICALPARSER_SUCCESS;
- rtrn = parser->root_component;
- parser->root_component = 0;
- return rtrn;
-
- } else {
- parser->state = ICALPARSER_END_COMP;
- return 0;
- }
- }
-
-
- /* There is no point in continuing if we have not seen a
- component yet */
-
- if(pvl_data(pvl_tail(parser->components)) == 0){
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
-
-
- /**********************************************************************
- * Handle property names
- **********************************************************************/
-
- /* At this point, the property name really is a property name,
- (Not a component name) so make a new property and add it to
- the component */
-
-
- prop_kind = icalproperty_string_to_kind(str);
-
- prop = icalproperty_new(prop_kind);
-
- if (prop != 0){
- icalcomponent *tail = pvl_data(pvl_tail(parser->components));
-
- if(prop_kind==ICAL_X_PROPERTY){
- icalproperty_set_x_name(prop,str);
- }
-
- icalcomponent_add_property(tail, prop);
-
- /* Set the value kind for the default for this type of
- property. This may be re-set by a VALUE parameter */
- value_kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop));
-
- } else {
- icalcomponent* tail = pvl_data(pvl_tail(parser->components));
-
- insert_error(tail,str,"Parse error in property name",
- ICAL_XLICERRORTYPE_PROPERTYPARSEERROR);
-
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
-
- /**********************************************************************
- * Handle parameter values
- **********************************************************************/
-
- /* Now, add any parameters to the last property */
-
- while(1) {
-
- if (*(end-1) == ':'){
- /* if the last seperator was a ":" and the value is a
- URL, icalparser_get_next_parameter will find the
- ':' in the URL, so better break now. */
- break;
- }
-
- str = icalparser_get_next_parameter(end,&end);
-
- if (str != 0){
- char* name;
- char* pvalue;
-
- icalparameter *param = 0;
- icalparameter_kind kind;
- icalcomponent *tail = pvl_data(pvl_tail(parser->components));
-
- name = icalparser_get_param_name(str,&pvalue);
-
- if (name == 0){
- /* 'tail' defined above */
- insert_error(tail, str, "Cant parse parameter name",
- ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR);
- tail = 0;
- break;
- }
-
- kind = icalparameter_string_to_kind(name);
-
- if(kind == ICAL_X_PARAMETER){
- param = icalparameter_new(ICAL_X_PARAMETER);
-
- if(param != 0){
- icalparameter_set_xname(param,name);
- icalparameter_set_xvalue(param,pvalue);
- }
-
-
- } else if (kind != ICAL_NO_PARAMETER){
- param = icalparameter_new_from_value_string(kind,pvalue);
- } else {
- /* Error. Failed to parse the parameter*/
- /* 'tail' defined above */
- insert_error(tail, str, "Cant parse parameter name",
- ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR);
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
-
- if (param == 0){
- /* 'tail' defined above */
- insert_error(tail,str,"Cant parse parameter value",
- ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR);
-
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- continue;
- }
-
- /* If it is a VALUE parameter, set the kind of value*/
- if (icalparameter_isa(param)==ICAL_VALUE_PARAMETER){
-
- value_kind = (icalvalue_kind)
- icalparameter_value_to_value_kind(
- icalparameter_get_value(param)
- );
-
- if (value_kind == ICAL_NO_VALUE){
-
- /* Ooops, could not parse the value of the
- parameter ( it was not one of the defined
- values ), so reset the value_kind */
-
- insert_error(
- tail, str,
- "Got a VALUE parameter with an unknown type",
- ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR);
- icalparameter_free(param);
-
- value_kind =
- icalproperty_kind_to_value_kind(
- icalproperty_isa(prop));
-
- icalparameter_free(param);
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
- }
- }
-
- /* Everything is OK, so add the parameter */
- icalproperty_add_parameter(prop,param);
- tail = 0;
-
- } else { /* if ( str != 0) */
- /* If we did not get a param string, go on to looking
- for a value */
- break;
- } /* if ( str != 0) */
-
- } /* while(1) */
-
- /**********************************************************************
- * Handle values
- **********************************************************************/
-
- /* Look for values. If there are ',' characters in the values,
- then there are multiple values, so clone the current
- parameter and add one part of the value to each clone */
-
- vcount=0;
- while(1) {
- str = icalparser_get_next_value(end,&end, value_kind);
-
- if (str != 0){
-
- if (vcount > 0){
- /* Actually, only clone after the second value */
- icalproperty* clone = icalproperty_new_clone(prop);
- icalcomponent* tail = pvl_data(pvl_tail(parser->components));
-
- icalcomponent_add_property(tail, clone);
- prop = clone;
- tail = 0;
- }
-
- value = icalvalue_new_from_string(value_kind, str);
-
- /* Don't add properties without value */
- if (value == 0){
- char temp[200]; /* HACK */
-
- icalproperty_kind prop_kind = icalproperty_isa(prop);
- icalcomponent* tail = pvl_data(pvl_tail(parser->components));
-
- sprintf(temp,"Cant parse as %s value in %s property. Removing entire property",
- icalvalue_kind_to_string(value_kind),
- icalproperty_kind_to_string(prop_kind));
-
- insert_error(tail, str, temp,
- ICAL_XLICERRORTYPE_VALUEPARSEERROR);
-
- /* Remove the troublesome property */
- icalcomponent_remove_property(tail,prop);
- icalproperty_free(prop);
- prop = 0;
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
-
- } else {
- vcount++;
- icalproperty_set_value(prop, value);
- }
-
-
- } else {
- if (vcount == 0){
- char temp[200]; /* HACK */
-
- icalproperty_kind prop_kind = icalproperty_isa(prop);
- icalcomponent *tail = pvl_data(pvl_tail(parser->components));
-
- sprintf(temp,"No value for %s property. Removing entire property",
- icalproperty_kind_to_string(prop_kind));
-
- insert_error(tail, str, temp,
- ICAL_XLICERRORTYPE_VALUEPARSEERROR);
-
- /* Remove the troublesome property */
- icalcomponent_remove_property(tail,prop);
- icalproperty_free(prop);
- prop = 0;
- tail = 0;
- parser->state = ICALPARSER_ERROR;
- return 0;
- } else {
-
- break;
- }
- }
- }
-
- /****************************************************************
- * End of component parsing.
- *****************************************************************/
-
- if (pvl_data(pvl_tail(parser->components)) == 0 &&
- parser->level == 0){
- /* HACK. Does this clause ever get executed? */
- parser->state = ICALPARSER_SUCCESS;
- assert(0);
- return parser->root_component;
- } else {
- parser->state = ICALPARSER_IN_PROGRESS;
- return 0;
- }
-
-}
-
-icalparser_state icalparser_get_state(icalparser* parser)
-{
- return parser->state;
-
-}
-
-icalcomponent* icalparser_clean(icalparser* parser)
-{
- icalcomponent *tail;
-
- icalerror_check_arg_rz((parser != 0 ),"parser");
-
- /* We won't get a clean exit if some components did not have an
- "END" tag. Clear off any component that may be left in the list */
-
- while((tail=pvl_data(pvl_tail(parser->components))) != 0){
-
- insert_error(tail," ",
- "Missing END tag for this component. Closing component at end of input.",
- ICAL_XLICERRORTYPE_COMPONENTPARSEERROR);
-
-
- parser->root_component = pvl_pop(parser->components);
- tail=pvl_data(pvl_tail(parser->components));
-
- if(tail != 0){
- if(icalcomponent_get_parent(parser->root_component)!=0){
- icalerror_warn("icalparser_clean is trying to attach a component for the second time");
- } else {
- icalcomponent_add_component(tail,parser->root_component);
- }
- }
-
- }
-
- return parser->root_component;
-
-}
-
-struct slg_data {
- const char* pos;
- const char* str;
-};
-
-
-char* icalparser_string_line_generator(char *out, size_t buf_size, void *d)
-{
- char *n;
- size_t size;
- struct slg_data* data = (struct slg_data*)d;
-
- if(data->pos==0){
- data->pos=data->str;
- }
-
- /* If the pointer is at the end of the string, we are done */
- if (*(data->pos)==0){
- return 0;
- }
-
- n = strchr(data->pos,'\n');
-
- if (n == 0){
- size = strlen(data->pos);
- } else {
- n++; /* include newline in output */
- size = (n-data->pos);
- }
-
- if (size > buf_size-1){
- size = buf_size-1;
- }
-
-
- strncpy(out,data->pos,size);
-
- *(out+size) = '\0';
-
- data->pos += size;
-
- return out;
-}
-
-icalcomponent* icalparser_parse_string(const char* str)
-{
- icalcomponent *c;
- struct slg_data d;
- icalparser *p;
-
- icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR);
-
- d.pos = 0;
- d.str = str;
-
- p = icalparser_new();
- icalparser_set_gen_data(p,&d);
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
-
- c = icalparser_parse(p,icalparser_string_line_generator);
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
-
- icalparser_free(p);
-
- return c;
-
-}
diff --git a/libical/src/libical/icalparser.h b/libical/src/libical/icalparser.h
deleted file mode 100644
index 7773af4d1f..0000000000
--- a/libical/src/libical/icalparser.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalparser.h
- CREATOR: eric 20 April 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalparser.h
-
-======================================================================*/
-
-
-#ifndef ICALPARSER_H
-#define ICALPARSER_H
-
-#include "icalenums.h"
-#include "icaltypes.h"
-#include"icalcomponent.h"
-
-#include <stdio.h> /* For FILE* */
-
-typedef struct icalparser_impl icalparser;
-
-
-/**
- * @file icalparser.h
- * @brief Line-oriented parsing.
- *
- * Create a new parser via icalparse_new_parser, then add lines one at
- * a time with icalparse_add_line(). icalparser_add_line() will return
- * non-zero when it has finished with a component.
- */
-
-typedef enum icalparser_state {
- ICALPARSER_ERROR,
- ICALPARSER_SUCCESS,
- ICALPARSER_BEGIN_COMP,
- ICALPARSER_END_COMP,
- ICALPARSER_IN_PROGRESS
-} icalparser_state;
-
-icalparser* icalparser_new(void);
-icalcomponent* icalparser_add_line(icalparser* parser, char* str );
-icalcomponent* icalparser_clean(icalparser* parser);
-icalparser_state icalparser_get_state(icalparser* parser);
-void icalparser_free(icalparser* parser);
-
-
-/**
- * Message oriented parsing. icalparser_parse takes a string that
- * holds the text ( in RFC 2445 format ) and returns a pointer to an
- * icalcomponent. The caller owns the memory. line_gen_func is a
- * pointer to a function that returns one content line per invocation
- */
-
-icalcomponent* icalparser_parse(icalparser *parser,
- char* (*line_gen_func)(char *s, size_t size, void *d));
-
-/**
- Set the data that icalparser_parse will give to the line_gen_func
- as the parameter 'd'
- */
-void icalparser_set_gen_data(icalparser* parser, void* data);
-
-
-icalcomponent* icalparser_parse_string(const char* str);
-
-
-/***********************************************************************
- * Parser support functions
- ***********************************************************************/
-
-/** Use the flex/bison parser to turn a string into a value type */
-icalvalue* icalparser_parse_value(icalvalue_kind kind,
- const char* str, icalcomponent** errors);
-
-/** Given a line generator function, return a single iCal content line.*/
-char* icalparser_get_line(icalparser* parser, char* (*line_gen_func)(char *s, size_t size, void *d));
-
-char* icalparser_string_line_generator(char *out, size_t buf_size, void *d);
-
-#endif /* !ICALPARSE_H */
diff --git a/libical/src/libical/icalperiod.c b/libical/src/libical/icalperiod.c
deleted file mode 100644
index 0dfbe81bfc..0000000000
--- a/libical/src/libical/icalperiod.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalperiod.c
- CREATOR: eric 02 June 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalperiod.h"
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "icalerror.h"
-#include "icalmemory.h"
-
-
-
-
-struct icalperiodtype icalperiodtype_from_string (const char* str)
-{
-
- struct icalperiodtype p, null_p;
- char *s = icalmemory_strdup(str);
- char *start, *end = s;
- icalerrorstate es;
-
- /* Errors are normally generated in the following code, so save
- the error state for resoration later */
-
- icalerrorenum e = icalerrno;
-
- p.start = p.end = icaltime_null_time();
- p.duration = icaldurationtype_from_int(0);
-
- null_p = p;
-
- if(s == 0) goto error;
-
- start = s;
- end = strchr(s, '/');
-
- if(end == 0) goto error;
-
- *end = 0;
- end++;
-
- p.start = icaltime_from_string(start);
-
- if (icaltime_is_null_time(p.start)) goto error;
-
- es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR);
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
-
- p.end = icaltime_from_string(end);
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
-
-
- if (icaltime_is_null_time(p.end)){
-
- p.duration = icaldurationtype_from_string(end);
-
- if(icaldurationtype_as_int(p.duration) == 0) goto error;
- }
-
- icalerrno = e;
-
- icalmemory_free_buffer(s);
-
- return p;
-
- error:
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
-
- if (s)
- icalmemory_free_buffer (s);
- return null_p;
-}
-
-
-const char* icalperiodtype_as_ical_string(struct icalperiodtype p)
-{
-
- const char* start;
- const char* end;
-
- char *buf;
- size_t buf_size = 40;
- char* buf_ptr = 0;
-
- buf = (char*)icalmemory_new_buffer(buf_size);
- buf_ptr = buf;
-
-
- start = icaltime_as_ical_string(p.start);
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, start);
-
- if(!icaltime_is_null_time(p.end)){
- end = icaltime_as_ical_string(p.end);
- } else {
- end = icaldurationtype_as_ical_string(p.duration);
- }
-
- icalmemory_append_char(&buf, &buf_ptr, &buf_size, '/');
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, end);
-
- icalmemory_add_tmp_buffer(buf);
-
- return buf;
-}
-
-
-
-struct icalperiodtype icalperiodtype_null_period(void) {
- struct icalperiodtype p;
- p.start = icaltime_null_time();
- p.end = icaltime_null_time();
- p.duration = icaldurationtype_null_duration();
-
- return p;
-}
-int icalperiodtype_is_null_period(struct icalperiodtype p){
-
- if(icaltime_is_null_time(p.start) &&
- icaltime_is_null_time(p.end) &&
- icaldurationtype_is_null_duration(p.duration)){
- return 1;
- } else {
- return 0;
- }
-}
-
-int icalperiodtype_is_valid_period(struct icalperiodtype p){
- if(icaltime_is_valid_time(p.start) &&
- (icaltime_is_valid_time(p.end) || icaltime_is_null_time(p.end)) )
- {
- return 1;
- }
-
- return 0;
-}
-
diff --git a/libical/src/libical/icalperiod.h b/libical/src/libical/icalperiod.h
deleted file mode 100644
index 5f07dd4a88..0000000000
--- a/libical/src/libical/icalperiod.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalperiod.h
- CREATOR: eric 26 Jan 2001
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALPERIOD_H
-#define ICALPERIOD_H
-
-#include "icaltime.h"
-#include "icalduration.h"
-
-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(void);
-
-int icalperiodtype_is_null_period(struct icalperiodtype p);
-
-int icalperiodtype_is_valid_period(struct icalperiodtype p);
-
-#endif /* !ICALTIME_H */
-
-
-
diff --git a/libical/src/libical/icalproperty.c b/libical/src/libical/icalproperty.c
deleted file mode 100644
index 16378c6da8..0000000000
--- a/libical/src/libical/icalproperty.c
+++ /dev/null
@@ -1,989 +0,0 @@
-/* -*- Mode: C -*- */
-
-/*======================================================================
- FILE: icalproperty.c
- CREATOR: eric 28 April 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalproperty.c
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalproperty.h"
-#include "icalparameter.h"
-#include "icalcomponent.h"
-#include "pvl.h"
-#include "icalenums.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalparser.h"
-
-#include <string.h> /* For icalmemory_strdup, rindex */
-#include <assert.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <stdio.h> /* for printf */
-#include <stdarg.h> /* for va_list, va_start, etc. */
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-/* Private routines for icalproperty */
-void icalvalue_set_parent(icalvalue* value,
- icalproperty* property);
-icalproperty* icalvalue_get_parent(icalvalue* value);
-
-void icalparameter_set_parent(icalparameter* param,
- icalproperty* property);
-icalproperty* icalparameter_get_parent(icalparameter* value);
-
-
-void icalproperty_set_x_name(icalproperty* prop, const char* name);
-
-struct icalproperty_impl
-{
- char id[5];
- icalproperty_kind kind;
- char* x_name;
- pvl_list parameters;
- pvl_elem parameter_iterator;
- icalvalue* value;
- icalcomponent *parent;
-};
-
-void icalproperty_add_parameters(icalproperty* prop, va_list args)
-{
- void* vp;
-
- while((vp = va_arg(args, void*)) != 0) {
-
- if (icalvalue_isa_value(vp) != 0 ){
- } else if (icalparameter_isa_parameter(vp) != 0 ){
-
- icalproperty_add_parameter((icalproperty*)prop,
- (icalparameter*)vp);
- } else {
- icalerror_set_errno(ICAL_BADARG_ERROR);
- }
-
- }
-}
-
-
-icalproperty*
-icalproperty_new_impl(icalproperty_kind kind)
-{
- icalproperty* prop;
-
- if (!icalproperty_kind_is_valid(kind))
- return NULL;
-
- if ( ( prop = (icalproperty*) malloc(sizeof(icalproperty))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- strcpy(prop->id,"prop");
-
- prop->kind = kind;
- prop->parameters = pvl_newlist();
- prop->parameter_iterator = 0;
- prop->value = 0;
- prop->x_name = 0;
- prop->parent = 0;
-
- return prop;
-}
-
-
-icalproperty*
-icalproperty_new (icalproperty_kind kind)
-{
- if (kind == ICAL_NO_PROPERTY){
- return 0;
- }
-
- return (icalproperty*)icalproperty_new_impl(kind);
-}
-
-
-icalproperty*
-icalproperty_new_clone(icalproperty* old)
-{
- icalproperty *new = icalproperty_new_impl(old->kind);
- pvl_elem p;
-
- icalerror_check_arg_rz((old!=0),"old");
- icalerror_check_arg_rz((new!=0),"new");
-
- if (old->value !=0) {
- new->value = icalvalue_new_clone(old->value);
- }
-
- if (old->x_name != 0) {
-
- new->x_name = icalmemory_strdup(old->x_name);
-
- if (new->x_name == 0) {
- icalproperty_free(new);
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
- }
-
- for(p=pvl_head(old->parameters);p != 0; p = pvl_next(p)){
- icalparameter *param = icalparameter_new_clone(pvl_data(p));
-
- if (param == 0){
- icalproperty_free(new);
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- pvl_push(new->parameters,param);
-
- }
-
- return new;
-
-}
-
-icalproperty* icalproperty_new_from_string(const char* str)
-{
-
- size_t buf_size = 1024;
- char* buf = icalmemory_new_buffer(buf_size);
- char* buf_ptr = buf;
- icalproperty *prop;
- icalcomponent *comp;
- int errors = 0;
-
- icalerror_check_arg_rz( (str!=0),"str");
-
- /* Is this a HACK or a crafty reuse of code? */
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:VCALENDAR\n");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, str);
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "\n");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:VCALENDAR\n");
-
- comp = icalparser_parse_string(buf);
-
- if(comp == 0){
- icalerror_set_errno(ICAL_PARSE_ERROR);
- return 0;
- }
-
- errors = icalcomponent_count_errors(comp);
-
- prop = icalcomponent_get_first_property(comp,ICAL_ANY_PROPERTY);
-
- icalcomponent_remove_property(comp,prop);
-
- icalcomponent_free(comp);
- free(buf);
-
- if(errors > 0){
- icalproperty_free(prop);
- return 0;
- } else {
- return prop;
- }
-
-}
-
-void
-icalproperty_free (icalproperty* p)
-{
- icalparameter* param;
-
- icalerror_check_arg_rv((p!=0),"prop");
-
-#ifdef ICAL_FREE_ON_LIST_IS_ERROR
- icalerror_assert( (p->parent ==0),"Tried to free a property that is still attached to a component. ");
-
-#else
- if(p->parent !=0){
- return;
- }
-#endif
-
- if (p->value != 0){
- icalvalue_set_parent(p->value,0);
- icalvalue_free(p->value);
- }
-
- while( (param = pvl_pop(p->parameters)) != 0){
- icalparameter_free(param);
- }
-
- pvl_free(p->parameters);
-
- if (p->x_name != 0) {
- free(p->x_name);
- }
-
- p->kind = ICAL_NO_PROPERTY;
- p->parameters = 0;
- p->parameter_iterator = 0;
- p->value = 0;
- p->x_name = 0;
- p->id[0] = 'X';
-
- free(p);
-
-}
-
-
-/* This returns where the start of the next line should be. chars_left does
- not include the trailing '\0'. */
-#define MAX_LINE_LEN 75
-/*#define MAX_LINE_LEN 120*/
-
-static char*
-get_next_line_start (char *line_start, int chars_left)
-{
- char *pos;
-
- /* If we have 74 chars or less left, we can output all of them.
- we return a pointer to the '\0' at the end of the string. */
- if (chars_left < MAX_LINE_LEN) {
- return line_start + chars_left;
- }
-
- /* Now we jump to the last possible character of the line, and step back
- trying to find a ';' ':' or ' '. If we find one, we return the character
- after it. */
- pos = line_start + MAX_LINE_LEN - 2;
- while (pos > line_start) {
- if (*pos == ';' || *pos == ':' || *pos == ' ') {
- return pos + 1;
- }
- pos--;
- }
- /* Now try to split on a UTF-8 boundary defined as a 7-bit
- value or as a byte with the two high-most bits set:
- 11xxxxxx. See http://czyborra.com/utf/ */
-
- pos = line_start + MAX_LINE_LEN - 1;
- while (pos > line_start) {
- /* plain ascii */
- if ((*pos & 128) == 0)
- return pos;
-
- /* utf8 escape byte */
- if ((*pos & 192) == 192)
- return pos;
-
- pos--;
- }
-
- /* Give up, just break at 74 chars (the 75th char is the space at
- the start of the line). */
-
- return line_start + MAX_LINE_LEN - 1;
-}
-
-
-/** This splits the property into lines less than 75 octects long (as
- * specified in RFC2445). It tries to split after a ';' if it can.
- * It returns a tmp buffer. NOTE: I'm not sure if it matters if we
- * split a line in the middle of a UTF-8 character. It probably won't
- * look nice in a text editor.
- */
-static char*
-fold_property_line (char *text)
-{
- size_t buf_size;
- char *buf, *buf_ptr, *line_start, *next_line_start, *out_buf;
- int len, chars_left, first_line;
- char ch;
-
- /* Start with a buffer twice the size of our property line, so we almost
- certainly won't overflow it. */
- len = strlen (text);
- buf_size = len * 2;
- buf = icalmemory_new_buffer (buf_size);
- buf_ptr = buf;
-
- /* Step through the text, finding each line to add to the output. */
- line_start = text;
- chars_left = len;
- first_line = 1;
- for (;;) {
- if (chars_left <= 0)
- break;
-
- /* This returns the first character for the next line. */
- next_line_start = get_next_line_start (line_start, chars_left);
-
- /* If this isn't the first line, we need to output a newline and space
- first. */
- if (!first_line) {
- icalmemory_append_string (&buf, &buf_ptr, &buf_size, "\n ");
- }
- first_line = 0;
-
- /* This adds the line to our tmp buffer. We temporarily place a '\0'
- in text, so we can copy the line in one go. */
- ch = *next_line_start;
- *next_line_start = '\0';
- icalmemory_append_string (&buf, &buf_ptr, &buf_size, line_start);
- *next_line_start = ch;
-
- /* Now we move on to the next line. */
- chars_left -= (next_line_start - line_start);
- line_start = next_line_start;
- }
-
- /* Copy it to a temporary buffer, and then free it. */
- out_buf = icalmemory_tmp_buffer (strlen (buf) + 1);
- strcpy (out_buf, buf);
- icalmemory_free_buffer (buf);
-
- return out_buf;
-}
-
-
-/* Determine what VALUE parameter to include. The VALUE parameters
- are ignored in the normal parameter printing ( the block after
- this one, so we need to do it here */
-static const char *
-icalproperty_get_value_kind(icalproperty *prop)
-{
- const char* kind_string = 0;
-
- icalparameter *orig_val_param
- = icalproperty_get_first_parameter(prop,ICAL_VALUE_PARAMETER);
-
- icalvalue *value = icalproperty_get_value(prop);
-
- icalvalue_kind orig_kind = ICAL_NO_VALUE;
-
- icalvalue_kind this_kind = ICAL_NO_VALUE;
-
- icalvalue_kind default_kind
- = icalproperty_kind_to_value_kind(prop->kind);
-
- if(orig_val_param){
- orig_kind = (icalvalue_kind)icalparameter_get_value(orig_val_param);
- }
-
- if(value != 0){
- this_kind = icalvalue_isa(value);
- }
-
-
- if(this_kind == default_kind &&
- orig_kind != ICAL_NO_VALUE){
- /* The kind is the default, so it does not need to be
- included, but do it anyway, since it was explicit in
- the property. But, use the default, not the one
- specified in the property */
-
- kind_string = icalvalue_kind_to_string(default_kind);
-
- } else if (this_kind != default_kind && this_kind != ICAL_NO_VALUE){
- /* Not the default, so it must be specified */
- kind_string = icalvalue_kind_to_string(this_kind);
- } else {
- /* Don'tinclude the VALUE parameter at all */
- }
-
- return kind_string;
-}
-
-const char*
-icalproperty_as_ical_string (icalproperty* prop)
-{
- icalparameter *param;
-
- /* Create new buffer that we can append names, parameters and a
- value to, and reallocate as needed. Later, this buffer will be
- copied to a icalmemory_tmp_buffer, which is managed internally
- by libical, so it can be given to the caller without fear of
- the caller forgetting to free it */
-
- const char* property_name = 0;
- size_t buf_size = 1024;
- char* buf = icalmemory_new_buffer(buf_size);
- char* buf_ptr = buf;
- icalvalue* value;
- char *out_buf;
- const char* kind_string = 0;
-
- char newline[] = "\n";
-
-
- icalerror_check_arg_rz( (prop!=0),"prop");
-
-
- /* Append property name */
-
- if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){
- property_name = prop->x_name;
- } else {
- property_name = icalproperty_kind_to_string(prop->kind);
- }
-
- if (property_name == 0 ) {
- icalerror_warn("Got a property of an unknown kind.");
- icalmemory_free_buffer(buf);
- return 0;
-
- }
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name);
-
- kind_string = icalproperty_get_value_kind(prop);
- if(kind_string!=0){
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";VALUE=");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string);
- }
-
- /* Append parameters */
- for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER);
- param != 0;
- param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) {
-
- icalparameter_kind kind = icalparameter_isa(param);
- kind_string = icalparameter_as_ical_string(param);
-
- if(kind==ICAL_VALUE_PARAMETER){
- continue;
- }
-
- if (kind_string == 0 ) {
- icalerror_warn("Got a parameter of unknown kind for the following property");
-
- icalerror_warn((property_name) ? property_name : "(NULL)");
- continue;
- }
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string);
- }
-
- /* Append value */
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, ":");
-
- value = icalproperty_get_value(prop);
-
- if (value != 0){
- const char *str = icalvalue_as_ical_string(value);
- icalerror_assert((str !=0),"Could not get string representation of a value");
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, str);
- } else {
- icalmemory_append_string(&buf, &buf_ptr, &buf_size,"ERROR: No Value");
-
- }
-
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline);
-
- /* Now, copy the buffer to a tmp_buffer, which is safe to give to
- the caller without worring about de-allocating it. */
-
- /* We now use a function to fold the line properly every 75 characters. */
- out_buf = fold_property_line (buf);
-
- icalmemory_free_buffer(buf);
-
- return out_buf;
-}
-
-
-
-icalproperty_kind
-icalproperty_isa (icalproperty* p)
-{
- if(p != 0){
- return p->kind;
- }
-
- return ICAL_NO_PROPERTY;
-}
-
-int
-icalproperty_isa_property (void* property)
-{
- icalproperty *impl = (icalproperty *) property;
-
- icalerror_check_arg_rz( (property!=0), "property");
- if (strcmp(impl->id,"prop") == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-void
-icalproperty_add_parameter (icalproperty* p,icalparameter* parameter)
-{
- icalerror_check_arg_rv( (p!=0),"prop");
- icalerror_check_arg_rv( (parameter!=0),"parameter");
-
- pvl_push(p->parameters, parameter);
-
-}
-
-void
-icalproperty_set_parameter (icalproperty* prop,icalparameter* parameter)
-{
- icalparameter_kind kind;
-
- icalerror_check_arg_rv( (prop!=0),"prop");
- icalerror_check_arg_rv( (parameter!=0),"parameter");
-
- kind = icalparameter_isa(parameter);
- if (kind != ICAL_X_PARAMETER)
- icalproperty_remove_parameter_by_kind(prop,kind);
- else
- icalproperty_remove_parameter_by_name(prop,
- icalparameter_get_xname(parameter));
-
- icalproperty_add_parameter(prop,parameter);
-}
-
-void icalproperty_set_parameter_from_string(icalproperty* prop,
- const char* name, const char* value)
-{
-
- icalparameter_kind kind;
- icalparameter *param;
-
- icalerror_check_arg_rv( (prop!=0),"prop");
- icalerror_check_arg_rv( (name!=0),"name");
- icalerror_check_arg_rv( (value!=0),"value");
-
- kind = icalparameter_string_to_kind(name);
-
- if(kind == ICAL_NO_PARAMETER){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return;
- }
-
- param = icalparameter_new_from_value_string(kind,value);
-
- if (param == 0){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return;
- }
-
- if(kind == ICAL_X_PARAMETER){
- icalparameter_set_xname(param, name);
- }
-
- icalproperty_set_parameter(prop,param);
-
-}
-
-const char* icalproperty_get_parameter_as_string(icalproperty* prop,
- const char* name)
-{
- icalparameter_kind kind;
- icalparameter *param;
- char* str;
- char* pv;
-
- icalerror_check_arg_rz( (prop!=0),"prop");
- icalerror_check_arg_rz( (name!=0),"name");
-
- kind = icalparameter_string_to_kind(name);
-
- if(kind == ICAL_NO_PARAMETER){
- /* icalenum_string_to_parameter_kind will set icalerrno */
- return 0;
- }
-
- for(param = icalproperty_get_first_parameter(prop,kind);
- param != 0;
- param = icalproperty_get_next_parameter(prop,kind)) {
- if (kind != ICAL_X_PARAMETER) {
- break;
- }
-
- if (strcmp(icalparameter_get_xname(param),name)==0) {
- break;
- }
- }
-
- if (param == 0){
- return 0;
- }
-
-
- str = icalparameter_as_ical_string(param);
-
- pv = strchr(str,'=');
-
- if(pv == 0){
- icalerror_set_errno(ICAL_INTERNAL_ERROR);
- return 0;
- }
-
- return pv+1;
-
-}
-
-/** @see icalproperty_remove_parameter_by_kind()
- *
- * @deprecated Please use icalproperty_remove_parameter_by_kind()
- * instead.
- */
-
-void
-icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind)
-{
- icalproperty_remove_parameter_by_kind(prop, kind);
-}
-
-
-/** @brief Remove all parameters with the specified kind.
- *
- * @param prop A valid icalproperty.
- * @param kind The kind to remove (ex. ICAL_TZID_PARAMETER)
- *
- * See icalproperty_remove_parameter_by_name() and
- * icalproperty_remove_parameter_by_ref() for alternate ways of
- * removing parameters
- */
-
-void
-icalproperty_remove_parameter_by_kind(icalproperty* prop, icalparameter_kind kind)
-{
- pvl_elem p;
-
- icalerror_check_arg_rv((prop!=0),"prop");
-
- for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){
- icalparameter* param = (icalparameter *)pvl_data (p);
- if (icalparameter_isa(param) == kind) {
- pvl_remove (prop->parameters, p);
- icalparameter_free(param);
- break;
- }
- }
-}
-
-
-/** @brief Remove all parameters with the specified name.
- *
- * @param prop A valid icalproperty.
- * @param name The name of the parameter to remove
- *
- * This function removes paramters with the given name. The name
- * corresponds to either a built-in name (TZID, etc.) or the name of
- * an extended parameter (X-FOO)
- *
- * See icalproperty_remove_parameter_by_kind() and
- * icalproperty_remove_parameter_by_ref() for alternate ways of removing
- * parameters
- */
-
-
-void
-icalproperty_remove_parameter_by_name(icalproperty* prop, const char *name)
-{
- pvl_elem p;
-
- icalerror_check_arg_rv((prop!=0),"prop");
-
- for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){
- icalparameter* param = (icalparameter *)pvl_data (p);
- const char * kind_string;
-
- if (icalparameter_isa(param) == ICAL_X_PARAMETER)
- kind_string = icalparameter_get_xname(param);
- else
- kind_string = icalparameter_kind_to_string(icalparameter_isa(param));
-
- if (!kind_string)
- continue;
-
- if (0 == strcmp(kind_string, name)) {
- pvl_remove (prop->parameters, p);
- break;
- }
- }
-}
-
-
-/** @brief Remove the specified parameter reference from the property.
- *
- * @param prop A valid icalproperty.
- * @param parameter A reference to a specific icalparameter.
- *
- * This function removes the specified parameter reference from the
- * property.
- */
-
-void
-icalproperty_remove_parameter_by_ref(icalproperty* prop, icalparameter* parameter)
-{
- pvl_elem p;
- icalparameter_kind kind;
- const char *name;
-
- icalerror_check_arg_rv((prop!=0),"prop");
- icalerror_check_arg_rv((parameter!=0),"parameter");
-
- kind = icalparameter_isa(parameter);
- name = icalparameter_get_xname(parameter);
-
- /*
- * FIXME If it's an X- parameter, also compare the names. It would be nice
- * to have a better abstraction like icalparameter_equals()
- */
- for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){
- icalparameter* p_param = (icalparameter *)pvl_data (p);
- if (icalparameter_isa(p_param) == kind &&
- (kind != ICAL_X_PARAMETER ||
- !strcmp(icalparameter_get_xname(p_param), name))) {
- pvl_remove (prop->parameters, p);
- icalparameter_free(p_param);
- break;
- }
- }
-}
-
-
-int
-icalproperty_count_parameters (const icalproperty* prop)
-{
- if(prop != 0){
- return pvl_count(prop->parameters);
- }
-
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return -1;
-}
-
-
-icalparameter*
-icalproperty_get_first_parameter(icalproperty* p, icalparameter_kind kind)
-{
- icalerror_check_arg_rz( (p!=0),"prop");
-
- p->parameter_iterator = pvl_head(p->parameters);
-
- if (p->parameter_iterator == 0) {
- return 0;
- }
-
- for( p->parameter_iterator = pvl_head(p->parameters);
- p->parameter_iterator !=0;
- p->parameter_iterator = pvl_next(p->parameter_iterator)){
-
- icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator);
-
- if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){
- return param;
- }
- }
-
- return 0;
-}
-
-
-icalparameter*
-icalproperty_get_next_parameter (icalproperty* p, icalparameter_kind kind)
-{
- icalerror_check_arg_rz( (p!=0),"prop");
-
- if (p->parameter_iterator == 0) {
- return 0;
- }
-
- for( p->parameter_iterator = pvl_next(p->parameter_iterator);
- p->parameter_iterator !=0;
- p->parameter_iterator = pvl_next(p->parameter_iterator)){
-
- icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator);
-
- if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){
- return param;
- }
- }
-
- return 0;
-
-}
-
-void
-icalproperty_set_value (icalproperty* p, icalvalue* value)
-{
- icalerror_check_arg_rv((p !=0),"prop");
- icalerror_check_arg_rv((value !=0),"value");
-
- if (p->value != 0){
- icalvalue_set_parent(p->value,0);
- icalvalue_free(p->value);
- p->value = 0;
- }
-
- p->value = value;
-
- icalvalue_set_parent(value,p);
-}
-
-
-void icalproperty_set_value_from_string(icalproperty* prop,const char* str,
- const char* type)
-{
- icalvalue *oval,*nval;
- icalvalue_kind kind = ICAL_NO_VALUE;
-
- icalerror_check_arg_rv( (prop!=0),"prop");
- icalerror_check_arg_rv( (str!=0),"str");
- icalerror_check_arg_rv( (type!=0),"type");
-
- if(strcmp(type,"NO")==0){
- /* Get the type from the value the property already has, if it exists */
- oval = icalproperty_get_value(prop);
- if(oval != 0){
- /* Use the existing value kind */
- kind = icalvalue_isa(oval);
- } else {
- /* Use the default kind for the property */
- kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop));
- }
- } else {
- /* Use the given kind string */
- kind = icalvalue_string_to_kind(type);
- }
-
- if(kind == ICAL_NO_VALUE){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return;
- }
-
- nval = icalvalue_new_from_string(kind, str);
-
- if(nval == 0){
- /* icalvalue_new_from_string sets errno */
- assert(icalerrno != ICAL_NO_ERROR);
- return;
- }
-
- icalproperty_set_value(prop,nval);
-
-
-}
-
-icalvalue*
-icalproperty_get_value(const icalproperty* prop)
-{
- icalerror_check_arg_rz( (prop!=0),"prop");
-
- return prop->value;
-}
-
-const char* icalproperty_get_value_as_string(const icalproperty* prop)
-{
- icalvalue *value;
-
- icalerror_check_arg_rz( (prop!=0),"prop");
-
- value = prop->value;
-
- return icalvalue_as_ical_string(value);
-}
-
-
-void icalproperty_set_x_name(icalproperty* prop, const char* name)
-{
- icalerror_check_arg_rv( (name!=0),"name");
- icalerror_check_arg_rv( (prop!=0),"prop");
-
- if (prop->x_name != 0) {
- free(prop->x_name);
- }
-
- prop->x_name = icalmemory_strdup(name);
-
- if(prop->x_name == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- }
-
-}
-
-const char* icalproperty_get_x_name(icalproperty* prop){
- icalerror_check_arg_rz( (prop!=0),"prop");
-
- return prop->x_name;
-}
-
-
-const char* icalproperty_get_property_name(const icalproperty* prop)
-{
-
- const char* property_name = 0;
- size_t buf_size = 256;
- char* buf = icalmemory_new_buffer(buf_size);
- char* buf_ptr = buf;
-
- icalerror_check_arg_rz( (prop!=0),"prop");
-
- if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){
- property_name = prop->x_name;
- } else {
- property_name = icalproperty_kind_to_string(prop->kind);
- }
-
- if (property_name == 0 ) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
-
- } else {
- /* _append_string will automatically grow the buffer if
- property_name is longer than the initial buffer size */
- icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name);
- }
-
- /* Add the buffer to the temporary buffer ring -- the caller will
- not have to free the memory. */
- icalmemory_add_tmp_buffer(buf);
-
- return buf;
-}
-
-
-
-
-void icalproperty_set_parent(icalproperty* property,
- icalcomponent* component)
-{
- icalerror_check_arg_rv( (property!=0),"property");
-
- property->parent = component;
-}
-
-icalcomponent* icalproperty_get_parent(const icalproperty* property)
-{
- icalerror_check_arg_rz( (property!=0),"property");
-
- return property->parent;
-}
diff --git a/libical/src/libical/icalproperty.h b/libical/src/libical/icalproperty.h
deleted file mode 100644
index 472adb9585..0000000000
--- a/libical/src/libical/icalproperty.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalproperty.h
- CREATOR: eric 20 March 1999
-
-
- $Id$
- $Locker$
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalparam.h
-
- ======================================================================*/
-
-
-#ifndef ICALPROPERTY_H
-#define ICALPROPERTY_H
-
-#include <time.h>
-#include <stdarg.h> /* for va_... */
-
-#include "icalderivedparameter.h"
-
-#include "icalvalue.h"
-#include "icalrecur.h"
-
-/* Actually in icalderivedproperty.h:
- typedef struct icalproperty_impl icalproperty; */
-
-#include "icalderivedproperty.h" /* To get icalproperty_kind enumerations */
-
-icalproperty* icalproperty_new(icalproperty_kind kind);
-
-icalproperty* icalproperty_new_clone(icalproperty * prop);
-
-icalproperty* icalproperty_new_from_string(const char* str);
-
-const char* icalproperty_as_ical_string(icalproperty* prop);
-
-void icalproperty_free(icalproperty* prop);
-
-icalproperty_kind icalproperty_isa(icalproperty* property);
-int icalproperty_isa_property(void* property);
-
-void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args);
-void icalproperty_add_parameter(icalproperty* prop,icalparameter* parameter);
-void icalproperty_set_parameter(icalproperty* prop,icalparameter* parameter);
-void icalproperty_set_parameter_from_string(icalproperty* prop,
- const char* name, const char* value);
-const char* icalproperty_get_parameter_as_string(icalproperty* prop,
- const char* name);
-
-void icalproperty_remove_parameter(icalproperty* prop,
- icalparameter_kind kind);
-
-void icalproperty_remove_parameter_by_kind(icalproperty* prop,
- icalparameter_kind kind);
-
-void icalproperty_remove_parameter_by_name(icalproperty* prop,
- const char *name);
-
-void icalproperty_remove_parameter_by_ref(icalproperty* prop,
- icalparameter *param);
-
-
-
-int icalproperty_count_parameters(const icalproperty* prop);
-
-/* Iterate through the parameters */
-icalparameter* icalproperty_get_first_parameter(icalproperty* prop,
- icalparameter_kind kind);
-icalparameter* icalproperty_get_next_parameter(icalproperty* prop,
- icalparameter_kind kind);
-/* Access the value of the property */
-void icalproperty_set_value(icalproperty* prop, icalvalue* value);
-void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char* kind);
-
-icalvalue* icalproperty_get_value(const icalproperty* prop);
-const char* icalproperty_get_value_as_string(const icalproperty* prop);
-
-/* Deal with X properties */
-
-void icalproperty_set_x_name(icalproperty* prop, const char* name);
-const char* icalproperty_get_x_name(icalproperty* prop);
-
-/** Return the name of the property -- the type name converted to a
- * string, or the value of _get_x_name if the type is and X
- * property
- */
-const char* icalproperty_get_property_name (const icalproperty* prop);
-
-icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value);
-
-/* Convert kinds to string and get default value type */
-
-icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);
-icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind);
-const char* icalproperty_kind_to_string(icalproperty_kind kind);
-icalproperty_kind icalproperty_string_to_kind(const char* string);
-
-/** Check validity of a specific icalproperty_kind **/
-int icalproperty_kind_is_valid(const icalproperty_kind kind);
-
-icalproperty_method icalproperty_string_to_method(const char* str);
-const char* icalproperty_method_to_string(icalproperty_method method);
-
-
-const char* icalproperty_enum_to_string(int e);
-int icalproperty_string_to_enum(const char* str);
-int icalproperty_kind_and_string_to_enum(const int kind, const char* str);
-
-const char* icalproperty_status_to_string(icalproperty_status);
-icalproperty_status icalproperty_string_to_status(const char* string);
-
-int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e);
-
-
-
-
-#endif /*ICALPROPERTY_H*/
diff --git a/libical/src/libical/icalproperty_cxx.cpp b/libical/src/libical/icalproperty_cxx.cpp
deleted file mode 100644
index fcd4de5719..0000000000
--- a/libical/src/libical/icalproperty_cxx.cpp
+++ /dev/null
@@ -1,702 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icalproperty_cxx.cpp
- * @author fnguyen (12/10/01)
- * @brief Implementation of C++ Wrapper for icalproperty.c
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-
-#ifndef ICALPROPERTY_CXX_H
-#include "icalproperty_cxx.h"
-#endif
-
-#ifndef ICALPARAMETER_CXX_H
-#include "icalparameter_cxx.h"
-#endif
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-ICalProperty::ICalProperty() : imp(icalproperty_new(ICAL_ANY_PROPERTY)){
-}
-
-ICalProperty::ICalProperty(const ICalProperty& v) throw(icalerrorenum){
- imp = icalproperty_new_clone(v.imp);
- if (!imp) throw icalerrno;
-}
-
-ICalProperty& ICalProperty::operator=(const ICalProperty& v) throw(icalerrorenum) {
- if (this == &v) return *this;
-
- if (imp != NULL)
- {
- icalproperty_free(imp);
- imp = icalproperty_new_clone(v.imp);
- if (!imp) throw icalerrno;
- }
-
- return *this;
-}
-ICalProperty::~ICalProperty(){
- if (imp != NULL) icalproperty_free(imp);
-}
-
-ICalProperty::ICalProperty(icalproperty* v) : imp(v) {
-}
-
-ICalProperty::ICalProperty(string str){
- imp = icalproperty_new_from_string(str);
-}
-
-ICalProperty::ICalProperty(icalproperty_kind kind){
- imp = icalproperty_new(kind);
-}
-
-string ICalProperty::as_ical_string(){
- return (string)icalproperty_as_ical_string(imp);
-}
-icalproperty_kind ICalProperty::isa(){
- return icalproperty_isa(imp);
-}
-int ICalProperty::isa_property(void* property){
- return icalproperty_isa_property(property);
-}
-
-int ICalProperty::operator==(ICalProperty& rhs){
- icalparameter_xliccomparetype result;
- ICalValue* thisPropValue = this->get_value();
- ICalValue* rhsPropValue = rhs.get_value();
- result = icalvalue_compare((icalvalue*)*thisPropValue, (icalvalue*)*rhsPropValue);
- return (result == ICAL_XLICCOMPARETYPE_EQUAL);
-}
-
-void ICalProperty::add_parameter(ICalParameter& parameter){
- icalproperty_add_parameter(imp, parameter);
-}
-void ICalProperty::set_parameter(ICalParameter &parameter){
- icalproperty_set_parameter(imp, parameter);
-}
-void ICalProperty::set_parameter_from_string(string name, string val){
- icalproperty_set_parameter_from_string(imp, name, val);
-}
-string ICalProperty::get_parameter_as_string(string name){
- return (string)icalproperty_get_parameter_as_string(imp, name);
-}
-void ICalProperty::remove_parameter(icalparameter_kind kind){
- icalproperty_remove_parameter(imp, kind);
-}
-int ICalProperty::count_parameters(){
- return icalproperty_count_parameters(imp);
-}
-
-/** Iterate through the parameters */
-ICalParameter* ICalProperty::get_first_parameter(icalparameter_kind kind){
- return new ICalParameter(icalproperty_get_first_parameter(imp, kind));
-}
-ICalParameter* ICalProperty::get_next_parameter(icalparameter_kind kind){
- return new ICalParameter(icalproperty_get_next_parameter(imp, kind));
-}
-
-/** Access the value of the property */
-void ICalProperty::set_value(const ICalValue& val){
- icalproperty_set_value(imp, (ICalValue&)val);
-}
-void ICalProperty::set_value_from_string(string val, string kind){
- icalproperty_set_value_from_string(imp, val, kind);
-}
-
-ICalValue* ICalProperty::get_value(){
- return new ICalValue(icalproperty_get_value(imp));
-}
-string ICalProperty::get_value_as_string(){
- return (string)icalproperty_get_value_as_string(imp);
-}
-
-/** Return the name of the property -- the type name converted to a
- * string, or the value of get_x_name if the type is X property
- */
-string ICalProperty::get_name(){
- return (string)icalproperty_get_property_name(imp);
-}
-
-/* Deal with X properties */
-void ICalProperty::set_x_name(ICalProperty &prop, string name){
- icalproperty_set_x_name(prop, name);
-}
-string ICalProperty::get_x_name(ICalProperty &prop){
- return (string)icalproperty_get_x_name(prop);
-}
-
-icalvalue_kind ICalProperty::icalparameter_value_to_value_kind(icalparameter_value val){
- return icalparameter_value_to_value_kind(val);
-}
-
-/* Convert kinds to string and get default value type */
-icalvalue_kind ICalProperty::kind_to_value_kind(icalproperty_kind kind){
- return icalproperty_kind_to_value_kind(kind);
-}
-icalproperty_kind ICalProperty::value_kind_to_kind(icalvalue_kind kind){
- return icalproperty_value_kind_to_kind(kind);
-}
-string ICalProperty::kind_to_string(icalproperty_kind kind){
- return (string)icalproperty_kind_to_string(kind);
-}
-icalproperty_kind ICalProperty::string_to_kind(string str){
- return icalproperty_string_to_kind(str);
-}
-
-string ICalProperty::method_to_string(icalproperty_method method){
- return (string)icalproperty_method_to_string(method);
-}
-icalproperty_method ICalProperty::string_to_method(string str){
- return icalproperty_string_to_method(str);
-}
-
-string ICalProperty::enum_to_string(int e){
- return (string)icalproperty_enum_to_string(e);
-}
-int ICalProperty::string_to_enum(string str){
- return icalproperty_string_to_enum(str);
-}
-
-string ICalProperty::status_to_string(icalproperty_status s){
- return (string)icalproperty_status_to_string(s);
-}
-icalproperty_status ICalProperty::string_to_status(string str){
- return icalproperty_string_to_status(str);
-}
-
-int ICalProperty::enum_belongs_to_property(icalproperty_kind kind, int e){
- return icalproperty_enum_belongs_to_property(kind, e);
-}
-
-/* ACTION */
-void ICalProperty::set_action(enum icalproperty_action val){
- icalproperty_set_action(imp, val);
-}
-enum icalproperty_action ICalProperty::get_action(){
- return icalproperty_get_action(imp);
-}
-
-/* ATTACH */
-void ICalProperty::set_attach(icalattach *val){
- icalproperty_set_attach(imp, val);
-}
-icalattach * ICalProperty::get_attach(){
- return icalproperty_get_attach(imp);
-}
-
-/* ATTENDEE */
-void ICalProperty::set_attendee(string val){
- icalproperty_set_attendee(imp, val);
-}
-string ICalProperty::get_attendee(){
- return (string)icalproperty_get_attendee(imp);
-}
-
-/* CALSCALE */
-void ICalProperty::set_calscale(string val){
- icalproperty_set_calscale(imp, val);
-}
-string ICalProperty::get_calscale(){
- return (string)icalproperty_get_calscale(imp);
-}
-
-/* CATEGORIES */
-void ICalProperty::set_categories(string val){
- icalproperty_set_categories(imp, val);
-}
-string ICalProperty::get_categories(){
- return (string)icalproperty_get_categories(imp);
-}
-
-/* CLASS */
-void ICalProperty::set_class(enum icalproperty_class val){
- icalproperty_set_class(imp, val);
-}
-enum icalproperty_class ICalProperty::get_class(){
- return (enum icalproperty_class)icalproperty_get_class(imp);
-}
-
-/* COMMENT */
-void ICalProperty::set_comment(string val){
- icalproperty_set_comment(imp, val);
-}
-string ICalProperty::get_comment(){
- return (string)icalproperty_get_comment(imp);
-}
-
-/* COMPLETED */
-void ICalProperty::set_completed(struct icaltimetype val){
- icalproperty_set_completed(imp, val);
-}
-struct icaltimetype ICalProperty::get_completed(){
- return icalproperty_get_completed(imp);
-}
-
-/* CONTACT */
-void ICalProperty::set_contact(string val){
- icalproperty_set_contact(imp, val);
-}
-string ICalProperty::get_contact(){
- return (string)icalproperty_get_contact(imp);
-}
-
-/* CREATED */
-void ICalProperty::set_created(struct icaltimetype val){
- icalproperty_set_created(imp, val);
-}
-struct icaltimetype ICalProperty::get_created(){
- return icalproperty_get_created(imp);
-}
-
-/* DESCRIPTION */
-void ICalProperty::set_description(string val){
- icalproperty_set_description(imp, val);
-}
-string ICalProperty::get_description(){
- return (string)icalproperty_get_description(imp);
-}
-
-/* DTEND */
-void ICalProperty::set_dtend(struct icaltimetype val){
- icalproperty_set_dtend(imp, val);
-}
-struct icaltimetype ICalProperty::get_dtend(){
- return icalproperty_get_dtend(imp);
-}
-
-/* DTSTAMP */
-void ICalProperty::set_dtstamp(struct icaltimetype val){
- icalproperty_set_dtstamp(imp, val);
-}
-struct icaltimetype ICalProperty::get_dtstamp(){
- return icalproperty_get_dtstamp(imp);
-}
-
-/* DTSTART */
-void ICalProperty::set_dtstart(struct icaltimetype val){
- icalproperty_set_dtstart(imp, val);
-}
-struct icaltimetype ICalProperty::get_dtstart(){
- return icalproperty_get_dtstart(imp);
-}
-
-/* DUE */
-void ICalProperty::set_due(struct icaltimetype val){
- icalproperty_set_due(imp, val);
-}
-struct icaltimetype ICalProperty::get_due(){
- return icalproperty_get_due(imp);
-}
-
-/* DURATION */
-void ICalProperty::set_duration(struct icaldurationtype val){
- icalproperty_set_duration(imp, val);
-}
-struct icaldurationtype ICalProperty::get_duration(){
- return icalproperty_get_duration(imp);
-}
-
-/* EXDATE */
-void ICalProperty::set_exdate(struct icaltimetype val){
- icalproperty_set_exdate(imp, val);
-}
-struct icaltimetype ICalProperty::get_exdate(){
- return icalproperty_get_exdate(imp);
-}
-
-/* EXPAND */
-void ICalProperty::set_expand(int val){
- icalproperty_set_expand(imp, val);
-}
-int ICalProperty::get_expand(){
- return icalproperty_get_expand(imp);
-}
-
-/* EXRULE */
-void ICalProperty::set_exrule(struct icalrecurrencetype val){
- icalproperty_set_exrule(imp, val);
-}
-struct icalrecurrencetype ICalProperty::get_exrule(){
- return icalproperty_get_exrule(imp);
-}
-
-/* FREEBUSY */
-void ICalProperty::set_freebusy(struct icalperiodtype val){
- icalproperty_set_freebusy(imp, val);
-}
-struct icalperiodtype ICalProperty::get_freebusy(){
- return icalproperty_get_freebusy(imp);
-}
-
-/* GEO */
-void ICalProperty::set_geo(struct icalgeotype val){
- icalproperty_set_geo(imp, val);
-}
-struct icalgeotype ICalProperty::get_geo(){
- return icalproperty_get_geo(imp);
-}
-
-/* LAST-MODIFIED */
-void ICalProperty::set_lastmodified(struct icaltimetype val){
- icalproperty_set_lastmodified(imp, val);
-}
-struct icaltimetype ICalProperty::get_lastmodified(){
- return icalproperty_get_lastmodified(imp);
-}
-
-/* LOCATION */
-void ICalProperty::set_location(string val){
- icalproperty_set_location(imp, val);
-}
-string ICalProperty::get_location(){
- return (string)icalproperty_get_location(imp);
-}
-
-/* MAXRESULTS */
-void ICalProperty::set_maxresults(int val){
- icalproperty_set_maxresults(imp, val);
-}
-int ICalProperty::get_maxresults(){
- return icalproperty_get_maxresults(imp);
-}
-
-/* MAXRESULTSSIZE */
-void ICalProperty::set_maxresultsize(int val){
- icalproperty_set_maxresultssize(imp, val);
-}
-int ICalProperty::get_maxresultsize(){
- return icalproperty_get_maxresultssize(imp);
-}
-
-/* METHOD */
-void ICalProperty::set_method(enum icalproperty_method val){
- icalproperty_set_method(imp, val);
-}
-enum icalproperty_method ICalProperty::get_method(){
- return icalproperty_get_method(imp);
-}
-
-/* ORGANIZER */
-void ICalProperty::set_organizer(string val){
- icalproperty_set_organizer(imp, val);
-}
-string ICalProperty::get_organizer(){
- return (string)icalproperty_get_organizer(imp);
-}
-
-/* OWNER */
-void ICalProperty::set_owner(string val){
- icalproperty_set_owner(imp, val);
-}
-string ICalProperty::get_owner(){
- return (string)icalproperty_get_owner(imp);
-}
-
-/* PERCENT-COMPLETE */
-void ICalProperty::set_percentcomplete(int val){
- icalproperty_set_percentcomplete(imp, val);
-}
-int ICalProperty::get_percentcomplete(){
- return icalproperty_get_percentcomplete(imp);
-}
-
-/* PRIORITY */
-void ICalProperty::set_priority(int val){
- icalproperty_set_priority(imp, val);
-}
-int ICalProperty::get_priority(){
- return icalproperty_get_priority(imp);
-}
-
-/* PRODID */
-void ICalProperty::set_prodid(string val){
- icalproperty_set_prodid(imp, val);
-}
-string ICalProperty::get_prodid(){
- return (string)icalproperty_get_prodid(imp);
-}
-
-/* QUERY */
-void ICalProperty::set_query(string val){
- icalproperty_set_query(imp, val);
-}
-string ICalProperty::get_query(){
- return (string)icalproperty_get_query(imp);
-}
-
-/* QUERYNAME */
-void ICalProperty::set_queryname(string val){
- icalproperty_set_queryname(imp, val);
-}
-string ICalProperty::get_queryname(){
- return (string)icalproperty_get_queryname(imp);
-}
-
-/* RDATE */
-void ICalProperty::set_rdate(struct icaldatetimeperiodtype val){
- icalproperty_set_rdate(imp, val);
-}
-struct icaldatetimeperiodtype ICalProperty::get_rdate(){
- return icalproperty_get_rdate(imp);
-}
-
-/* RECURRENCE-ID */
-void ICalProperty::set_recurrenceid(struct icaltimetype val){
- icalproperty_set_recurrenceid(imp, val);
-}
-struct icaltimetype ICalProperty::get_recurrenceid(){
- return icalproperty_get_recurrenceid(imp);
-}
-
-/* RELATED-TO */
-void ICalProperty::set_relatedto(string val){
- icalproperty_set_relatedto(imp, val);
-}
-string ICalProperty::get_relatedto(){
- return (string)icalproperty_get_relatedto(imp);
-}
-
-/* RELCALID */
-void ICalProperty::set_relcalid(string val){
- icalproperty_set_relcalid(imp, val);
-}
-string ICalProperty::get_relcalid(){
- return (string)icalproperty_get_relcalid(imp);
-}
-
-/* REPEAT */
-void ICalProperty::set_repeat(int val){
- icalproperty_set_repeat(imp, val);
-}
-int ICalProperty::get_repeat(){
- return icalproperty_get_repeat(imp);
-}
-
-/* REQUEST-STATUS */
-void ICalProperty::set_requeststatus(string val){
- icalreqstattype v;
-
- v = icalreqstattype_from_string((char*)val);
-
- icalproperty_set_requeststatus(imp, v);
-}
-
-string ICalProperty::get_requeststatus(){
- icalreqstattype v;
- v = icalproperty_get_requeststatus(imp);
- return (string)(icalreqstattype_as_string(v));
-}
-
-/* RESOURCES */
-void ICalProperty::set_resources(string val){
- icalproperty_set_resources(imp, val);
-}
-string ICalProperty::get_resources(){
- return (string)icalproperty_get_resources(imp);
-}
-
-/* RRULE */
-void ICalProperty::set_rrule(struct icalrecurrencetype val){
- icalproperty_set_rrule(imp, val);
-}
-struct icalrecurrencetype ICalProperty::get_rrule(){
- return icalproperty_get_rrule(imp);
-}
-
-/* SCOPE */
-void ICalProperty::set_scope(string val){
- icalproperty_set_scope(imp, val);
-}
-string ICalProperty::get_scope(){
- return (string)icalproperty_get_scope(imp);
-}
-
-/* SEQUENCE */
-void ICalProperty::set_sequence(int val){
- icalproperty_set_sequence(imp, val);
-}
-int ICalProperty::get_sequence(){
- return icalproperty_get_sequence(imp);
-}
-
-/* STATUS */
-void ICalProperty::set_status(enum icalproperty_status val){
- icalproperty_set_status(imp, val);
-}
-enum icalproperty_status ICalProperty::get_status(){
- return icalproperty_get_status(imp);
-}
-
-/* SUMMARY */
-void ICalProperty::set_summary(string val){
- icalproperty_set_summary(imp, val);
-}
-string ICalProperty::get_summary(){
- return (string)icalproperty_get_summary(imp);
-}
-
-/* TARGET */
-void ICalProperty::set_target(string val){
- icalproperty_set_target(imp, val);
-}
-string ICalProperty::get_target(){
- return (string)icalproperty_get_target(imp);
-}
-
-/* TRANSP */
-void ICalProperty::set_transp(enum icalproperty_transp val){
- icalproperty_set_transp(imp, val);
-}
-enum icalproperty_transp ICalProperty::get_transp(){
- return icalproperty_get_transp(imp);
-}
-
-/* TRIGGER */
-void ICalProperty::set_trigger(struct icaltriggertype val){
- icalproperty_set_trigger(imp, val);
-}
-struct icaltriggertype ICalProperty::get_trigger(){
- return icalproperty_get_trigger(imp);
-}
-
-/* TZID */
-void ICalProperty::set_tzid(string val){
- icalproperty_set_tzid(imp, val);
-}
-string ICalProperty::get_tzid(){
- return (string)icalproperty_get_tzid(imp);
-}
-
-/* TZNAME */
-void ICalProperty::set_tzname(string val){
- icalproperty_set_tzname(imp, val);
-}
-string ICalProperty::get_tzname(){
- return (string)icalproperty_get_tzname(imp);
-}
-
-/* TZOFFSETFROM */
-void ICalProperty::set_tzoffsetfrom(int val){
- icalproperty_set_tzoffsetfrom(imp, val);
-}
-int ICalProperty::get_tzoffsetfrom(){
- return icalproperty_get_tzoffsetfrom(imp);
-}
-
-/* TZOFFSETTO */
-void ICalProperty::set_tzoffsetto(int val){
- icalproperty_set_tzoffsetto(imp, val);
-}
-int ICalProperty::get_tzoffsetto(){
- return icalproperty_get_tzoffsetto(imp);
-}
-
-/* TZURL */
-void ICalProperty::set_tzurl(string val){
- icalproperty_set_tzurl(imp, val);
-}
-string ICalProperty::get_tzurl(){
- return (string)icalproperty_get_tzurl(imp);
-}
-
-/* UID */
-void ICalProperty::set_uid(string val){
- icalproperty_set_uid(imp, val);
-}
-string ICalProperty::get_uid(){
- return (string)icalproperty_get_uid(imp);
-}
-
-/* URL */
-void ICalProperty::set_url(string val){
- icalproperty_set_url(imp, val);
-}
-string ICalProperty::get_url(){
- return (string)icalproperty_get_url(imp);
-}
-
-/* VERSION */
-void ICalProperty::set_version(string val){
- icalproperty_set_version(imp, val);
-}
-string ICalProperty::get_version(){
- return (string)icalproperty_get_version(imp);
-}
-
-/* X */
-void ICalProperty::set_x(string val){
- icalproperty_set_x(imp, val);
-}
-string ICalProperty::get_x(){
- return (string)icalproperty_get_x(imp);
-}
-
-/* X-LIC-CLUSTERCOUNT */
-void ICalProperty::set_xlicclustercount(string val){
- icalproperty_set_xlicclustercount(imp, val);
-}
-string ICalProperty::get_xlicclustercount(){
- return (string)icalproperty_get_xlicclustercount(imp);
-}
-
-/* X-LIC-ERROR */
-void ICalProperty::set_xlicerror(string val){
- icalproperty_set_xlicerror(imp, val);
-}
-string ICalProperty::get_xlicerror(){
- return (string)icalproperty_get_xlicerror(imp);
-}
-
-/* X-LIC-MIMECHARSET */
-void ICalProperty::set_xlicmimecharset(string val){
- icalproperty_set_xlicmimecharset(imp, val);
-}
-string ICalProperty::get_xlicmimecharset(){
- return (string)icalproperty_get_xlicmimecharset(imp);
-}
-
-/* X-LIC-MIMECID */
-void ICalProperty::set_xlicmimecid(string val){
- icalproperty_set_xlicmimecid(imp, val);
-}
-string ICalProperty::get_xlicmimecid(){
- return (string)icalproperty_get_xlicmimecid(imp);
-}
-
-/* X-LIC-MIMECONTENTTYPE */
-void ICalProperty::set_xlicmimecontenttype(string val){
- icalproperty_set_xlicmimecontenttype(imp, val);
-}
-string ICalProperty::get_xlicmimecontenttype(){
- return (string)icalproperty_get_xlicmimecontenttype(imp);
-}
-
-/* X-LIC-MIMEENCODING */
-void ICalProperty::set_xlicmimeencoding(string val){
- icalproperty_set_xlicmimeencoding(imp, val);
-}
-string ICalProperty::get_xlicmimeencoding(){
- return (string)icalproperty_get_xlicmimeencoding(imp);
-}
-
-/* X-LIC-MIMEFILENAME */
-void ICalProperty::set_xlicmimefilename(string val){
- icalproperty_set_xlicmimefilename(imp, val);
-}
-string ICalProperty::get_xlicmimefilename(){
- return (string)icalproperty_get_xlicmimefilename(imp);
-}
-
-/* X-LIC-MIMEOPTINFO */
-void ICalProperty::set_xlicmimeoptinfo(string val){
- icalproperty_set_xlicmimeoptinfo(imp, val);
-}
-string ICalProperty::get_xlicmimeoptinfo(){
- return (string)icalproperty_get_xlicmimeoptinfo(imp);
-}
diff --git a/libical/src/libical/icalproperty_cxx.h b/libical/src/libical/icalproperty_cxx.h
deleted file mode 100644
index 27b0fd1a65..0000000000
--- a/libical/src/libical/icalproperty_cxx.h
+++ /dev/null
@@ -1,365 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icalproperty_cxx.h
- * @author fnguyen (12/10/01)
- * @brief Definition of C++ Wrapper for icalproperty.c
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-#ifndef ICALPROPERTY_CXX_H
-#define ICALPROPERTY_CXX_H
-
-#include "ical.h"
-#include "icptrholder.h"
-
-typedef char* string; // Will use the string library from STL
-
-class ICalParameter;
-class ICalValue;
-
-class ICalProperty {
-public:
- ICalProperty();
- ICalProperty(const ICalProperty&) throw(icalerrorenum);
- ICalProperty& operator=(const ICalProperty&) throw(icalerrorenum);
- ~ICalProperty();
-
- ICalProperty(icalproperty* v);
- ICalProperty(string str);
- ICalProperty(icalproperty_kind kind);
- ICalProperty(icalproperty_kind kind, string str);
-
- operator icalproperty*() {return imp;}
- int operator==(ICalProperty& rhs);
-
- void detach() {
- imp = NULL;
- }
-
-public:
- string as_ical_string();
- icalproperty_kind isa();
- int isa_property(void* property);
-
- void add_parameter(ICalParameter& parameter);
- void set_parameter(ICalParameter& parameter);
- void set_parameter_from_string(string name, string val);
- string get_parameter_as_string(string name);
- void remove_parameter(icalparameter_kind kind);
- int count_parameters();
-
- /** Iterate through the parameters */
- ICalParameter* get_first_parameter(icalparameter_kind kind);
- ICalParameter* get_next_parameter(icalparameter_kind kind);
-
- /** Access the value of the property */
- void set_value(const ICalValue& val);
- void set_value_from_string(string val, string kind);
-
- ICalValue* get_value();
- string get_value_as_string();
-
- /** Return the name of the property -- the type name converted
- * to a string, or the value of get_x_name if the type is X
- * property
- */
- string get_name();
-
-public:
- /* Deal with X properties */
- static void set_x_name(ICalProperty &prop, string name);
- static string get_x_name(ICalProperty &prop);
-
- static icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value val);
-
- /* Convert kinds to string and get default value type */
- static icalvalue_kind kind_to_value_kind(icalproperty_kind kind);
- static icalproperty_kind value_kind_to_kind(icalvalue_kind kind);
- static string kind_to_string(icalproperty_kind kind);
- static icalproperty_kind string_to_kind(string str);
-
- static icalproperty_method string_to_method(string str);
- static string method_to_string(icalproperty_method method);
-
- static string enum_to_string(int e);
- static int string_to_enum(string str);
-
- static string status_to_string(icalproperty_status);
- static icalproperty_status string_to_status(string str);
-
- static int enum_belongs_to_property(icalproperty_kind kind, int e);
-
-public:
- /* ACTION */
- void set_action(enum icalproperty_action v);
- enum icalproperty_action get_action();
-
- /* ATTACH */
- void set_attach(icalattach *v);
- icalattach *get_attach();
-
- /* ATTENDEE */
- void set_attendee(string val);
- string get_attendee();
-
- /* CALSCALE */
- void set_calscale(string val);
- string get_calscale();
-
- /* CATEGORIES */
- void set_categories(string val);
- string get_categories();
-
- /* CLASS */
- void set_class(enum icalproperty_class val);
- enum icalproperty_class get_class();
-
- /* COMMENT */
- void set_comment(string val);
- string get_comment();
-
- /* COMPLETED */
- void set_completed(struct icaltimetype val);
- struct icaltimetype get_completed();
-
- /* CONTACT */
- void set_contact(string val);
- string get_contact();
-
- /* CREATED */
- void set_created(struct icaltimetype val);
- struct icaltimetype get_created();
-
- /* DESCRIPTION */
- void set_description(string val);
- string get_description();
-
- /* DTEND */
- void set_dtend(struct icaltimetype val);
- struct icaltimetype get_dtend();
-
- /* DTSTAMP */
- void set_dtstamp(struct icaltimetype val);
- struct icaltimetype get_dtstamp();
-
- /* DTSTART */
- void set_dtstart(struct icaltimetype val);
- struct icaltimetype get_dtstart();
-
- /* DUE */
- void set_due(struct icaltimetype val);
- struct icaltimetype get_due();
-
- /* DURATION */
- void set_duration(struct icaldurationtype val);
- struct icaldurationtype get_duration();
-
- /* EXDATE */
- void set_exdate(struct icaltimetype val);
- struct icaltimetype get_exdate();
-
- /* EXPAND */
- void set_expand(int val);
- int get_expand();
-
- /* EXRULE */
- void set_exrule(struct icalrecurrencetype val);
- struct icalrecurrencetype get_exrule();
-
- /* FREEBUSY */
- void set_freebusy(struct icalperiodtype val);
- struct icalperiodtype get_freebusy();
-
- /* GEO */
- void set_geo(struct icalgeotype val);
- struct icalgeotype get_geo();
-
- /* GRANT */
- void set_grant(string val);
- string get_grant();
-
- /* LAST-MODIFIED */
- void set_lastmodified(struct icaltimetype val);
- struct icaltimetype get_lastmodified();
-
- /* LOCATION */
- void set_location(string val);
- string get_location();
-
- /* MAXRESULTS */
- void set_maxresults(int val);
- int get_maxresults();
-
- /* MAXRESULTSSIZE */
- void set_maxresultsize(int val);
- int get_maxresultsize();
-
- /* METHOD */
- void set_method(enum icalproperty_method val);
- enum icalproperty_method get_method();
-
- /* OWNER */
- void set_owner(string val);
- string get_owner();
-
- /* ORGANIZER */
- void set_organizer(string val);
- string get_organizer();
-
- /* PERCENT-COMPLETE */
- void set_percentcomplete(int val);
- int get_percentcomplete();
-
- /* PRIORITY */
- void set_priority(int val);
- int get_priority();
-
- /* PRODID */
- void set_prodid(string val);
- string get_prodid();
-
- /* QUERY */
- void set_query(string val);
- string get_query();
-
- /* QUERYNAME */
- void set_queryname(string val);
- string get_queryname();
-
- /* RDATE */
- void set_rdate(struct icaldatetimeperiodtype val);
- struct icaldatetimeperiodtype get_rdate();
-
- /* RECURRENCE-ID */
- void set_recurrenceid(struct icaltimetype val);
- struct icaltimetype get_recurrenceid();
-
- /* RELATED-TO */
- void set_relatedto(string val);
- string get_relatedto();
-
- /* RELCALID */
- void set_relcalid(string val);
- string get_relcalid();
-
- /* REPEAT */
- void set_repeat(int val);
- int get_repeat();
-
- /* REQUEST-STATUS */
- void set_requeststatus(string val);
- string get_requeststatus();
-
- /* RESOURCES */
- void set_resources(string val);
- string get_resources();
-
- /* RRULE */
- void set_rrule(struct icalrecurrencetype val);
- struct icalrecurrencetype get_rrule();
-
- /* SCOPE */
- void set_scope(string val);
- string get_scope();
-
- /* SEQUENCE */
- void set_sequence(int val);
- int get_sequence();
-
- /* STATUS */
- void set_status(enum icalproperty_status val);
- enum icalproperty_status get_status();
-
- /* SUMMARY */
- void set_summary(string val);
- string get_summary();
-
- /* TARGET */
- void set_target(string val);
- string get_target();
-
- /* TRANSP */
- void set_transp(enum icalproperty_transp val);
- enum icalproperty_transp get_transp();
-
- /* TRIGGER */
- void set_trigger(struct icaltriggertype val);
- struct icaltriggertype get_trigger();
-
- /* TZID */
- void set_tzid(string val);
- string get_tzid();
-
- /* TZNAME */
- void set_tzname(string val);
- string get_tzname();
-
- /* TZOFFSETFROM */
- void set_tzoffsetfrom(int val);
- int get_tzoffsetfrom();
-
- /* TZOFFSETTO */
- void set_tzoffsetto(int val);
- int get_tzoffsetto();
-
- /* TZURL */
- void set_tzurl(string val);
- string get_tzurl();
-
- /* UID */
- void set_uid(string val);
- string get_uid();
-
- /* URL */
- void set_url(string val);
- string get_url();
-
- /* VERSION */
- void set_version(string val);
- string get_version();
-
- /* X */
- void set_x(string val);
- string get_x();
-
- /* X-LIC-CLUSTERCOUNT */
- void set_xlicclustercount(string val);
- string get_xlicclustercount();
-
- /* X-LIC-ERROR */
- void set_xlicerror(string val);
- string get_xlicerror();
-
- /* X-LIC-MIMECHARSET */
- void set_xlicmimecharset(string val);
- string get_xlicmimecharset();
-
- /* X-LIC-MIMECID */
- void set_xlicmimecid(string val);
- string get_xlicmimecid();
-
- /* X-LIC-MIMECONTENTTYPE */
- void set_xlicmimecontenttype(string val);
- string get_xlicmimecontenttype();
-
- /* X-LIC-MIMEENCODING */
- void set_xlicmimeencoding(string val);
- string get_xlicmimeencoding();
-
- /* X-LIC-MIMEFILENAME */
- void set_xlicmimefilename(string val);
- string get_xlicmimefilename();
-
- /* X-LIC-MIMEOPTINFO */
- void set_xlicmimeoptinfo(string val);
- string get_xlicmimeoptinfo();
-
-private:
- icalproperty* imp; /**< The actual C based icalproperty */
-};
-
-typedef ICPointerHolder<ICalProperty> ICalPropertyTmpPtr; /* see icptrholder.h for comments */
-
-#endif /* ICalProperty_H */
diff --git a/libical/src/libical/icalrecur.c b/libical/src/libical/icalrecur.c
deleted file mode 100644
index 5c687fc6f3..0000000000
--- a/libical/src/libical/icalrecur.c
+++ /dev/null
@@ -1,2458 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalrecur.c
- CREATOR: eric 16 May 2000
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-*/
-
-/**
- @file icalrecur.c
- @brief Implementation of routines for dealing with recurring time
-
- How this code works:
-
- Processing starts when the caller generates a new recurrence
- iterator via icalrecur_iterator_new(). This routine copies the
- recurrence rule into the iterator and extracts things like start and
- end dates. Then, it checks if the rule is legal, using some logic
- from RFC2445 and some logic that probably should be in RFC2445.
-
- Then, icalrecur_iterator_new() re-writes some of the BY*
- arrays. This involves ( via a call to setup_defaults() ) :
-
- 1) For BY rule parts with no data ( ie BYSECOND was not specified )
- copy the corresponding time part from DTSTART into the BY array. (
- So impl->by_ptrs[BY_SECOND] will then have one element if is
- originally had none ) This only happens if the BY* rule part data
- would expand the number of occurrences in the occurrence set. This
- lets the code ignore DTSTART later on and still use it to get the
- time parts that were not specified in any other way.
-
- 2) For the by rule part that are not the same interval as the
- frequency -- for HOURLY anything but BYHOUR, for instance -- copy the
- first data element from the rule part into the first occurrence. For
- example, for "INTERVAL=MONTHLY and BYHOUR=10,30", initialize the
- first time to be returned to have an hour of 10.
-
- Finally, for INTERVAL=YEARLY, the routine expands the rule to get
- all of the days specified in the rule. The code will do this for
- each new year, and this is the first expansion. This is a special
- case for the yearly interval; no other frequency gets expanded this
- way. The yearly interval is the most complex, so some special
- processing is required.
-
- After creating a new iterator, the caller will make successive calls
- to icalrecur_iterator_next() to get the next time specified by the
- rule. The main part of this routine is a switch on the frequency of
- the rule. Each different frequency is handled by a different
- routine.
-
- For example, next_hour handles the case of INTERVAL=HOURLY, and it
- is called by other routines to get the next hour. First, the routine
- tries to get the next minute part of a time with a call to
- next_minute(). If next_minute() returns 1, it has reached the end of
- its data, usually the last element of the BYMINUTE array. Then, if
- there is data in the BYHOUR array, the routine changes the hour to
- the next one in the array. If INTERVAL=HOURLY, the routine advances
- the hour by the interval.
-
- If the routine used the last hour in the BYHOUR array, and the
- INTERVAL=HOURLY, then the routine calls increment_monthday() to set
- the next month day. The increment_* routines may call higher routine
- to increment the month or year also.
-
- The code for INTERVAL=DAILY is handled by next_day(). First, the
- routine tries to get the next hour part of a time with a call to
- next_hour. If next_hour() returns 1, it has reached the end of its
- data, usually the last element of the BYHOUR array. This means that
- next_day() should increment the time to the next day. If FREQUENCY==DAILY,
- the routine increments the day by the interval; otherwise, it
- increments the day by 1.
-
- Next_day() differs from next_hour because it does not use the BYDAY
- array to select an appropriate day. Instead, it returns every day (
- incrementing by 1 if the frequency is not DAILY with INTERVAL!=1)
- Any days that are not specified in an non-empty BYDAY array are
- filtered out later.
-
- Generally, the flow of these routine is for a next_* call a next_*
- routine of a lower interval ( next_day calls next_hour) and then to
- possibly call an increment_* routine of an equal or higher
- interval. ( next_day calls increment_monthday() )
-
- When the call to the original next_* routine returns,
- icalrecur_iterator_next() will check the returned data against other
- BYrule parts to determine if is should be excluded by calling
- check_contracting_rules. Generally, a contracting rule is any with a
- larger time span than the interval. For instance, if
- INTERVAL=DAILY, BYMONTH is a contracting rule part.
-
- Check_contracting_rules() uses icalrecur_check_rulepart() to do its
- work. icalrecur_check_rulepart() uses expand_map[] to determine if a rule
- is contracting, and if it is, and if the BY rule part has some data,
- then the routine checks if the value of a component of the time is
- part of the byrule part. For instance, for "INTERVAL=DAILY;
- BYMONTH=6,10", icalrecur_check_rulepart() would check that the time value
- given to it has a month of either 6 or 10.
-
- Finally, icalrecur_iterator_next() does a few other checks on the
- time value, and if it passes, it returns the time.
-
- A note about the end_of_data flag. The flag indicates that the
- routine is at the end of its data -- the last BY rule if the routine
- is using by rules, or the last day of the week/month/year/etc if
- not.
-
- This flag is usually set early in a next_* routine and returned in
- the end. The way it is used allows the next_* routine to set the
- last time back to the first element in a BYxx rule, and then signal
- to the higer level routine to increment the next higher level. For
- instance. WITH FREQ=MONTHLY;BYDAY=TU,FR, After next_weekday_by_month
- runs though both TU and FR, it sets the week day back to TU and sets
- end_of_data to 1x. This signals next_month to increment the month.
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifndef HAVE_INTPTR_T
-#ifdef WIN32
-typedef long intptr_t;
-#endif
-#endif
-
-#include "icalrecur.h"
-
-#include "icalerror.h"
-#include "icalmemory.h"
-
-#include <stdlib.h> /* for malloc */
-#include <errno.h> /* for errno */
-#include <string.h> /* for strdup and strchr*/
-#include <assert.h>
-#include <stddef.h> /* For offsetof() macro */
-
-#include "pvl.h"
-
-/** This is the last year we will go up to, since 32-bit time_t values
- only go up to the start of 2038. */
-#define MAX_TIME_T_YEAR 2037
-
-#define TEMP_MAX 1024
-
-
-#define BYDAYIDX impl->by_indices[BY_DAY]
-#define BYDAYPTR impl->by_ptrs[BY_DAY]
-
-#define BYMONIDX impl->by_indices[BY_MONTH]
-#define BYMONPTR impl->by_ptrs[BY_MONTH]
-
-#define BYMDIDX impl->by_indices[BY_MONTH_DAY]
-#define BYMDPTR impl->by_ptrs[BY_MONTH_DAY]
-
-#define BYWEEKIDX impl->by_indices[BY_WEEK_NO]
-#define BYWEEKPTR impl->by_ptrs[BY_WEEK_NO]
-
-const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind);
-icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str);
-
-const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind);
-icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str);
-
-
-/*********************** Rule parsing routines ************************/
-
-struct icalrecur_parser {
- const char* rule;
- char* copy;
- char* this_clause;
- char* next_clause;
-
- struct icalrecurrencetype rt;
-};
-
-const char* icalrecur_first_clause(struct icalrecur_parser *parser)
-{
- char *idx;
- parser->this_clause = parser->copy;
-
- idx = strchr(parser->this_clause,';');
-
- if (idx == 0){
- parser->next_clause = 0;
- return 0;
- }
-
- *idx = 0;
- idx++;
- parser->next_clause = idx;
-
- return parser->this_clause;
-
-}
-
-const char* icalrecur_next_clause(struct icalrecur_parser *parser)
-{
- char* idx;
-
- parser->this_clause = parser->next_clause;
-
- if(parser->this_clause == 0){
- return 0;
- }
-
- idx = strchr(parser->this_clause,';');
-
- if (idx == 0){
- parser->next_clause = 0;
- } else {
-
- *idx = 0;
- idx++;
- parser->next_clause = idx;
- }
-
- return parser->this_clause;
-
-}
-
-void icalrecur_clause_name_and_value(struct icalrecur_parser *parser,
- char** name, char** value)
-{
- char *idx;
-
- *name = parser->this_clause;
-
- idx = strchr(parser->this_clause,'=');
-
- if (idx == 0){
- *name = 0;
- *value = 0;
- return;
- }
-
- *idx = 0;
- idx++;
- *value = idx;
-}
-
-void icalrecur_add_byrules(struct icalrecur_parser *parser, short *array,
- int size, char* vals)
-{
- char *t, *n;
- int i=0;
- int sign = 1;
- int v;
-
- n = vals;
-
- while(n != 0){
-
- if(i == size){
- return;
- }
-
- t = n;
-
- n = strchr(t,',');
-
- if(n != 0){
- *n = 0;
- n++;
- }
-
- /* Get optional sign. HACK. sign is not allowed for all BYxxx
- rule parts */
- if( *t == '-'){
- sign = -1;
- t++;
- } else if (*t == '+'){
- sign = 1;
- t++;
- } else {
- sign = 1;
- }
-
- v = atoi(t) * sign ;
-
-
- array[i++] = (short)v;
- array[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- }
-
-}
-
-/*
- * Days in the BYDAY rule are expected by the code to be sorted, and while
- * this may be the common case, the RFC doesn't actually mandate it. This
- * function sorts the days taking into account the first day of week.
- */
-static void
-sort_bydayrules(struct icalrecur_parser *parser)
-{
- short *array;
- int week_start, one, two, i, j;
-
- array = parser->rt.by_day;
- week_start = parser->rt.week_start;
-
- for (i=0;
- i<ICAL_BY_DAY_SIZE && array[i] != ICAL_RECURRENCE_ARRAY_MAX;
- i++) {
- for (j=0; j<i; j++) {
- one = icalrecurrencetype_day_day_of_week(array[j]) - week_start;
- if (one < 0) one += 7;
- two = icalrecurrencetype_day_day_of_week(array[i]) - week_start;
- if (two < 0) two += 7;
-
- if (one > two) {
- short tmp = array[j];
- array[j] = array[i];
- array[i] = tmp;
- }
- }
- }
-}
-
-void icalrecur_add_bydayrules(struct icalrecur_parser *parser, const char* vals)
-{
-
- char *t, *n;
- int i=0;
- int sign = 1;
- int weekno = 0;
- icalrecurrencetype_weekday wd;
- short *array = parser->rt.by_day;
- char* end;
- char* vals_copy;
-
- vals_copy = icalmemory_strdup(vals);
-
- end = (char*)vals_copy+strlen(vals_copy);
- n = vals_copy;
-
- while(n != 0){
-
-
- t = n;
-
- n = strchr(t,',');
-
- if(n != 0){
- *n = 0;
- n++;
- }
-
- /* Get optional sign. */
- if( *t == '-'){
- sign = -1;
- t++;
- } else if (*t == '+'){
- sign = 1;
- t++;
- } else {
- sign = 1;
- }
-
- /* Get Optional weekno */
- weekno = strtol(t,&t,10);
-
- /* Outlook/Exchange generate "BYDAY=MO, FR" and "BYDAY=2 TH".
- * Cope with that.
- */
- if (*t == ' ')
- t++;
-
- wd = icalrecur_string_to_weekday(t);
-
- array[i++] = (short)(sign* (wd + 8*weekno));
- array[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- }
-
- free(vals_copy);
-
- sort_bydayrules(parser);
-}
-
-
-struct icalrecurrencetype icalrecurrencetype_from_string(const char* str)
-{
- struct icalrecur_parser parser;
-
- memset(&parser,0,sizeof(parser));
- icalrecurrencetype_clear(&parser.rt);
-
- icalerror_check_arg_re(str!=0,"str",parser.rt);
-
-
- /* Set up the parser struct */
- parser.rule = str;
- parser.copy = icalmemory_strdup(parser.rule);
- parser.this_clause = parser.copy;
-
- if(parser.copy == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return parser.rt;
- }
-
- /* Loop through all of the clauses */
- for(icalrecur_first_clause(&parser);
- parser.this_clause != 0;
- icalrecur_next_clause(&parser))
- {
- char *name, *value;
- icalrecur_clause_name_and_value(&parser,&name,&value);
-
- if(name == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- icalrecurrencetype_clear(&parser.rt);
- free(parser.copy);
- return parser.rt;
- }
-
- if (strcmp(name,"FREQ") == 0){
- parser.rt.freq = icalrecur_string_to_freq(value);
- } else if (strcmp(name,"COUNT") == 0){
- parser.rt.count = atoi(value);
- } else if (strcmp(name,"UNTIL") == 0){
- parser.rt.until = icaltime_from_string(value);
- } else if (strcmp(name,"INTERVAL") == 0){
- parser.rt.interval = (short)atoi(value);
- } else if (strcmp(name,"WKST") == 0){
- parser.rt.week_start = icalrecur_string_to_weekday(value);
- sort_bydayrules(&parser);
- } else if (strcmp(name,"BYSECOND") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_second,
- ICAL_BY_SECOND_SIZE,value);
- } else if (strcmp(name,"BYMINUTE") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_minute,
- ICAL_BY_MINUTE_SIZE,value);
- } else if (strcmp(name,"BYHOUR") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_hour,
- ICAL_BY_HOUR_SIZE,value);
- } else if (strcmp(name,"BYDAY") == 0){
- icalrecur_add_bydayrules(&parser,value);
- } else if (strcmp(name,"BYMONTHDAY") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_month_day,
- ICAL_BY_MONTHDAY_SIZE,value);
- } else if (strcmp(name,"BYYEARDAY") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_year_day,
- ICAL_BY_YEARDAY_SIZE,value);
- } else if (strcmp(name,"BYWEEKNO") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_week_no,
- ICAL_BY_WEEKNO_SIZE,value);
- } else if (strcmp(name,"BYMONTH") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_month,
- ICAL_BY_MONTH_SIZE,value);
- } else if (strcmp(name,"BYSETPOS") == 0){
- icalrecur_add_byrules(&parser,parser.rt.by_set_pos,
- ICAL_BY_SETPOS_SIZE,value);
- } else {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- icalrecurrencetype_clear(&parser.rt);
- free(parser.copy);
- return parser.rt;
- }
-
- }
-
- free(parser.copy);
-
- return parser.rt;
-
-}
-
-static struct { char* str;size_t offset; int limit; } recurmap[] =
-{
- {";BYSECOND=",offsetof(struct icalrecurrencetype,by_second),60},
- {";BYMINUTE=",offsetof(struct icalrecurrencetype,by_minute),60},
- {";BYHOUR=",offsetof(struct icalrecurrencetype,by_hour),24},
- {";BYDAY=",offsetof(struct icalrecurrencetype,by_day),7},
- {";BYMONTHDAY=",offsetof(struct icalrecurrencetype,by_month_day),31},
- {";BYYEARDAY=",offsetof(struct icalrecurrencetype,by_year_day),366},
- {";BYWEEKNO=",offsetof(struct icalrecurrencetype,by_week_no),52},
- {";BYMONTH=",offsetof(struct icalrecurrencetype,by_month),12},
- {";BYSETPOS=",offsetof(struct icalrecurrencetype,by_set_pos),366},
- {0,0,0},
-};
-
-/* A private routine in icalvalue.c */
-void print_date_to_string(char* str, struct icaltimetype *data);
-void print_datetime_to_string(char* str, struct icaltimetype *data);
-
-char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur)
-{
- char* str;
- char *str_p;
- size_t buf_sz = 200;
- char temp[20];
- int i,j;
-
- if(recur->freq == ICAL_NO_RECURRENCE){
- return 0;
- }
-
- str = (char*)icalmemory_tmp_buffer(buf_sz);
- str_p = str;
-
- icalmemory_append_string(&str,&str_p,&buf_sz,"FREQ=");
- icalmemory_append_string(&str,&str_p,&buf_sz,
- icalrecur_freq_to_string(recur->freq));
-
- if(recur->until.year != 0){
-
- temp[0] = 0;
- if (recur->until.is_date)
- print_date_to_string(temp,&(recur->until));
- else
- print_datetime_to_string(temp,&(recur->until));
-
- icalmemory_append_string(&str,&str_p,&buf_sz,";UNTIL=");
- icalmemory_append_string(&str,&str_p,&buf_sz, temp);
- }
-
- if(recur->count != 0){
- sprintf(temp,"%d",recur->count);
- icalmemory_append_string(&str,&str_p,&buf_sz,";COUNT=");
- icalmemory_append_string(&str,&str_p,&buf_sz, temp);
- }
-
- if(recur->interval != 0){
- sprintf(temp,"%d",recur->interval);
- icalmemory_append_string(&str,&str_p,&buf_sz,";INTERVAL=");
- icalmemory_append_string(&str,&str_p,&buf_sz, temp);
- }
-
- for(j =0; recurmap[j].str != 0; j++){
- short* array = (short*)(recurmap[j].offset+ (size_t)recur);
- int limit = recurmap[j].limit;
-
- /* Skip unused arrays */
- if( array[0] != ICAL_RECURRENCE_ARRAY_MAX ) {
-
- icalmemory_append_string(&str,&str_p,&buf_sz,recurmap[j].str);
-
- for(i=0;
- i< limit && array[i] != ICAL_RECURRENCE_ARRAY_MAX;
- i++){
- if (j == 3) { /* BYDAY */
- const char *daystr = icalrecur_weekday_to_string(
- icalrecurrencetype_day_day_of_week(array[i]));
- int pos;
-
- pos = icalrecurrencetype_day_position(array[i]);
-
- if (pos == 0)
- icalmemory_append_string(&str,&str_p,&buf_sz,daystr);
- else {
- sprintf(temp,"%d%s",pos,daystr);
- icalmemory_append_string(&str,&str_p,&buf_sz,temp);
- }
-
- } else {
- sprintf(temp,"%d",array[i]);
- icalmemory_append_string(&str,&str_p,&buf_sz, temp);
- }
-
- if( (i+1)<limit &&array[i+1]
- != ICAL_RECURRENCE_ARRAY_MAX){
- icalmemory_append_char(&str,&str_p,&buf_sz,',');
- }
- }
- }
- }
-
- /* If week start is not monday (the default per RFC2445) append WKST */
- if (recur->week_start != ICAL_MONDAY_WEEKDAY) {
- sprintf(temp,"%s", icalrecur_weekday_to_string(recur->week_start));
- icalmemory_append_string(&str,&str_p,&buf_sz,";WKST=");
- icalmemory_append_string(&str,&str_p,&buf_sz, temp);
- }
-
- return str;
-}
-
-
-/************************* occurrence iteration routiens ******************/
-
-enum byrule {
- NO_CONTRACTION = -1,
- BY_SECOND = 0,
- BY_MINUTE = 1,
- BY_HOUR = 2,
- BY_DAY = 3,
- BY_MONTH_DAY = 4,
- BY_YEAR_DAY = 5,
- BY_WEEK_NO = 6,
- BY_MONTH = 7,
- BY_SET_POS
-};
-
-
-
-struct icalrecur_iterator_impl {
-
- struct icaltimetype dtstart; /* Hack. Make into time_t */
- struct icaltimetype last; /* last time return from _iterator_next*/
- int occurrence_no; /* number of step made on t iterator */
- struct icalrecurrencetype rule;
-
- short days[366];
- short days_index;
-
- enum byrule byrule;
- short by_indices[9];
- short orig_data[9]; /**< 1 if there was data in the byrule */
-
-
- short *by_ptrs[9]; /**< Pointers into the by_* array elements of the rule */
-
-};
-
-static void increment_year(icalrecur_iterator* impl, int inc);
-
-int icalrecur_iterator_sizeof_byarray(short* byarray)
-{
- int array_itr;
-
- for(array_itr = 0;
- byarray[array_itr] != ICAL_RECURRENCE_ARRAY_MAX;
- array_itr++){
- }
-
- return array_itr;
-}
-
-enum expand_table {
- UNKNOWN = 0,
- CONTRACT = 1,
- EXPAND =2,
- ILLEGAL=3
-};
-
-/**
- * The split map indicates, for a particular interval, wether a BY_*
- * rule part expands the number of instances in the occcurrence set or
- * contracts it. 1=> contract, 2=>expand, and 3 means the pairing is
- * not allowed.
- */
-
-struct expand_split_map_struct
-{
- icalrecurrencetype_frequency frequency;
-
- /* Elements of the 'map' array correspond to the BYxxx rules:
- Second,Minute,Hour,Day,Month Day,Year Day,Week No,Month*/
-
- short map[8];
-};
-
-static struct expand_split_map_struct expand_map[] =
-{
- {ICAL_SECONDLY_RECURRENCE,{1,1,1,1,1,1,1,1}},
- {ICAL_MINUTELY_RECURRENCE,{2,1,1,1,1,1,1,1}},
- {ICAL_HOURLY_RECURRENCE, {2,2,1,1,1,1,1,1}},
- {ICAL_DAILY_RECURRENCE, {2,2,2,1,1,1,1,1}},
- {ICAL_WEEKLY_RECURRENCE, {2,2,2,2,3,3,1,1}},
- {ICAL_MONTHLY_RECURRENCE, {2,2,2,2,2,3,3,1}},
- {ICAL_YEARLY_RECURRENCE, {2,2,2,2,2,2,2,2}},
- {ICAL_NO_RECURRENCE, {0,0,0,0,0,0,0,0}}
-
-};
-
-
-
-/** Check that the rule has only the two given interday byrule parts. */
-static
-int icalrecur_two_byrule(icalrecur_iterator* impl,
- enum byrule one,enum byrule two)
-{
- short test_array[9];
- enum byrule itr;
- int passes = 0;
-
- memset(test_array,0,sizeof(test_array));
-
- test_array[one] = 1;
- test_array[two] = 1;
-
- for(itr = BY_DAY; itr != BY_SET_POS; itr++){
-
- if( (test_array[itr] == 0 &&
- impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX
- ) ||
- (test_array[itr] == 1 &&
- impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX
- )
- ) {
- /* test failed */
- passes = 0;
- }
- }
-
- return passes;
-
-}
-
-/** Check that the rule has only the one given interdat byrule parts. */
-static int icalrecur_one_byrule(icalrecur_iterator* impl,enum byrule one)
-{
- int passes = 1;
- enum byrule itr;
-
- for(itr = BY_DAY; itr != BY_SET_POS; itr++){
-
- if ((itr==one && impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX) ||
- (itr!=one && impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX)) {
- passes = 0;
- }
- }
-
- return passes;
-}
-
-static int count_byrules(icalrecur_iterator* impl)
-{
- int count = 0;
- enum byrule itr;
-
- for(itr = BY_DAY; itr <= BY_SET_POS; itr++){
- if(impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX){
- count++;
- }
- }
-
- return count;
-}
-
-
-static void setup_defaults(icalrecur_iterator* impl,
- enum byrule byrule, icalrecurrencetype_frequency req,
- int deftime, int *timepart)
-{
-
- icalrecurrencetype_frequency freq;
- freq = impl->rule.freq;
-
- /* Re-write the BY rule arrays with data from the DTSTART time so
- we don't have to explicitly deal with DTSTART */
-
- if(impl->by_ptrs[byrule][0] == ICAL_RECURRENCE_ARRAY_MAX &&
- expand_map[freq].map[byrule] != CONTRACT){
- impl->by_ptrs[byrule][0] = (short)deftime;
- }
-
- /* Initialize the first occurence */
- if( freq != req && expand_map[freq].map[byrule] != CONTRACT){
- *timepart = impl->by_ptrs[byrule][0];
- }
-
-
-}
-
-static int has_by_data(icalrecur_iterator* impl, enum byrule byrule){
-
- return (impl->orig_data[byrule] == 1);
-}
-
-
-static int expand_year_days(icalrecur_iterator* impl, int year);
-
-
-icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule,
- struct icaltimetype dtstart)
-{
- icalrecur_iterator* impl;
- icalrecurrencetype_frequency freq;
-
- if ( ( impl = (icalrecur_iterator*)
- malloc(sizeof(icalrecur_iterator))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(impl,0,sizeof(icalrecur_iterator));
-
- impl->rule = rule;
- impl->last = dtstart;
- impl->dtstart = dtstart;
- impl->days_index =0;
- impl->occurrence_no = 0;
- freq = impl->rule.freq;
-
- /* Set up convienience pointers to make the code simpler. Allows
- us to iterate through all of the BY* arrays in the rule. */
-
- impl->by_ptrs[BY_MONTH]=impl->rule.by_month;
- impl->by_ptrs[BY_WEEK_NO]=impl->rule.by_week_no;
- impl->by_ptrs[BY_YEAR_DAY]=impl->rule.by_year_day;
- impl->by_ptrs[BY_MONTH_DAY]=impl->rule.by_month_day;
- impl->by_ptrs[BY_DAY]=impl->rule.by_day;
- impl->by_ptrs[BY_HOUR]=impl->rule.by_hour;
- impl->by_ptrs[BY_MINUTE]=impl->rule.by_minute;
- impl->by_ptrs[BY_SECOND]=impl->rule.by_second;
- impl->by_ptrs[BY_SET_POS]=impl->rule.by_set_pos;
-
- memset(impl->orig_data,0,9*sizeof(short));
-
- /* Note which by rules had data in them when the iterator was
- created. We can't use the actuall by_x arrays, because the
- empty ones will be given default values later in this
- routine. The orig_data array will be used later in has_by_data */
-
- impl->orig_data[BY_MONTH]
- = (short)(impl->rule.by_month[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_WEEK_NO]
- =(short)(impl->rule.by_week_no[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_YEAR_DAY]
- =(short)(impl->rule.by_year_day[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_MONTH_DAY]
- =(short)(impl->rule.by_month_day[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_DAY]
- = (short)(impl->rule.by_day[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_HOUR]
- = (short)(impl->rule.by_hour[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_MINUTE]
- = (short)(impl->rule.by_minute[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_SECOND]
- = (short)(impl->rule.by_second[0]!=ICAL_RECURRENCE_ARRAY_MAX);
- impl->orig_data[BY_SET_POS]
- = (short)(impl->rule.by_set_pos[0]!=ICAL_RECURRENCE_ARRAY_MAX);
-
-
- /* Check if the recurrence rule is legal */
-
- /* If the BYYEARDAY appears, no other date rule part may appear. */
-
- if(icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH) ||
- icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_WEEK_NO) ||
- icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH_DAY) ||
- icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_DAY) ){
-
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
-
- return 0;
- }
-
- /* BYWEEKNO and BYMONTH rule parts may not both appear.*/
-
- if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH)){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
-
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- /* BYWEEKNO and BYMONTHDAY rule parts may not both appear.*/
-
- if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH_DAY)){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
-
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
-
- /*For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor
- BYWEEKNO may appear. */
-
- if(freq == ICAL_MONTHLY_RECURRENCE &&
- icalrecur_one_byrule(impl,BY_WEEK_NO)){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
-
- /*For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor
- BYYEARDAY may appear. */
-
- if(freq == ICAL_WEEKLY_RECURRENCE &&
- icalrecur_one_byrule(impl,BY_MONTH_DAY )) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- /* BYYEARDAY may only appear in YEARLY rules */
- if(freq != ICAL_YEARLY_RECURRENCE &&
- icalrecur_one_byrule(impl,BY_YEAR_DAY )) {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- /* Rewrite some of the rules and set up defaults to make later
- processing easier. Primarily, t involves copying an element
- from the start time into the coresponding BY_* array when the
- BY_* array is empty */
-
-
- setup_defaults(impl,BY_SECOND,ICAL_SECONDLY_RECURRENCE,
- impl->dtstart.second,
- &(impl->last.second));
-
- setup_defaults(impl,BY_MINUTE,ICAL_MINUTELY_RECURRENCE,
- impl->dtstart.minute,
- &(impl->last.minute));
-
- setup_defaults(impl,BY_HOUR,ICAL_HOURLY_RECURRENCE,
- impl->dtstart.hour,
- &(impl->last.hour));
-
- setup_defaults(impl,BY_MONTH_DAY,ICAL_DAILY_RECURRENCE,
- impl->dtstart.day,
- &(impl->last.day));
-
- setup_defaults(impl,BY_MONTH,ICAL_MONTHLY_RECURRENCE,
- impl->dtstart.month,
- &(impl->last.month));
-
-
- if(impl->rule.freq == ICAL_WEEKLY_RECURRENCE ){
-
- if(impl->by_ptrs[BY_DAY][0] == ICAL_RECURRENCE_ARRAY_MAX){
-
- /* Weekly recurrences with no BY_DAY data should occur on the
- same day of the week as the start time . */
- impl->by_ptrs[BY_DAY][0] = (short)icaltime_day_of_week(impl->dtstart);
-
- } else {
- /* If there is BY_DAY data, then we need to move the initial
- time to the start of the BY_DAY data. That is if the
- start time is on a Wednesday, and the rule has
- BYDAY=MO,WE,FR, move the initial time back to
- monday. Otherwise, jumping to the next week ( jumping 7
- days ahead ) will skip over some occurrences in the
- second week. */
-
- /* This depends on impl->by_ptrs[BY_DAY] being correctly sorted by
- * day. This should probably be abstracted to make such assumption
- * more explicit. */
- short dow = (short)(impl->by_ptrs[BY_DAY][0]-icaltime_day_of_week(impl->last));
- if (dow > impl->rule.week_start-1) dow -= 7;
- impl->last.day += dow;
- impl->last = icaltime_normalize(impl->last);
- }
-
-
- }
-
- /* For YEARLY rule, begin by setting up the year days array . The
- YEARLY rules work by expanding one year at a time. */
-
- if(impl->rule.freq == ICAL_YEARLY_RECURRENCE){
- struct icaltimetype next;
-
- for (;;) {
- expand_year_days(impl, impl->last.year);
- if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX)
- break; /* break when no days are expanded */
- increment_year(impl,impl->rule.interval);
- }
-
- /* Copy the first day into last. */
- next = icaltime_from_day_of_year(impl->days[0], impl->last.year);
-
- impl->last.day = next.day;
- impl->last.month = next.month;
- }
-
-
- /* If this is a monthly interval with by day data, then we need to
- set the last value to the appropriate day of the month */
-
- if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE)
- if (has_by_data(impl,BY_DAY)) {
-
- int dow = icalrecurrencetype_day_day_of_week(
- impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]);
- int pos = icalrecurrencetype_day_position(
- impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]);
-
- int poscount = 0;
- int days_in_month =
- icaltime_days_in_month(impl->last.month, impl->last.year);
-
- if(pos >= 0){
- /* Count up from the first day pf the month to find the
- pos'th weekday of dow ( like the second monday. ) */
-
- for(impl->last.day = 1;
- impl->last.day <= days_in_month;
- impl->last.day++){
-
- if(icaltime_day_of_week(impl->last) == dow){
- if(++poscount == pos || pos == 0){
- break;
- }
- }
- }
- } else {
- /* Count down from the last day pf the month to find the
- pos'th weekday of dow ( like the second to last monday. ) */
- pos = -pos;
- for(impl->last.day = days_in_month;
- impl->last.day != 0;
- impl->last.day--){
-
- if(icaltime_day_of_week(impl->last) == dow){
- if(++poscount == pos ){
- break;
- }
- }
- }
- }
-
-
- if(impl->last.day > days_in_month || impl->last.day == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
-
- } else if (has_by_data(impl,BY_MONTH_DAY)) {
- impl->last = icaltime_normalize(impl->last);
- }
-
-
-
- return impl;
-}
-
-
-void icalrecur_iterator_free(icalrecur_iterator* i)
-{
- icalerror_check_arg_rv((i!=0),"impl");
-
- free(i);
-
-}
-
-static void increment_year(icalrecur_iterator* impl, int inc)
-{
- impl->last.year+=inc;
-}
-
-/** Increment month is different that the other incement_* routines --
- it figures out the interval for itself, and uses BYMONTH data if
- available. */
-static void increment_month(icalrecur_iterator* impl)
-{
- int years;
-
- if(has_by_data(impl,BY_MONTH) ){
- /* Ignore the frequency and use the byrule data */
-
- impl->by_indices[BY_MONTH]++;
-
- if (impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
- impl->by_indices[BY_MONTH] = 0;
-
- increment_year(impl,1);
-
- }
-
- impl->last.month =
- impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]];
-
- } else {
-
- int inc;
-
- if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE){
- inc = impl->rule.interval;
- } else {
- inc = 1;
- }
-
- impl->last.month+=inc;
-
- /* Months are offset by one */
- impl->last.month--;
-
- years = impl->last.month / 12;
-
- impl->last.month = impl->last.month % 12;
-
- impl->last.month++;
-
- if (years != 0){
- increment_year(impl,years);
- }
- }
-}
-
-static void increment_monthday(icalrecur_iterator* impl, int inc)
-{
- int i;
-
- for(i=0; i<inc; i++){
-
- int days_in_month =
- icaltime_days_in_month(impl->last.month, impl->last.year);
-
- impl->last.day++;
-
- if (impl->last.day > days_in_month){
- impl->last.day = impl->last.day-days_in_month;
- increment_month(impl);
- }
- }
-}
-
-
-static void increment_hour(icalrecur_iterator* impl, int inc)
-{
- int days;
-
- impl->last.hour+=inc;
-
- days = impl->last.hour / 24;
- impl->last.hour = impl->last.hour % 24;
-
- if (impl->days != 0){
- increment_monthday(impl,days);
- }
-}
-
-static void increment_minute(icalrecur_iterator* impl, int inc)
-{
- int hours;
-
- impl->last.minute+=inc;
-
- hours = impl->last.minute / 60;
- impl->last.minute = impl->last.minute % 60;
-
- if (hours != 0){
- increment_hour(impl,hours);
- }
-
-}
-
-static void increment_second(icalrecur_iterator* impl, int inc)
-{
- int minutes;
-
- impl->last.second+=inc;
-
- minutes = impl->last.second / 60;
- impl->last.second = impl->last.second % 60;
-
- if (minutes != 0)
- {
- increment_minute(impl, minutes);
- }
-}
-
-#if 0
-#include "ical.h"
-void test_increment()
-{
- icalrecur_iterator impl;
-
- impl.last = icaltime_from_string("20000101T000000Z");
-
- printf("Orig: %s\n",icaltime_as_ctime(impl.last));
-
- increment_second(&impl,5);
- printf("+ 5 sec : %s\n",icaltime_as_ctime(impl.last));
-
- increment_second(&impl,355);
- printf("+ 355 sec : %s\n",icaltime_as_ctime(impl.last));
-
- increment_minute(&impl,5);
- printf("+ 5 min : %s\n",icaltime_as_ctime(impl.last));
-
- increment_minute(&impl,360);
- printf("+ 360 min : %s\n",icaltime_as_ctime(impl.last));
- increment_hour(&impl,5);
- printf("+ 5 hours : %s\n",icaltime_as_ctime(impl.last));
- increment_hour(&impl,43);
- printf("+ 43 hours : %s\n",icaltime_as_ctime(impl.last));
- increment_monthday(&impl,3);
- printf("+ 3 days : %s\n",icaltime_as_ctime(impl.last));
- increment_monthday(&impl,600);
- printf("+ 600 days : %s\n",icaltime_as_ctime(impl.last));
-
-}
-
-#endif
-
-static int next_second(icalrecur_iterator* impl)
-{
-
- int has_by_second = (impl->by_ptrs[BY_SECOND][0]!=ICAL_RECURRENCE_ARRAY_MAX);
- int this_frequency = (impl->rule.freq == ICAL_SECONDLY_RECURRENCE);
-
- int end_of_data = 0;
-
- assert(has_by_second || this_frequency);
-
- if( has_by_second ){
- /* Ignore the frequency and use the byrule data */
-
- impl->by_indices[BY_SECOND]++;
-
- if (impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
- impl->by_indices[BY_SECOND] = 0;
-
- end_of_data = 1;
- }
-
-
- impl->last.second =
- impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]];
-
-
- } else if( !has_by_second && this_frequency ){
- /* Compute the next value from the last time and the frequency interval*/
- increment_second(impl, impl->rule.interval);
-
- }
-
- /* If we have gone through all of the seconds on the BY list, then we
- need to move to the next minute */
-
- if(has_by_second && end_of_data && this_frequency ){
- increment_minute(impl,1);
- }
-
- return end_of_data;
-
-}
-
-static int next_minute(icalrecur_iterator* impl)
-{
-
- int has_by_minute = (impl->by_ptrs[BY_MINUTE][0]!=ICAL_RECURRENCE_ARRAY_MAX);
- int this_frequency = (impl->rule.freq == ICAL_MINUTELY_RECURRENCE);
-
- int end_of_data = 0;
-
- assert(has_by_minute || this_frequency);
-
-
- if (next_second(impl) == 0){
- return 0;
- }
-
- if( has_by_minute ){
- /* Ignore the frequency and use the byrule data */
-
- impl->by_indices[BY_MINUTE]++;
-
- if (impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
-
- impl->by_indices[BY_MINUTE] = 0;
-
- end_of_data = 1;
- }
-
- impl->last.minute =
- impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]];
-
- } else if( !has_by_minute && this_frequency ){
- /* Compute the next value from the last time and the frequency interval*/
- increment_minute(impl,impl->rule.interval);
- }
-
-/* If we have gone through all of the minutes on the BY list, then we
- need to move to the next hour */
-
- if(has_by_minute && end_of_data && this_frequency ){
- increment_hour(impl,1);
- }
-
- return end_of_data;
-}
-
-static int next_hour(icalrecur_iterator* impl)
-{
-
- int has_by_hour = (impl->by_ptrs[BY_HOUR][0]!=ICAL_RECURRENCE_ARRAY_MAX);
- int this_frequency = (impl->rule.freq == ICAL_HOURLY_RECURRENCE);
-
- int end_of_data = 0;
-
- assert(has_by_hour || this_frequency);
-
- if (next_minute(impl) == 0){
- return 0;
- }
-
- if( has_by_hour ){
- /* Ignore the frequency and use the byrule data */
-
- impl->by_indices[BY_HOUR]++;
-
- if (impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
- impl->by_indices[BY_HOUR] = 0;
-
- end_of_data = 1;
- }
-
- impl->last.hour =
- impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]];
-
- } else if( !has_by_hour && this_frequency ){
- /* Compute the next value from the last time and the frequency interval*/
- increment_hour(impl,impl->rule.interval);
-
- }
-
- /* If we have gone through all of the hours on the BY list, then we
- need to move to the next day */
-
- if(has_by_hour && end_of_data && this_frequency ){
- increment_monthday(impl,1);
- }
-
- return end_of_data;
-
-}
-
-static int next_day(icalrecur_iterator* impl)
-{
-
- int has_by_day = (impl->by_ptrs[BY_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX);
- int this_frequency = (impl->rule.freq == ICAL_DAILY_RECURRENCE);
-
- assert(has_by_day || this_frequency);
-
- if (next_hour(impl) == 0){
- return 0;
- }
-
- /* Always increment through the interval, since this routine is not
- called by any other next_* routine, and the days that are
- excluded will be taken care of by restriction filtering */
-
- if(this_frequency){
- increment_monthday(impl,impl->rule.interval);
- } else {
- increment_monthday(impl,1);
- }
-
-
- return 0;
-
-}
-
-
-static int next_yearday(icalrecur_iterator* impl)
-{
-
- int has_by_yearday = (impl->by_ptrs[BY_YEAR_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX);
-
- int end_of_data = 0;
-
- assert(has_by_yearday );
-
- if (next_hour(impl) == 0){
- return 0;
- }
-
- impl->by_indices[BY_YEAR_DAY]++;
-
- if (impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
- impl->by_indices[BY_YEAR_DAY] = 0;
-
- end_of_data = 1;
- }
-
- impl->last.day =
- impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]];
-
- if(has_by_yearday && end_of_data){
- increment_year(impl,1);
- }
-
- return end_of_data;
-
-}
-
-
-/* Returns the day of the month for the current month of t that is the
- pos'th instance of the day-of-week dow */
-
-static int nth_weekday(int dow, int pos, struct icaltimetype t){
-
- int days_in_month = icaltime_days_in_month(t.month, t.year);
- int end_dow, start_dow;
- int wd;
-
- if(pos >= 0){
- t.day = 1;
- start_dow = icaltime_day_of_week(t);
-
- if (pos != 0) {
- pos--;
- }
-
- /* find month day of first occurrence of dow -- such as the
- month day of the first monday */
-
- wd = dow-start_dow+1;
-
- if (wd <= 0){
- wd = wd + 7;
- }
-
- wd = wd + pos * 7;
-
- } else {
- t.day = days_in_month;
- end_dow = icaltime_day_of_week(t);
-
- pos++;
-
- /* find month day of last occurrence of dow -- such as the
- month day of the last monday */
-
- wd = (end_dow - dow);
-
- if (wd < 0){
- wd = wd+ 7;
- }
-
- wd = days_in_month - wd;
-
- wd = wd + pos * 7;
- }
-
- return wd;
-}
-
-static int is_day_in_byday(icalrecur_iterator* impl,struct icaltimetype tt){
-
- int idx;
-
- for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){
- int dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]);
- int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]);
- int this_dow = icaltime_day_of_week(tt);
-
- if( (pos == 0 && dow == this_dow ) || /* Just a dow, like "TU" or "FR" */
- (nth_weekday(dow,pos,tt) == tt.day)){ /*pos+wod: "3FR" or -1TU" */
- return 1;
- }
- }
-
- return 0;
-}
-
-static int next_month(icalrecur_iterator* impl)
-{
- int data_valid = 1;
-
- int this_frequency = (impl->rule.freq == ICAL_MONTHLY_RECURRENCE);
-
- assert( has_by_data(impl,BY_MONTH) || this_frequency);
-
- /* Iterate through the occurrences within a day. If we don't get to
- the end of the intra-day data, don't bother going to the next
- month */
-
- if (next_hour(impl) == 0){
- return data_valid; /* Signal that the data is valid */
- }
-
- /* Now iterate through the occurrences within a month -- by days,
- weeks or weekdays. */
-
- /*
- * Case 1:
- * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR;BYMONTHDAY=13
- */
-
- if(has_by_data(impl,BY_DAY) && has_by_data(impl,BY_MONTH_DAY)){
- int day, idx,j;
- int days_in_month = icaltime_days_in_month(impl->last.month,
- impl->last.year);
- /* Iterate through the remaining days in the month and check if
- each day is listed in the BY_DAY array and in the BY_MONTHDAY
- array. This seems very inneficient, but I think it is the
- simplest way to account for both BYDAY=1FR (First friday in
- month) and BYDAY=FR ( every friday in month ) */
-
- for(day = impl->last.day+1; day <= days_in_month; day++){
- for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){
- for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){
- int dow =
- icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]);
- int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]);
- int mday = BYMDPTR[j];
- int this_dow;
-
- impl->last.day = day;
- this_dow = icaltime_day_of_week(impl->last);
-
- if( (pos == 0 && dow == this_dow && mday == day) ||
- (nth_weekday(dow,pos,impl->last) == day && mday==day)){
- goto MDEND;
- }
- }
- }
- }
-
- MDEND:
-
- if ( day > days_in_month){
- impl->last.day = 1;
- increment_month(impl);
- data_valid = 0; /* signal that impl->last is invalid */
- }
-
-
- /*
- * Case 2:
- * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR
- */
-
- } else if(has_by_data(impl,BY_DAY)){
- /* For this case, the weekdays are relative to the
- month. BYDAY=FR -> First Friday in month, etc. */
-
- /* This code iterates through the remaining days in the month
- and checks if each day is listed in the BY_DAY array. This
- seems very inneficient, but I think it is the simplest way to
- account for both BYDAY=1FR (First friday in month) and
- BYDAY=FR ( every friday in month ) */
-
- int day;
- int days_in_month = icaltime_days_in_month(impl->last.month,
- impl->last.year);
- assert( BYDAYPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX);
-
- for(day = impl->last.day+1; day <= days_in_month; day++){
- impl->last.day = day;
- if(is_day_in_byday(impl,impl->last)){
- data_valid = 1;
- break;
- }
- }
-
- if ( day > days_in_month){
- impl->last.day = 1;
- increment_month(impl);
-
- /* Did moving to the next month put us on a valid date? if
- so, note that the new data is valid, if, not, mark it
- invalid */
-
- if(is_day_in_byday(impl,impl->last)){
- data_valid = 1;
- } else {
- data_valid = 0; /* signal that impl->last is invalid */
- }
- }
-
- /*
- * Case 3
- * Rules Like: FREQ=MONTHLY;COUNT=10;BYMONTHDAY=-3
- */
-
- } else if (has_by_data(impl,BY_MONTH_DAY)) {
- int day, days_in_month;
-
- assert( BYMDPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX);
-
- BYMDIDX++;
-
- /* Are we at the end of the BYDAY array? */
- if (BYMDPTR[BYMDIDX] ==ICAL_RECURRENCE_ARRAY_MAX){
-
- BYMDIDX = 0; /* Reset to 0 */
- increment_month(impl);
- }
-
- days_in_month = icaltime_days_in_month(impl->last.month,
- impl->last.year);
-
- day = BYMDPTR[BYMDIDX];
-
- if (day < 0) {
- day = icaltime_days_in_month(impl->last.month, impl->last.year) + day + 1;
- }
-
- if ( day > days_in_month){
- impl->last.day = 1;
-
- /* Did moving to the next month put us on a valid date? if
- so, note that the new data is valid, if, not, mark it
- invalid */
-
- if(is_day_in_byday(impl,impl->last)){
- data_valid = 1;
- } else {
- data_valid = 0; /* signal that impl->last is invalid */
- }
- }
-
- impl->last.day = day;
-
- } else {
- int days_in_month;
-
- increment_month(impl);
-
- days_in_month = icaltime_days_in_month(impl->last.month,
- impl->last.year);
- if (impl->last.day > days_in_month){
- data_valid = 0; /* signal that impl->last is invalid */
- }
- }
-
- return data_valid;
-
-}
-
-static int next_weekday_by_week(icalrecur_iterator* impl)
-{
-
- int end_of_data = 0;
- int start_of_week, dow;
- struct icaltimetype next;
-
- if (next_hour(impl) == 0){
- return 0;
- }
-
- if(!has_by_data(impl,BY_DAY)){
- return 1;
- }
-
- /* If we get here, we need to step to tne next day */
-
- for (;;) {
- BYDAYIDX++; /* Look at next elem in BYDAY array */
-
- /* Are we at the end of the BYDAY array? */
- if (BYDAYPTR[BYDAYIDX]==ICAL_RECURRENCE_ARRAY_MAX){
- BYDAYIDX = 0; /* Reset to 0 */
- end_of_data = 1; /* Signal that we're at the end */
- }
-
- /* Add the day of week offset to to the start of this week, and use
- that to get the next day */
- /* ignore position of dow ("4FR"), only use dow ("FR")*/
- dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[BYDAYIDX]);
- dow -= impl->rule.week_start; /* Set Sunday to be 0 */
- if (dow < 0) dow += 7;
-
- start_of_week = icaltime_start_doy_week(impl->last, impl->rule.week_start);
-
- if(dow+start_of_week <1){
- /* The selected date is in the previous year. */
- if(!end_of_data){
- continue;
- }
- }
-
- next = icaltime_from_day_of_year(start_of_week + dow,impl->last.year);
-
- impl->last.day = next.day;
- impl->last.month = next.month;
- impl->last.year = next.year;
-
- return end_of_data;
- }
-
-}
-
-static int next_week(icalrecur_iterator* impl)
-{
- int end_of_data = 0;
-
- /* Increment to the next week day, if there is data at a level less than a week */
- if (next_weekday_by_week(impl) == 0){
- return 0; /* Have not reached end of week yet */
- }
-
- /* If we get here, we have incremented through the entire week, and
- can increment to the next week */
-
- if( has_by_data(impl,BY_WEEK_NO)){
- /*FREQ=WEEKLY;BYWEEK=20*/
- /* Use the Week Number byrule data */
- int week_no;
- struct icaltimetype t;
-
- impl->by_indices[BY_WEEK_NO]++;
-
- if (impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]]
- ==ICAL_RECURRENCE_ARRAY_MAX){
- impl->by_indices[BY_WEEK_NO] = 0;
-
- end_of_data = 1;
- }
-
- t = impl->last;
- t.month=1; /* HACK, should be setting to the date of the first week of year*/
- t.day=1;
-
- week_no = impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]];
-
- impl->last.day += week_no*7;
-
- impl->last = icaltime_normalize(impl->last);
-
- } else {
- /* Jump to the next week */
- increment_monthday(impl,7*impl->rule.interval);
- }
-
- if( has_by_data(impl,BY_WEEK_NO) && end_of_data){
- increment_year(impl,1);
- }
-
- return end_of_data;
-
-}
-
-/** Expand the BYDAY rule part and return a pointer to a newly allocated list of days. */
-static pvl_list expand_by_day(icalrecur_iterator* impl, int year)
-{
- /* Try to calculate each of the occurrences. */
- int i;
- pvl_list days_list = pvl_newlist();
-
- int start_dow, end_dow, end_year_day;
- struct icaltimetype tmp = impl->last;
-
- tmp.year= year;
- tmp.month = 1;
- tmp.day = 1;
- tmp.is_date = 1;
-
- /* Find the day that 1st Jan falls on, 1 (Sun) to 7 (Sat). */
- start_dow = icaltime_day_of_week(tmp);
-
- /* Get the last day of the year*/
- tmp.year= year;
- tmp.month = 12;
- tmp.day = 31;
- tmp.is_date = 1;
-
- end_dow = icaltime_day_of_week(tmp);
- end_year_day = icaltime_day_of_year(tmp);
-
- for(i = 0; BYDAYPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){
- /* This is 1 (Sun) to 7 (Sat). */
- int dow =
- icalrecurrencetype_day_day_of_week(BYDAYPTR[i]);
- int pos = icalrecurrencetype_day_position(BYDAYPTR[i]);
-
- if(pos == 0){
- /* The day was specified without a position -- it is just
- a bare day of the week ( BYDAY=SU) so add all of the
- days of the year with this day-of-week*/
- int doy, tmp_start_doy;
-
- tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;
-
- for (doy = tmp_start_doy; doy <= end_year_day; doy += 7)
- pvl_push(days_list,(void*)(int)doy);
-
- } else if ( pos > 0) {
- int first;
- /* First occurrence of dow in year */
- if( dow >= start_dow) {
- first = dow - start_dow + 1;
- } else {
- first = dow - start_dow + 8;
- }
-
- /* Then just multiple the position times 7 to get the pos'th day in the year */
- pvl_push(days_list,(void*)(first+ (pos-1) * 7));
-
- } else { /* pos < 0 */
- int last;
- pos = -pos;
-
- /* last occurrence of dow in year */
- if( dow <= end_dow) {
- last = end_year_day - end_dow + dow;
- } else {
- last = end_year_day - end_dow + dow - 7;
- }
-
- pvl_push(days_list,(void*)(last - (pos-1) * 7));
- }
- }
- return days_list;
-}
-
-
-/* For INTERVAL=YEARLY, set up the days[] array in the iterator to
- list all of the days of the current year that are specified in this
- rule. */
-
-static int expand_year_days(icalrecur_iterator* impl, int year)
-{
- int j,k;
- int days_index=0;
- struct icaltimetype t;
- int flags;
-
- t = icaltime_null_date();
-
-#define HBD(x) has_by_data(impl,x)
-
- memset(impl->days,ICAL_RECURRENCE_ARRAY_MAX_BYTE,sizeof(impl->days));
-
- /* The flags and the following switch statement select which code
- to use to expand the yers days, based on which BY-rules are
- present. */
-
- flags = (HBD(BY_DAY) ? 1<<BY_DAY : 0) +
- (HBD(BY_WEEK_NO) ? 1<<BY_WEEK_NO : 0) +
- (HBD(BY_MONTH_DAY) ? 1<<BY_MONTH_DAY : 0) +
- (HBD(BY_MONTH) ? 1<<BY_MONTH : 0) +
- (HBD(BY_YEAR_DAY) ? 1<<BY_YEAR_DAY : 0);
-
-
- switch(flags) {
-
- case 0: {
- /* FREQ=YEARLY; */
- t = impl->dtstart;
- t.year = impl->last.year;
-
- impl->days[days_index++] = (short)icaltime_day_of_year(t);
-
- break;
- }
- case 1<<BY_MONTH: {
- /* FREQ=YEARLY; BYMONTH=3,11*/
-
- for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){
- int month = impl->by_ptrs[BY_MONTH][j];
- int doy;
-
- t = impl->dtstart;
- t.year = year;
- t.month = month;
- t.is_date = 1;
-
- doy = icaltime_day_of_year(t);
-
- impl->days[days_index++] = (short)doy;
-
- }
- break;
- }
-
- case 1<<BY_MONTH_DAY: {
- /* FREQ=YEARLY; BYMONTHDAY=1,15*/
- for(k=0;impl->by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++)
- {
- int month_day = impl->by_ptrs[BY_MONTH_DAY][k];
- int doy;
-
- t = impl->dtstart;
- t.day = month_day;
- t.year = year;
- t.is_date = 1;
-
- doy = icaltime_day_of_year(t);
-
- impl->days[days_index++] = (short)doy;
-
- }
- break;
- }
-
- case (1<<BY_MONTH_DAY) + (1<<BY_MONTH): {
- /* FREQ=YEARLY; BYMONTHDAY=1,15; BYMONTH=10 */
-
- for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){
- for(k=0;impl->by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++)
- {
- int month = impl->by_ptrs[BY_MONTH][j];
- int month_day = impl->by_ptrs[BY_MONTH_DAY][k];
- int doy;
-
- t.day = month_day;
- t.month = month;
- t.year = year;
- t.is_date = 1;
-
- doy = icaltime_day_of_year(t);
-
- impl->days[days_index++] = (short)doy;
-
- }
- }
-
- break;
- }
-
- case 1<<BY_WEEK_NO: {
- /* FREQ=YEARLY; BYWEEKNO=20,50 */
-
- int dow;
-
- t.day = impl->dtstart.day;
- t.month = impl->dtstart.month;
- t.year = year;
- t.is_date = 1;
-
- dow = icaltime_day_of_week(t);
- /* HACK Not finished */
-
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
-
- break;
- }
-
- case (1<<BY_WEEK_NO) + (1<<BY_MONTH_DAY): {
- /*FREQ=YEARLY; WEEKNO=20,50; BYMONTH= 6,11 */
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- break;
- }
-
- case 1<<BY_DAY: {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR*/
- pvl_elem i;
- pvl_list days = expand_by_day(impl,year);
-
-
- for(i=pvl_head(days);i!=0;i=pvl_next(i)){
- short day = (short)(intptr_t)pvl_data(i);
- impl->days[days_index++] = day;
- }
-
- pvl_free(days);
-
- break;
- }
-
- case (1<<BY_DAY)+(1<<BY_MONTH): {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTH = 12*/
-
-
- for(j=0;impl->by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){
- int month = impl->by_ptrs[BY_MONTH][j];
- int days_in_month = icaltime_days_in_month(month,year);
- int first_dow, last_dow, doy_offset;
-
- t.year = year;
- t.month = month;
- t.day = 1;
- t.is_date = 1;
-
- first_dow = icaltime_day_of_week(t);
-
- /* This holds the day offset used to calculate the day of the year
- from the month day. Just add the month day to this. */
- doy_offset = icaltime_day_of_year(t) - 1;
-
- t.day = days_in_month;
- last_dow = icaltime_day_of_week(t);
-
- for(k=0;impl->by_ptrs[BY_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++){
- short day_coded = impl->by_ptrs[BY_DAY][k];
- enum icalrecurrencetype_weekday dow =
- icalrecurrencetype_day_day_of_week(day_coded);
- int pos = icalrecurrencetype_day_position(day_coded);
- int first_matching_day, last_matching_day, day, month_day;
-
- /* Calculate the first day in the month with the given weekday,
- and the last day. */
- first_matching_day = ((dow + 7 - first_dow) % 7) + 1;
- last_matching_day = days_in_month - ((last_dow + 7 - dow) % 7);
-
- if (pos == 0) {
- /* Add all of instances of the weekday within the month. */
- for (day = first_matching_day; day <= days_in_month; day += 7)
- impl->days[days_index++] = (short)(doy_offset + day);
-
- } else if (pos > 0) {
- /* Add the nth instance of the weekday within the month. */
- month_day = first_matching_day + (pos - 1) * 7;
-
- if (month_day <= days_in_month)
- impl->days[days_index++] = (short)(doy_offset + month_day);
-
- } else {
- /* Add the -nth instance of the weekday within the month.*/
- month_day = last_matching_day + (pos + 1) * 7;
-
- if (month_day > 0)
- impl->days[days_index++] = (short)(doy_offset + month_day);
- }
- }
- }
- break;
- }
-
- case (1<<BY_DAY) + (1<<BY_MONTH_DAY) : {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTHDAY=1,15*/
-
- pvl_elem itr;
- pvl_list days = expand_by_day(impl,year);
-
- for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){
- short day = (short)(intptr_t)pvl_data(itr);
- struct icaltimetype tt;
-
- tt = icaltime_from_day_of_year(day,year);
-
- for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){
- int mday = BYMDPTR[j];
-
- if(tt.day == mday){
- impl->days[days_index++] = day;
- }
- }
-
- }
-
- pvl_free(days);
-
- break;
- }
-
- case (1<<BY_DAY) + (1<<BY_MONTH_DAY) + (1<<BY_MONTH): {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTHDAY=10; MYMONTH=6,11*/
-
- pvl_elem itr;
- pvl_list days = expand_by_day(impl,year);
-
- for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){
- short day = (short)(intptr_t)pvl_data(itr);
- struct icaltimetype tt;
- int i;
-
- tt = icaltime_from_day_of_year(day,year);
-
- for(i = 0; BYMONPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){
- for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){
- int mday = BYMDPTR[j];
- int month = BYMONPTR[i];
-
- if(tt.month == month && tt.day == mday){
- impl->days[days_index++] = day;
- }
- }
- }
-
- }
-
- pvl_free(days);
-
- break;
-
- }
-
- case (1<<BY_DAY) + (1<<BY_WEEK_NO) : {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; WEEKNO=20,50*/
-
- pvl_elem itr;
- pvl_list days = expand_by_day(impl,year);
-
- for(itr=pvl_head(days);itr!=0;itr=pvl_next(itr)){
- short day = (short)(intptr_t)pvl_data(itr);
- struct icaltimetype tt;
- int i;
-
- tt = icaltime_from_day_of_year(day,year);
-
- for(i = 0; BYWEEKPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){
- int weekno = BYWEEKPTR[i];
- int this_weekno = icaltime_week_number(tt);
- if(weekno== this_weekno){
- impl->days[days_index++] = day;
- }
- }
-
- }
-
- pvl_free(days);
- break;
- }
-
- case (1<<BY_DAY) + (1<<BY_WEEK_NO) + (1<<BY_MONTH_DAY): {
- /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; WEEKNO=20,50; BYMONTHDAY=1,15*/
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- break;
- }
-
- case 1<<BY_YEAR_DAY: {
- for(j=0;impl->by_ptrs[BY_YEAR_DAY][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){
- impl->days[days_index++] = impl->by_ptrs[BY_YEAR_DAY][j];
- }
- break;
- }
-
- default: {
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- break;
- }
-
- }
-
- return 0;
-}
-
-
-static int next_year(icalrecur_iterator* impl)
-{
- struct icaltimetype next;
-
- if (next_hour(impl) == 0){
- return 0;
- }
-
- if (impl->days[++impl->days_index] == ICAL_RECURRENCE_ARRAY_MAX){
- impl->days_index = 0;
-
- for (;;) {
- increment_year(impl,impl->rule.interval);
- expand_year_days(impl,impl->last.year);
- if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX)
- break;
- }
- }
-
- next = icaltime_from_day_of_year(impl->days[impl->days_index], impl->last.year);
-
- impl->last.day = next.day;
- impl->last.month = next.month;
-
- return 1;
-}
-
-int icalrecur_check_rulepart(icalrecur_iterator* impl,
- int v, enum byrule byrule)
-{
- int itr;
-
- if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX){
- for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){
- if(impl->by_ptrs[byrule][itr] == v){
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-static int check_contract_restriction(icalrecur_iterator* impl,
- enum byrule byrule, int v)
-{
- int pass = 0;
- int itr;
- icalrecurrencetype_frequency freq = impl->rule.freq;
-
- if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX &&
- expand_map[freq].map[byrule] == CONTRACT){
- for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){
- if(impl->by_ptrs[byrule][itr] == v){
- pass=1;
- break;
- }
- }
-
- return pass;
- } else {
- /* This is not a contracting byrule, or it has no data, so the
- test passes*/
- return 1;
- }
-}
-
-
-static int check_contracting_rules(icalrecur_iterator* impl)
-{
-
- int day_of_week = icaltime_day_of_week(impl->last);
- int week_no = icaltime_week_number(impl->last);
- int year_day = icaltime_day_of_year(impl->last);
-
- if (
- check_contract_restriction(impl,BY_SECOND, impl->last.second) &&
- check_contract_restriction(impl,BY_MINUTE, impl->last.minute) &&
- check_contract_restriction(impl,BY_HOUR, impl->last.hour) &&
- check_contract_restriction(impl,BY_DAY, day_of_week) &&
- check_contract_restriction(impl,BY_WEEK_NO, week_no) &&
- check_contract_restriction(impl,BY_MONTH_DAY, impl->last.day) &&
- check_contract_restriction(impl,BY_MONTH, impl->last.month) &&
- check_contract_restriction(impl,BY_YEAR_DAY, year_day) )
- {
-
- return 1;
- } else {
- return 0;
- }
-}
-
-struct icaltimetype icalrecur_iterator_next(icalrecur_iterator *impl)
-{
- int valid = 1;
-
- if( (impl->rule.count!=0 &&impl->occurrence_no >= impl->rule.count) ||
- (!icaltime_is_null_time(impl->rule.until) &&
- icaltime_compare(impl->last,impl->rule.until) > 0)) {
- return icaltime_null_time();
- }
-
- if(impl->occurrence_no == 0
- && icaltime_compare(impl->last,impl->dtstart) >= 0){
-
- impl->occurrence_no++;
- return impl->last;
- }
-
- do {
- valid = 1;
- switch(impl->rule.freq){
-
- case ICAL_SECONDLY_RECURRENCE: {
- next_second(impl);
- break;
- }
- case ICAL_MINUTELY_RECURRENCE: {
- next_minute(impl);
- break;
- }
- case ICAL_HOURLY_RECURRENCE: {
- next_hour(impl);
- break;
- }
- case ICAL_DAILY_RECURRENCE: {
- next_day(impl);
- break;
- }
- case ICAL_WEEKLY_RECURRENCE: {
- next_week(impl);
- break;
- }
- case ICAL_MONTHLY_RECURRENCE: {
- valid = next_month(impl);
- break;
- }
- case ICAL_YEARLY_RECURRENCE:{
- next_year(impl);
- break;
- }
- default:{
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return icaltime_null_time();
- }
- }
-
- if(impl->last.year >= 2038 ){
- /* HACK */
- return icaltime_null_time();
- }
-
- } while(!check_contracting_rules(impl)
- || icaltime_compare(impl->last,impl->dtstart) < 0
- || valid == 0);
-
-
-/* Ignore null times and times that are after the until time */
- if( !icaltime_is_null_time(impl->rule.until) &&
- icaltime_compare(impl->last,impl->rule.until) > 0 ) {
- return icaltime_null_time();
- }
-
- impl->occurrence_no++;
-
- return impl->last;
-}
-
-
-/************************** Type Routines **********************/
-
-
-void icalrecurrencetype_clear(struct icalrecurrencetype *recur)
-{
- memset(recur,ICAL_RECURRENCE_ARRAY_MAX_BYTE,
- sizeof(struct icalrecurrencetype));
-
- recur->week_start = ICAL_MONDAY_WEEKDAY;
- recur->freq = ICAL_NO_RECURRENCE;
- recur->interval = 1;
- memset(&(recur->until),0,sizeof(struct icaltimetype));
- recur->count = 0;
-}
-
-/** The 'day' element of icalrecurrencetype_weekday is encoded to
- * allow representation of both the day of the week ( Monday, Tueday),
- * but also the Nth day of the week ( First tuesday of the month, last
- * thursday of the year) These routines decode the day values.
- *
- * The day's position in the period ( Nth-ness) and the numerical
- * value of the day are encoded together as: pos*7 + dow
- *
- * A position of 0 means 'any' or 'every'
- */
-
-enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day)
-{
- return abs(day)%8;
-}
-
-int icalrecurrencetype_day_position(short day)
-{
- int wd, pos;
-
- wd = icalrecurrencetype_day_day_of_week(day);
-
- pos = (abs(day)-wd)/8 * ((day<0)?-1:1);
-
-
- return pos;
-}
-
-
-/****************** Enumeration Routines ******************/
-
-static struct {icalrecurrencetype_weekday wd; const char * str; }
-wd_map[] = {
- {ICAL_SUNDAY_WEEKDAY,"SU"},
- {ICAL_MONDAY_WEEKDAY,"MO"},
- {ICAL_TUESDAY_WEEKDAY,"TU"},
- {ICAL_WEDNESDAY_WEEKDAY,"WE"},
- {ICAL_THURSDAY_WEEKDAY,"TH"},
- {ICAL_FRIDAY_WEEKDAY,"FR"},
- {ICAL_SATURDAY_WEEKDAY,"SA"},
- {ICAL_NO_WEEKDAY,0}
-};
-
-const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind)
-{
- int i;
-
- for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) {
- if ( wd_map[i].wd == kind) {
- return wd_map[i].str;
- }
- }
-
- return 0;
-}
-
-icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str)
-{
- int i;
-
- for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) {
- if ( strcmp(str,wd_map[i].str) == 0){
- return wd_map[i].wd;
- }
- }
-
- return ICAL_NO_WEEKDAY;
-}
-
-
-
-static struct {
- icalrecurrencetype_frequency kind;
- const char* str;
-} freq_map[] = {
- {ICAL_SECONDLY_RECURRENCE,"SECONDLY"},
- {ICAL_MINUTELY_RECURRENCE,"MINUTELY"},
- {ICAL_HOURLY_RECURRENCE,"HOURLY"},
- {ICAL_DAILY_RECURRENCE,"DAILY"},
- {ICAL_WEEKLY_RECURRENCE,"WEEKLY"},
- {ICAL_MONTHLY_RECURRENCE,"MONTHLY"},
- {ICAL_YEARLY_RECURRENCE,"YEARLY"},
- {ICAL_NO_RECURRENCE,0}
-};
-
-const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind)
-{
- int i;
-
- for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) {
- if ( freq_map[i].kind == kind ) {
- return freq_map[i].str;
- }
- }
- return 0;
-}
-
-icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str)
-{
- int i;
-
- for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) {
- if ( strcmp(str,freq_map[i].str) == 0){
- return freq_map[i].kind;
- }
- }
- return ICAL_NO_RECURRENCE;
-}
-
-/** Fill an array with the 'count' number of occurrences generated by
- * the rrule. Note that the times are returned in UTC, but the times
- * are calculated in local time. YOu will have to convert the results
- * back into local time before using them.
- */
-
-int icalrecur_expand_recurrence(char* rule, time_t start,
- int count, time_t* array)
-{
- struct icalrecurrencetype recur;
- icalrecur_iterator* ritr;
- time_t tt;
- struct icaltimetype icstart, next;
- int i = 0;
-
- memset(array, 0, count*sizeof(time_t));
-
- icstart = icaltime_from_timet_with_zone(start,0,0);
-
- recur = icalrecurrencetype_from_string(rule);
-
- for(ritr = icalrecur_iterator_new(recur,icstart),
- next = icalrecur_iterator_next(ritr);
- !icaltime_is_null_time(next) && i < count;
- next = icalrecur_iterator_next(ritr)){
-
- tt = icaltime_as_timet(next);
-
- if (tt >= start ){
- array[i++] = tt;
- }
-
- }
-
- icalrecur_iterator_free(ritr);
-
- return 1;
-}
diff --git a/libical/src/libical/icalrecur.h b/libical/src/libical/icalrecur.h
deleted file mode 100644
index 45bdd21b65..0000000000
--- a/libical/src/libical/icalrecur.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalrecur.h
- CREATOR: eric 20 March 2000
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-*/
-
-/**
-@file icalrecur.h
-@brief Routines for dealing with recurring time
-
-How to use:
-
-1) Get a rule and a start time from a component
-
-@code
- icalproperty rrule;
- struct icalrecurrencetype recur;
- struct icaltimetype dtstart;
-
- rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY);
- recur = icalproperty_get_rrule(rrule);
- start = icalproperty_get_dtstart(dtstart);
-@endcode
-
-Or, just make them up:
-
-@code
- recur = icalrecurrencetype_from_string("FREQ=YEARLY;BYDAY=SU,WE");
- dtstart = icaltime_from_string("19970101T123000")
-@endcode
-
-2) Create an iterator
-
-@code
- icalrecur_iterator* ritr;
- ritr = icalrecur_iterator_new(recur,start);
-@endcode
-
-3) Iterator over the occurrences
-
-@code
- struct icaltimetype next;
- while (next = icalrecur_iterator_next(ritr)
- && !icaltime_is_null_time(next){
- Do something with next
- }
-@endcode
-
-Note that that the time returned by icalrecur_iterator_next is in
-whatever timezone that dtstart is in.
-
-*/
-
-#ifndef ICALRECUR_H
-#define ICALRECUR_H
-
-#include <time.h>
-#include "icaltime.h"
-
-/*
- * Recurrance enumerations
- */
-
-typedef enum icalrecurrencetype_frequency
-{
- /* These enums are used to index an array, so don't change the
- order or the integers */
-
- ICAL_SECONDLY_RECURRENCE=0,
- ICAL_MINUTELY_RECURRENCE=1,
- ICAL_HOURLY_RECURRENCE=2,
- ICAL_DAILY_RECURRENCE=3,
- ICAL_WEEKLY_RECURRENCE=4,
- ICAL_MONTHLY_RECURRENCE=5,
- ICAL_YEARLY_RECURRENCE=6,
- ICAL_NO_RECURRENCE=7
-
-} icalrecurrencetype_frequency;
-
-typedef enum icalrecurrencetype_weekday
-{
- ICAL_NO_WEEKDAY,
- ICAL_SUNDAY_WEEKDAY,
- ICAL_MONDAY_WEEKDAY,
- ICAL_TUESDAY_WEEKDAY,
- ICAL_WEDNESDAY_WEEKDAY,
- ICAL_THURSDAY_WEEKDAY,
- ICAL_FRIDAY_WEEKDAY,
- ICAL_SATURDAY_WEEKDAY
-} icalrecurrencetype_weekday;
-
-enum {
- ICAL_RECURRENCE_ARRAY_MAX = 0x7f7f,
- ICAL_RECURRENCE_ARRAY_MAX_BYTE = 0x7f
-};
-
-
-
-/**
- * Recurrence type routines
- */
-
-/* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of
- the values and fields in struct icalrecurrencetype */
-
-#define ICAL_BY_SECOND_SIZE 61
-#define ICAL_BY_MINUTE_SIZE 61
-#define ICAL_BY_HOUR_SIZE 25
-#define ICAL_BY_DAY_SIZE 364 /* 7 days * 52 weeks */
-#define ICAL_BY_MONTHDAY_SIZE 32
-#define ICAL_BY_YEARDAY_SIZE 367
-#define ICAL_BY_WEEKNO_SIZE 54
-#define ICAL_BY_MONTH_SIZE 13
-#define ICAL_BY_SETPOS_SIZE 367
-
-/** Main struct for holding digested recurrence rules */
-struct icalrecurrencetype
-{
- icalrecurrencetype_frequency freq;
-
-
- /* until and count are mutually exclusive. */
- struct icaltimetype until;
- int count;
-
- short interval;
-
- icalrecurrencetype_weekday week_start;
-
- /* The BY* parameters can each take a list of values. Here I
- * assume that the list of values will not be larger than the
- * range of the value -- that is, the client will not name a
- * value more than once.
-
- * Each of the lists is terminated with the value
- * ICAL_RECURRENCE_ARRAY_MAX unless the the list is full.
- */
-
- short by_second[ICAL_BY_SECOND_SIZE];
- short by_minute[ICAL_BY_MINUTE_SIZE];
- short by_hour[ICAL_BY_HOUR_SIZE];
- short by_day[ICAL_BY_DAY_SIZE]; /* Encoded value, see below */
- short by_month_day[ICAL_BY_MONTHDAY_SIZE];
- short by_year_day[ ICAL_BY_YEARDAY_SIZE];
- short by_week_no[ICAL_BY_WEEKNO_SIZE];
- short by_month[ICAL_BY_MONTH_SIZE];
- short by_set_pos[ICAL_BY_SETPOS_SIZE];
-};
-
-
-void icalrecurrencetype_clear(struct icalrecurrencetype *r);
-
-/**
- * Array Encoding
- *
- * The 'day' element of the by_day array is encoded to allow
- * representation of both the day of the week ( Monday, Tueday), but also
- * the Nth day of the week ( First tuesday of the month, last thursday of
- * the year) These routines decode the day values
- */
-
-/** 1 == Monday, etc. */
-enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day);
-
-/** 0 == any of day of week. 1 == first, 2 = second, -2 == second to last, etc */
-int icalrecurrencetype_day_position(short day);
-
-icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str);
-
-/** Recurrance rule parser */
-
-/** Convert between strings and recurrencetype structures. */
-struct icalrecurrencetype icalrecurrencetype_from_string(const char* str);
-char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur);
-
-
-/** Recurrence iteration routines */
-
-typedef struct icalrecur_iterator_impl icalrecur_iterator;
-
-/** Create a new recurrence rule iterator */
-icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule,
- struct icaltimetype dtstart);
-
-/** Get the next occurrence from an iterator */
-struct icaltimetype icalrecur_iterator_next(icalrecur_iterator*);
-
-void icalrecur_iterator_decrement_count(icalrecur_iterator*);
-
-/** Free the iterator */
-void icalrecur_iterator_free(icalrecur_iterator*);
-
-/**
- * Fills array up with at most 'count' time_t values, each
- * representing an occurrence time in seconds past the POSIX epoch
- */
-int icalrecur_expand_recurrence(char* rule, time_t start,
- int count, time_t* array);
-
-
-#endif
diff --git a/libical/src/libical/icalrestriction.c.in b/libical/src/libical/icalrestriction.c.in
deleted file mode 100644
index 05cdc9d413..0000000000
--- a/libical/src/libical/icalrestriction.c.in
+++ /dev/null
@@ -1,465 +0,0 @@
-/* -*- Mode: C -*- */
-/* ======================================================================
- File: icalrestriction.c
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-/*#line 7 "icalrestriction.c.in"*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalrestriction.h"
-#include "icalenums.h"
-#include "icalerror.h"
-
-#include <assert.h>
-#include <stdio.h> /* For snprintf */
-
-#define TMP_BUF_SIZE 1024
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-
-/* Define the structs for the restrictions. these data are filled out
-in machine generated code below */
-
-struct icalrestriction_property_record;
-
-typedef char* (*restriction_func)(struct icalrestriction_property_record* rec,icalcomponent* comp,icalproperty* prop);
-
-
-typedef struct icalrestriction_property_record {
- icalproperty_method method;
- icalcomponent_kind component;
- icalproperty_kind property;
- icalrestriction_kind restriction;
- restriction_func function;
-} icalrestriction_property_record;
-
-
-typedef struct icalrestriction_component_record {
- icalproperty_method method;
- icalcomponent_kind component;
- icalcomponent_kind subcomponent;
- icalrestriction_kind restriction;
- restriction_func function;
-} icalrestriction_component_record;
-
-icalrestriction_property_record*
-icalrestriction_get_property_restriction(icalproperty_method method,
- icalcomponent_kind component,
- icalproperty_kind property);
-icalrestriction_component_record*
-icalrestriction_get_component_restriction(icalproperty_method method,
- icalcomponent_kind component,
- icalcomponent_kind subcomponent);
-
-icalrestriction_component_record icalrestriction_component_records[];
-icalrestriction_property_record icalrestriction_property_records[];
-
-icalrestriction_property_record null_prop_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_UNKNOWN,0};
-icalrestriction_component_record null_comp_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_UNKNOWN,0};
-
-
-/** The each row gives the result of comparing a restriction against a
- count. The columns in each row represent 0,1,2+. '-1' indicates
- 'invalid, 'don't care' or 'needs more analysis' So, for
- ICAL_RESTRICTION_ONE, if there is 1 of a property with that
- restriction, it passes, but if there are 0 or 2+, it fails. */
-
-char compare_map[ICAL_RESTRICTION_UNKNOWN+1][3] = {
- { 1, 1, 1},/*ICAL_RESTRICTION_NONE*/
- { 1, 0, 0},/*ICAL_RESTRICTION_ZERO*/
- { 0, 1, 0},/*ICAL_RESTRICTION_ONE*/
- { 1, 1, 1},/*ICAL_RESTRICTION_ZEROPLUS*/
- { 0, 1, 1},/*ICAL_RESTRICTION_ONEPLUS*/
- { 1, 1, 0},/*ICAL_RESTRICTION_ZEROORONE*/
- { 1, 1, 0},/*ICAL_RESTRICTION_ONEEXCLUSIVE*/
- { 1, 1, 0},/*ICAL_RESTRICTION_ONEMUTUAL*/
- { 1, 1, 1} /*ICAL_RESTRICTION_UNKNOWN*/
-};
-
-char restr_string_map[ICAL_RESTRICTION_UNKNOWN+1][60] = {
- "unknown number",/*ICAL_RESTRICTION_NONE*/
- "0",/*ICAL_RESTRICTION_ZERO*/
- "1",/*ICAL_RESTRICTION_ONE*/
- "zero or more",/*ICAL_RESTRICTION_ZEROPLUS*/
- "one or more" ,/*ICAL_RESTRICTION_ONEPLUS*/
- "zero or one",/*ICAL_RESTRICTION_ZEROORONE*/
- "zero or one, exclusive with another property",/*ICAL_RESTRICTION_ONEEXCLUSIVE*/
- "zero or one, mutual with another property",/*ICAL_RESTRICTION_ONEMUTUAL*/
- "unknown number" /*ICAL_RESTRICTION_UNKNOWN*/
-};
-
-
-int
-icalrestriction_compare(icalrestriction_kind restr, int count){
-
- if ( restr < ICAL_RESTRICTION_NONE || restr > ICAL_RESTRICTION_UNKNOWN
- || count < 0){
- return -1;
- }
-
- if (count > 2) {
- count = 2;
- }
-
- return compare_map[restr][count];
-
-}
-
-/* Special case routines */
-
-char* icalrestriction_may_be_draft_final_canceled(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
-
- icalproperty_status stat = icalproperty_get_status(prop);
-
- if( !( stat == ICAL_STATUS_DRAFT ||
- stat == ICAL_STATUS_FINAL ||
- stat == ICAL_STATUS_CANCELLED )){
-
- return "Failed iTIP restrictions for STATUS property. Value must be one of DRAFT, FINAL, or CANCELED";
-
- }
-
- return 0;
-}
-
-char* icalrestriction_may_be_comp_need_process(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
- icalproperty_status stat = icalproperty_get_status(prop);
-
- if( !( stat == ICAL_STATUS_COMPLETED ||
- stat == ICAL_STATUS_NEEDSACTION ||
- stat == ICAL_STATUS_INPROCESS )){
-
- return "Failed iTIP restrictions for STATUS property. Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS";
-
- }
-
- return 0;
-}
-char* icalrestriction_may_be_tent_conf(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
- icalproperty_status stat = icalproperty_get_status(prop);
-
- if( !( stat == ICAL_STATUS_TENTATIVE ||
- stat == ICAL_STATUS_CONFIRMED )){
-
- return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE or CONFIRMED";
-
- }
-
- return 0;
-}
-char* icalrestriction_may_be_tent_conf_cancel(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
- icalproperty_status stat = icalproperty_get_status(prop);
-
- if( !( stat == ICAL_STATUS_TENTATIVE ||
- stat == ICAL_STATUS_CONFIRMED ||
- stat == ICAL_STATUS_CANCELLED )){
-
- return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE, CONFIRMED or CANCELED";
-
- }
-
- return 0;
-}
-
-char* icalrestriction_must_be_cancel_if_present(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
- /* This routine will not be called if prop == 0 */
- icalproperty_status stat = icalproperty_get_status(prop);
-
- if( stat != ICAL_STATUS_CANCELLED)
- {
- return "Failed iTIP restrictions for STATUS property. Value must be CANCELLED";
-
- }
-
-
- return 0;
-}
-
-char* icalrestriction_must_be_canceled_no_attendee(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
-
- /* Hack. see rfc2446, 3.2.5 CANCEL for porperty STATUS. I don't
- understand the note */
-
- return 0;
-}
-char* icalrestriction_must_be_recurring(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
- /* Hack */
- return 0;
-}
-char* icalrestriction_must_have_duration(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
-
- if( !icalcomponent_get_first_property(comp,ICAL_DURATION_PROPERTY)){
-
- return "Failed iTIP restrictions. This component must have a DURATION property";
-
- }
-
- return 0;
-}
-char* icalrestriction_must_have_repeat(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
- if( !icalcomponent_get_first_property(comp,ICAL_REPEAT_PROPERTY)){
-
- return "Failed iTIP restrictions. This component must have a REPEAT property";
-
- }
-
- return 0;
-}
-char* icalrestriction_must_if_tz_ref(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
-
- /* Hack */
- return 0;
-}
-char* icalrestriction_no_dtend(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
-
- if( icalcomponent_get_first_property(comp,ICAL_DTEND_PROPERTY)){
-
- return "Failed iTIP restrictions. The component must not have both DURATION and DTEND";
-
- }
-
- return 0;
-}
-char* icalrestriction_no_duration(icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop){
-
- /* _no_dtend takes care of this one */
- return 0;
-}
-char* icalrestriction_must_be_email(
- icalrestriction_property_record *rec,
- icalcomponent* comp,
- icalproperty* prop)
-{
- icalproperty_status stat = icalproperty_get_action(prop);
-
- if( !( stat == ICAL_ACTION_EMAIL)){
-
- return "Failed iTIP restrictions for ACTION property. Value must be EMAIL.";
-
- }
-
- return 0;
-}
-
-int icalrestriction_check_component(icalproperty_method method,
- icalcomponent* comp)
-{
- icalproperty_kind kind;
- icalcomponent_kind comp_kind;
- icalrestriction_kind restr;
- icalrestriction_property_record *prop_record;
- char* funcr = 0;
- icalproperty *prop;
-
- int count;
- int compare;
- int valid = 1;
-
- comp_kind = icalcomponent_isa(comp);
-
- /* Check all of the properties in this component */
-
- for(kind = ICAL_ANY_PROPERTY+1; kind != ICAL_NO_PROPERTY; kind++){
- count = icalcomponent_count_properties(comp, kind);
-
- prop_record = icalrestriction_get_property_restriction(method,
- comp_kind,
- kind);
-
- restr = prop_record->restriction;
-
- if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE ||
- restr == ICAL_RESTRICTION_ONEMUTUAL) {
-
- /* First treat is as a 0/1 restriction */
- restr = ICAL_RESTRICTION_ZEROORONE;
- compare = icalrestriction_compare(restr,count);
-
- } else {
-
- compare = icalrestriction_compare(restr,count);
- }
-
- assert(compare != -1);
-
- if (compare == 0){
- char temp[TMP_BUF_SIZE];
-
- snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d",
- icalenum_property_kind_to_string(kind),
- restr_string_map[restr], count);
-
- icalcomponent_add_property
- (comp,
- icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP),
- 0));
- }
-
-
- prop = icalcomponent_get_first_property(comp, kind);
-
- if (prop != 0 && prop_record->function !=0 ){
- funcr = prop_record->function(prop_record,comp,prop);
- }
-
- if(funcr !=0){
- icalcomponent_add_property
- (comp,
- icalproperty_vanew_xlicerror(
- funcr,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_INVALIDITIP),
- 0));
-
- compare = 0;
- }
-
- valid = valid && compare;
- }
-
-
-
- return valid;
-
-
-}
-
-int icalrestriction_check(icalcomponent* outer_comp)
-{
- icalcomponent_kind comp_kind;
- icalproperty_method method;
- icalcomponent* inner_comp;
- icalproperty *method_prop;
- int valid;
-
- icalerror_check_arg_rz( (outer_comp!=0), "outer comp");
-
-
- /* Get the Method value from the outer component */
-
- comp_kind = icalcomponent_isa(outer_comp);
-
- if (comp_kind != ICAL_VCALENDAR_COMPONENT){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return 0;
- }
-
- method_prop = icalcomponent_get_first_property(outer_comp,
- ICAL_METHOD_PROPERTY);
-
- if (method_prop == 0){
- method = ICAL_METHOD_NONE;
- } else {
- method = icalproperty_get_method(method_prop);
- }
-
-
- /* Check the VCALENDAR wrapper */
- valid = icalrestriction_check_component(ICAL_METHOD_NONE,outer_comp);
-
-
- /* Now check the inner components */
-
- for(inner_comp= icalcomponent_get_first_component(outer_comp,
- ICAL_ANY_COMPONENT);
- inner_comp != 0;
- inner_comp= icalcomponent_get_next_component(outer_comp,
- ICAL_ANY_COMPONENT)){
-
- valid = valid && icalrestriction_check_component(method,inner_comp);
-
- }
-
-
- return valid;
-
-}
-
-icalrestriction_property_record*
-icalrestriction_get_property_restriction(icalproperty_method method,
- icalcomponent_kind component,
- icalproperty_kind property)
-{
- int i;
-
- for(i = 0;
- icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE;
- i++){
-
- if (method == icalrestriction_property_records[i].method &&
- component == icalrestriction_property_records[i].component &&
- property == icalrestriction_property_records[i].property ){
- return &icalrestriction_property_records[i];
- }
- }
-
- return &null_prop_record;
-}
-
-
-icalrestriction_component_record*
-icalrestriction_get_component_restriction(icalproperty_method method,
- icalcomponent_kind component,
- icalcomponent_kind subcomponent)
-{
-
- int i;
-
- for(i = 0;
- icalrestriction_component_records[i].restriction != ICAL_RESTRICTION_NONE;
- i++){
-
- if (method == icalrestriction_component_records[i].method &&
- component == icalrestriction_component_records[i].component &&
- subcomponent == icalrestriction_component_records[i].subcomponent ){
- return &icalrestriction_component_records[i];
- }
- }
-
- return &null_comp_record;
-}
-
diff --git a/libical/src/libical/icalrestriction.h b/libical/src/libical/icalrestriction.h
deleted file mode 100644
index 409334cf28..0000000000
--- a/libical/src/libical/icalrestriction.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalrestriction.h
- CREATOR: eric 24 April 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalrestriction.h
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
-
-======================================================================*/
-
-#include "icalproperty.h"
-#include "icalcomponent.h"
-
-#ifndef ICALRESTRICTION_H
-#define ICALRESTRICTION_H
-
-/* These must stay in this order for icalrestriction_compare to work */
-typedef enum icalrestriction_kind {
- ICAL_RESTRICTION_NONE=0, /* 0 */
- ICAL_RESTRICTION_ZERO, /* 1 */
- ICAL_RESTRICTION_ONE, /* 2 */
- ICAL_RESTRICTION_ZEROPLUS, /* 3 */
- ICAL_RESTRICTION_ONEPLUS, /* 4 */
- ICAL_RESTRICTION_ZEROORONE, /* 5 */
- ICAL_RESTRICTION_ONEEXCLUSIVE, /* 6 */
- ICAL_RESTRICTION_ONEMUTUAL, /* 7 */
- ICAL_RESTRICTION_UNKNOWN /* 8 */
-} icalrestriction_kind;
-
-int
-icalrestriction_compare(icalrestriction_kind restr, int count);
-
-
-int
-icalrestriction_is_parameter_allowed(icalproperty_kind property,
- icalparameter_kind parameter);
-
-int icalrestriction_check(icalcomponent* comp);
-
-
-#endif /* !ICALRESTRICTION_H */
-
-
-
diff --git a/libical/src/libical/icaltime.c b/libical/src/libical/icaltime.c
deleted file mode 100644
index 371d679f7d..0000000000
--- a/libical/src/libical/icaltime.c
+++ /dev/null
@@ -1,1050 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaltime.c
- CREATOR: eric 02 June 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icaltime.h"
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-
-#include "astime.h" /* Julian data handling routines */
-
-#include "icalerror.h"
-#include "icalmemory.h"
-
-#include "icaltimezone.h"
-#include "icalvalue.h"
-
-#ifdef WIN32
-#include <Windows.h>
-
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-/*
- * Function to convert a struct tm time specification
- * to an ANSI time_t using the specified time zone.
- * This is different from the standard mktime() function
- * in that we dont want the automatic adjustments for
- * local daylight savings time applied to the result.
- * This function expects well-formed input.
- */
-static time_t make_time(struct tm *tm, int tzm)
-{
- time_t tim;
-
- static int days[] = { -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 };
-
- /* check that year specification within range */
-
- if (tm->tm_year < 70 || tm->tm_year > 138)
- return((time_t) -1);
-
- /* check that month specification within range */
-
- if (tm->tm_mon < 0 || tm->tm_mon > 11)
- return((time_t) -1);
-
- /* check for upper bound of Jan 17, 2038 (to avoid possibility of
- 32-bit arithmetic overflow) */
-
- if (tm->tm_year == 138) {
- if (tm->tm_mon > 0)
- return((time_t) -1);
- else if (tm->tm_mday > 17)
- return((time_t) -1);
- }
-
- /*
- * calculate elapsed days since start of the epoch (midnight Jan
- * 1st, 1970 UTC) 17 = number of leap years between 1900 and 1970
- * (number of leap days to subtract)
- */
-
- tim = (tm->tm_year - 70) * 365 + ((tm->tm_year - 1) / 4) - 17;
-
- /* add number of days elapsed in the current year */
-
- tim += days[tm->tm_mon];
-
- /* check and adjust for leap years (the leap year check only valid
- during the 32-bit era */
-
- if ((tm->tm_year & 3) == 0 && tm->tm_mon > 1)
- tim += 1;
-
- /* elapsed days to current date */
-
- tim += tm->tm_mday;
-
-
- /* calculate elapsed hours since start of the epoch */
-
- tim = tim * 24 + tm->tm_hour;
-
- /* calculate elapsed minutes since start of the epoch */
-
- tim = tim * 60 + tm->tm_min;
-
- /* adjust per time zone specification */
-
- tim -= tzm;
-
- /* calculate elapsed seconds since start of the epoch */
-
- tim = tim * 60 + tm->tm_sec;
-
- /* return number of seconds since start of the epoch */
-
- return(tim);
-}
-
-/** @brief Constructor (deprecated).
- *
- * Convert seconds past UNIX epoch to a timetype.
- *
- * @deprecated This constructor is deprecated and shouldn't be used in
- * new software. Use icaltime_from_timet_with_zone(time_t, int,
- * icaltimezone *) instead. In the meantime, calls to this method
- * return a floating time, which can always be converted to a local
- * time with an appropriate call to icaltime_convert_to_zone().
- */
-
-struct icaltimetype
-icaltime_from_timet(const time_t tm, const int is_date)
-{
-#ifndef NO_WARN_DEPRECATED
- icalerror_warn("icaltime_from_timet() is DEPRECATED, use icaltime_from_timet_with_zone() instead");
-#endif
-
- return icaltime_from_timet_with_zone(tm, is_date, 0);
-}
-
-
-/** @brief Constructor.
- *
- * @param tm The time
- * @param is_date Boolean: 1 means we should treat tm as a DATE
- * @param zone The timezone tm is in, NULL means to treat tm as a
- * floating time
- *
- * Return a new icaltime instance, initialized to the given time
- * expressed as seconds past UNIX epoch, optionally using the given
- * timezone.
- *
- * If the caller specifies the is_date param as TRUE, the returned
- * object is of DATE type, otherwise the input is meant to be of
- * DATE-TIME type.
- * If the zone is not specified (NULL zone param) the time is taken
- * to be floating, that is, valid in any timezone. Note that, in
- * addition to the uses specified in [RFC2445], this can be used
- * when doing simple math on couples of times.
- * If the zone is specified (UTC or otherwise), it's stored in the
- * object and it's used as the native timezone for this object.
- * This means that the caller can convert this time to a different
- * target timezone with no need to store the source timezone.
- *
- */
-struct icaltimetype
-icaltime_from_timet_with_zone(const time_t tm, const int is_date,
- const icaltimezone *zone)
-{
- struct icaltimetype tt = icaltime_null_time();
- struct tm t;
- icaltimezone *utc_zone;
-
- /* Convert the time_t to a struct tm. We can trust gmtime for this. */
-#ifdef HAVE_GMTIME_R
- gmtime_r(&tm, &t);
-#else
- {
- struct tm *t_ptr = gmtime(&tm);
- t = *t_ptr;
- }
-#endif
-
- tt.year = t.tm_year + 1900;
- tt.month = t.tm_mon + 1;
- tt.day = t.tm_mday;
-
- if (is_date) {
- tt.is_date = 1;
- return tt;
- }
-
- tt.hour = t.tm_hour;
- tt.minute = t.tm_min;
- tt.second = t.tm_sec;
-
- /* If it's a floating time, we don't do any conversion. */
- if (zone == NULL) {
- return tt;
- }
-
- utc_zone = icaltimezone_get_utc_timezone ();
- tt.is_utc = (zone == utc_zone) ? 1 : 0;
- tt.zone = zone;
-
- return tt;
-}
-
-/** @brief Constructor.
- *
- * Returns an icaltimetype representing the current time in the given timezone.
- */
-struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone)
-{
- return icaltime_from_timet_with_zone (time (NULL), 0, zone);
-}
-
-/** @brief Constructor.
- *
- * Returns an icaltimetype representing the current day.
- */
-struct icaltimetype icaltime_today(void)
-{
- return icaltime_from_timet_with_zone (time (NULL), 1, NULL);
-}
-
-/** @brief Return the time as seconds past the UNIX epoch
- *
- * While this function is not currently deprecated, it probably won't do
- * what you expect, unless you know what you're doing. In particular, you
- * should only pass an icaltime in UTC, since no conversion is done. Even
- * in that case, it's probably better to just use
- * icaltime_as_timet_with_zone().
- */
-time_t icaltime_as_timet(const struct icaltimetype tt)
-{
- struct tm stm;
- time_t t;
-
- /* If the time is the special null time, return 0. */
- if (icaltime_is_null_time(tt)) {
- return 0;
- }
-
- /* Copy the icaltimetype to a struct tm. */
- memset (&stm, 0, sizeof (struct tm));
-
- if (icaltime_is_date(tt)) {
- stm.tm_sec = stm.tm_min = stm.tm_hour = 0;
- } else {
- stm.tm_sec = tt.second;
- stm.tm_min = tt.minute;
- stm.tm_hour = tt.hour;
- }
-
- stm.tm_mday = tt.day;
- stm.tm_mon = tt.month-1;
- stm.tm_year = tt.year-1900;
- stm.tm_isdst = -1;
-
- t = make_time(&stm, 0);
-
- return t;
-
-}
-
-/** Return the time as seconds past the UNIX epoch, using the
- * given timezone.
- *
- * This convenience method combines a call to icaltime_convert_to_zone()
- * with a call to icaltime_as_timet().
- * If the input timezone is null, no conversion is done; that is, the
- * time is simply returned as time_t in its native timezone.
- */
-time_t icaltime_as_timet_with_zone(const struct icaltimetype _tt,
- const icaltimezone *zone)
-{
- struct icaltimetype tt = _tt;
- struct tm stm;
- time_t t;
-
- /* If the time is the special null time, return 0. */
- if (icaltime_is_null_time(tt)) {
- return 0;
- }
-
- if (zone != NULL) {
- tt = icaltime_convert_to_zone(_tt, zone);
- }
-
- /* Copy the icaltimetype to a struct tm. */
- memset (&stm, 0, sizeof (struct tm));
-
- if (icaltime_is_date(tt)) {
- stm.tm_sec = stm.tm_min = stm.tm_hour = 0;
- } else {
- stm.tm_sec = tt.second;
- stm.tm_min = tt.minute;
- stm.tm_hour = tt.hour;
- }
-
- stm.tm_mday = tt.day;
- stm.tm_mon = tt.month-1;
- stm.tm_year = tt.year-1900;
- stm.tm_isdst = -1;
-
- t = make_time(&stm, 0);
-
- return t;
-}
-
-/**
- * Return a string represention of the time, in RFC2445 format. The
- * string is owned by libical
- */
-const char* icaltime_as_ical_string(const struct icaltimetype tt)
-{
- size_t size = 17;
- char* buf = icalmemory_new_buffer(size);
-
- if(tt.is_date){
- snprintf(buf, size,"%04d%02d%02d",tt.year,tt.month,tt.day);
- } else {
- char* fmt;
- if(tt.is_utc){
- fmt = "%04d%02d%02dT%02d%02d%02dZ";
- } else {
- fmt = "%04d%02d%02dT%02d%02d%02d";
- }
- snprintf(buf, size,fmt,tt.year,tt.month,tt.day,
- tt.hour,tt.minute,tt.second);
- }
-
- icalmemory_add_tmp_buffer(buf);
-
- return buf;
-
-}
-
-/**
- * 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.
- *
- * Implementation note: we call icaltime_adjust() with no adjustment.
- */
-struct icaltimetype icaltime_normalize(const struct icaltimetype tt)
-{
- struct icaltimetype ret = tt;
- icaltime_adjust(&ret, 0, 0, 0, 0);
- return ret;
-}
-
-
-
-/** @brief Contructor.
- *
- * Create a time from an ISO format string.
- *
- * @todo If the given string specifies a DATE-TIME not in UTC, there
- * is no way to know if this is a floating time or really refers to a
- * timezone. We should probably add a new constructor:
- * icaltime_from_string_with_zone()
- */
-struct icaltimetype icaltime_from_string(const char* str)
-{
- struct icaltimetype tt = icaltime_null_time();
- int size;
-
- icalerror_check_arg_re(str!=0,"str",icaltime_null_time());
-
- size = strlen(str);
-
- if(size == 15) { /* floating time */
- tt.is_utc = 0;
- tt.is_date = 0;
- } else if (size == 16) { /* UTC time, ends in 'Z'*/
- if(str[15] != 'Z')
- goto FAIL;
-
- tt.is_utc = 1;
- tt.zone = icaltimezone_get_utc_timezone();
- tt.is_date = 0;
- } else if (size == 8) { /* A DATE */
- tt.is_utc = 1;
- tt.is_date = 1;
- } else { /* error */
- goto FAIL;
- }
-
- if(tt.is_date == 1){
- if (sscanf(str,"%04d%02d%02d",&tt.year,&tt.month,&tt.day) < 3)
- goto FAIL;
- } else {
- char tsep;
- if (sscanf(str,"%04d%02d%02d%c%02d%02d%02d",&tt.year,&tt.month,&tt.day,
- &tsep,&tt.hour,&tt.minute,&tt.second) < 7)
- goto FAIL;
-
- if(tsep != 'T')
- goto FAIL;
- }
-
- return tt;
-
-FAIL:
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return icaltime_null_time();
-}
-
-
-/* Returns whether the specified year is a leap year. Year is the normal year,
- e.g. 2001. */
-int
-icaltime_is_leap_year (const int year)
-{
-
- if (year <= 1752)
- return (year % 4 == 0);
- else
- return ( (year % 4==0) && (year % 100 !=0 )) || (year % 400 == 0);
-}
-
-static int _days_in_month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
-
-int icaltime_days_in_month(const int month, const int year)
-{
-
- int days = _days_in_month[month];
-
- assert(month > 0);
- assert(month <= 12);
-
- if( month == 2){
- days += icaltime_is_leap_year(year);
- }
-
- return days;
-}
-
-/* 1-> Sunday, 7->Saturday */
-int icaltime_day_of_week(const struct icaltimetype t){
- UTinstant jt;
-
- memset(&jt,0,sizeof(UTinstant));
-
- jt.year = t.year;
- jt.month = t.month;
- jt.day = t.day;
- jt.i_hour = 0;
- jt.i_minute = 0;
- jt.i_second = 0;
-
- juldat(&jt);
-
- return jt.weekday + 1;
-}
-
-/** Day of the year that the first day of the week (Sunday) is on.
- */
-int icaltime_start_doy_week(const struct icaltimetype t, int fdow){
- UTinstant jt;
- int delta;
-
- memset(&jt,0,sizeof(UTinstant));
-
- jt.year = t.year;
- jt.month = t.month;
- jt.day = t.day;
- jt.i_hour = 0;
- jt.i_minute = 0;
- jt.i_second = 0;
-
- juldat(&jt);
- caldat(&jt);
-
- delta = jt.weekday - (fdow - 1);
- if (delta < 0) delta += 7;
- return jt.day_of_year - delta;
-}
-
-/** Day of the year that the first day of the week (Sunday) is on.
- *
- * @deprecated Doesn't take into account different week start days.
- */
-int icaltime_start_doy_of_week(const struct icaltimetype t){
-
-#ifndef NO_WARN_DEPRECATED
- icalerror_warn("icaltime_start_doy_of_week() is DEPRECATED, use\
- icaltime_start_doy_week() instead");
-#endif
-
- return icaltime_start_doy_week(t, 1);
-}
-
-/**
- * @todo Doesn't take into account the start day of the
- * week. strftime assumes that weeks start on Monday.
- */
-int icaltime_week_number(const struct icaltimetype ictt)
-{
- UTinstant jt;
-
- memset(&jt,0,sizeof(UTinstant));
-
- jt.year = ictt.year;
- jt.month = ictt.month;
- jt.day = ictt.day;
- jt.i_hour = 0;
- jt.i_minute = 0;
- jt.i_second = 0;
-
- juldat(&jt);
- caldat(&jt);
-
- return (jt.day_of_year - jt.weekday) / 7;
-}
-
-/* The first array is for non-leap years, the second for leap years*/
-static const int days_in_year[2][13] =
-{ /* jan feb mar apr may jun jul aug sep oct nov dec */
- { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
- { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
-};
-
-/**
- * Returns the day of the year, counting from 1 (Jan 1st).
- */
-int icaltime_day_of_year(const struct icaltimetype t){
- int is_leap = icaltime_is_leap_year (t.year);
-
- return days_in_year[is_leap][t.month - 1] + t.day;
-}
-
-/** @brief Contructor.
- *
- * Create a new time, given a day of year and a year.
- */
-/* Jan 1 is day #1, not 0 */
-struct icaltimetype icaltime_from_day_of_year(const int _doy, const int _year)
-{
- struct icaltimetype tt = icaltime_null_date();
- int is_leap;
- int month;
- int doy = _doy;
- int year = _year;
-
- is_leap = icaltime_is_leap_year(year);
-
- /* Zero and neg numbers represent days of the previous year */
- if(doy <1){
- year--;
- is_leap = icaltime_is_leap_year(year);
- doy += days_in_year[is_leap][12];
- } else if(doy > days_in_year[is_leap][12]){
- /* Move on to the next year*/
- is_leap = icaltime_is_leap_year(year);
- doy -= days_in_year[is_leap][12];
- year++;
- }
-
- tt.year = year;
-
- for (month = 11; month >= 0; month--) {
- if (doy > days_in_year[is_leap][month]) {
- tt.month = month + 1;
- tt.day = doy - days_in_year[is_leap][month];
- break;
- }
- }
-
- return tt;
-}
-
-/** @brief Constructor.
- *
- * Return a null time, which is guaranteed not to be equal to any other time.
- */
-struct icaltimetype icaltime_null_time(void)
-{
- struct icaltimetype t;
- memset(&t,0,sizeof(struct icaltimetype));
-
- return t;
-}
-
-/** @brief Constructor.
- *
- * Return a null date.
- */
-struct icaltimetype icaltime_null_date(void)
-{
- struct icaltimetype t;
- memset(&t,0,sizeof(struct icaltimetype));
-
- t.is_date = 1;
-
- /*
- * Init to -1 to match what icalyacc.y used to do.
- * Does anything depend on this?
- */
- t.hour = -1;
- t.minute = -1;
- t.second = -1;
-
- return 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(const struct icaltimetype t){
- if(t.is_utc > 1 || t.is_utc < 0 ||
- t.year < 0 || t.year > 3000 ||
- t.is_date > 1 || t.is_date < 0){
- return 0;
- } else {
- return 1;
- }
-
-}
-
-/** @brief Returns true if time is a DATE
- */
-int icaltime_is_date(const struct icaltimetype t) {
-
- return t.is_date;
-}
-
-/** @brief Returns true if time is relative to UTC zone
- *
- * @todo We should only check the zone
- */
-int icaltime_is_utc(const struct icaltimetype t) {
-
- return t.is_utc;
-}
-
-/**
- * Return true if the time is null.
- */
-int icaltime_is_null_time(const struct icaltimetype t)
-{
- if (t.second +t.minute+t.hour+t.day+t.month+t.year == 0){
- return 1;
- }
-
- return 0;
-
-}
-
-/**
- * Return -1, 0, or 1 to indicate that a<b, a==b, or a>b.
- * This calls icaltime_compare function after converting them to the utc
- * timezone.
- */
-
-int icaltime_compare(const struct icaltimetype a_in, const struct icaltimetype b_in)
-{
- int retval = 0;
- struct icaltimetype a, b;
-
- a = icaltime_convert_to_zone(a_in, icaltimezone_get_utc_timezone());
- b = icaltime_convert_to_zone(b_in, icaltimezone_get_utc_timezone());
-
- if (a.year > b.year)
- retval = 1;
- else if (a.year < b.year)
- retval = -1;
-
- else if (a.month > b.month)
- retval = 1;
- else if (a.month < b.month)
- retval = -1;
-
- else if (a.day > b.day)
- retval = 1;
- else if (a.day < b.day)
- retval = -1;
-
- /* if both are dates, we are done */
- if (a.is_date && b.is_date)
- return retval;
-
- /* else, if we already found a difference, we are done */
- else if (retval != 0)
- return retval;
-
- /* else, if only one is a date (and we already know the date part is equal),
- then the other is greater */
- else if (b.is_date)
- retval = 1;
- else if (a.is_date)
- retval = -1;
-
- else if (a.hour > b.hour)
- retval = 1;
- else if (a.hour < b.hour)
- retval = -1;
-
- else if (a.minute > b.minute)
- retval = 1;
- else if (a.minute < b.minute)
- retval = -1;
-
- else if (a.second > b.second)
- retval = 1;
- else if (a.second < b.second)
- retval = -1;
-
- return retval;
-}
-
-/**
- * like icaltime_compare, but only use the date parts.
- */
-
-int
-icaltime_compare_date_only(const struct icaltimetype a_in, const struct icaltimetype b_in)
-{
- int retval;
- struct icaltimetype a, b;
-
- a = icaltime_convert_to_zone(a_in, icaltimezone_get_utc_timezone());
- b = icaltime_convert_to_zone(b_in, icaltimezone_get_utc_timezone());
-
- if (a.year > b.year)
- retval = 1;
- else if (a.year < b.year)
- retval = -1;
-
- else if (a.month > b.month)
- retval = 1;
- else if (a.month < b.month)
- retval = -1;
-
- else if (a.day > b.day)
- retval = 1;
- else if (a.day < b.day)
- retval = -1;
-
- else
- retval = 0;
-
- return retval;
-}
-
-/* These are defined in icalduration.c:
-struct icaltimetype icaltime_add(struct icaltimetype t,
- struct icaldurationtype d)
-struct icaldurationtype icaltime_subtract(struct icaltimetype t1,
- struct icaltimetype t2)
-*/
-
-
-
-/** @brief Internal, shouldn't be part of the public API
- *
- * Adds (or subtracts) a time from a icaltimetype.
- * NOTE: This function is exactly the same as icaltimezone_adjust_change()
- * except for the type of the first parameter.
- */
-void
-icaltime_adjust(struct icaltimetype *tt, const int days, const int hours,
- const int minutes, const int seconds) {
-
- int second, minute, hour, day;
- int minutes_overflow, hours_overflow, days_overflow = 0, years_overflow;
- int days_in_month;
-
- /* If we are passed a date make sure to ignore hour minute and second */
- if (tt->is_date)
- goto IS_DATE;
-
- /* Add on the seconds. */
- second = tt->second + seconds;
- tt->second = second % 60;
- minutes_overflow = second / 60;
- if (tt->second < 0) {
- tt->second += 60;
- minutes_overflow--;
- }
-
- /* Add on the minutes. */
- minute = tt->minute + minutes + minutes_overflow;
- tt->minute = minute % 60;
- hours_overflow = minute / 60;
- if (tt->minute < 0) {
- tt->minute += 60;
- hours_overflow--;
- }
-
- /* Add on the hours. */
- hour = tt->hour + hours + hours_overflow;
- tt->hour = hour % 24;
- days_overflow = hour / 24;
- if (tt->hour < 0) {
- tt->hour += 24;
- days_overflow--;
- }
-
-IS_DATE:
- /* Normalize the month. We do this before handling the day since we may
- need to know what month it is to get the number of days in it.
- Note that months are 1 to 12, so we have to be a bit careful. */
- if (tt->month >= 13) {
- years_overflow = (tt->month - 1) / 12;
- tt->year += years_overflow;
- tt->month -= years_overflow * 12;
- } else if (tt->month <= 0) {
- /* 0 to -11 is -1 year out, -12 to -23 is -2 years. */
- years_overflow = (tt->month / 12) - 1;
- tt->year += years_overflow;
- tt->month -= years_overflow * 12;
- }
-
- /* Add on the days. */
- day = tt->day + days + days_overflow;
- if (day > 0) {
- for (;;) {
- days_in_month = icaltime_days_in_month (tt->month, tt->year);
- if (day <= days_in_month)
- break;
-
- tt->month++;
- if (tt->month >= 13) {
- tt->year++;
- tt->month = 1;
- }
-
- day -= days_in_month;
- }
- } else {
- while (day <= 0) {
- if (tt->month == 1) {
- tt->year--;
- tt->month = 12;
- } else {
- tt->month--;
- }
-
- day += icaltime_days_in_month (tt->month, tt->year);
- }
- }
- tt->day = day;
-}
-
-/** @brief Convert time to a given timezone
- *
- * Convert a time from its native timezone to a given timezone.
- *
- * If tt is a date, the returned time is an exact
- * copy of the input. If it's a floating time, the returned object
- * represents the same time translated to the given timezone.
- * Otherwise the time will be converted to the new
- * time zone, and its native timezone set to the right timezone.
- */
-struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt,
- icaltimezone *zone) {
-
- struct icaltimetype ret = tt;
-
- /* If it's a date do nothing */
- if (tt.is_date) {
- return ret;
- }
-
- if (tt.zone == zone) {
- return ret;
- }
-
- /* If it's a floating time we don't want to adjust the time */
- if (tt.zone != NULL) {
- icaltimezone_convert_time(&ret, tt.zone, zone);
- }
-
- ret.zone = zone;
- if (zone == icaltimezone_get_utc_timezone()) {
- ret.is_utc = 1;
- } else {
- ret.is_utc = 0;
- }
-
- return ret;
-}
-
-const icaltimezone *
-icaltime_get_timezone(const struct icaltimetype t) {
-
- return t.zone;
-}
-
-char *
-icaltime_get_tzid(const struct icaltimetype t) {
-
- if (t.zone != NULL) {
- return icaltimezone_get_tzid(t.zone);
- } else {
- return NULL;
- }
-}
-
-/** @brief Set the timezone
- *
- * Force the icaltime to be interpreted relative to another timezone.
- * If you need to do timezone conversion, applying offset adjustments,
- * then you should use icaltime_convert_to_timezone instead.
- */
-struct icaltimetype
-icaltime_set_timezone(struct icaltimetype *t, const icaltimezone *zone) {
-
- /* If it's a date do nothing */
- if (t->is_date) {
- return *t;
- }
-
- if (t->zone == zone) {
- return *t;
- }
-
- t->zone = zone;
- if (zone == icaltimezone_get_utc_timezone()) {
- t->is_utc = 1;
- } else {
- t->is_utc = 0;
- }
-
- return *t;
-}
-
-
-/**
- * @brief builds an icaltimespan given a start time, end time and busy value.
- *
- * @param dtstart The beginning time of the span, can be a date-time
- * or just a date.
- * @param dtend The end time of the span.
- * @param is_busy A boolean value, 0/1.
- * @return A span using the supplied values.
- *
- * returned span contains times specified in UTC.
- */
-
-icaltime_span icaltime_span_new(struct icaltimetype dtstart,
- struct icaltimetype dtend,
- int is_busy)
-{
- icaltime_span span;
-
- span.is_busy = is_busy;
-
- span.start = icaltime_as_timet_with_zone(dtstart,
- icaltimezone_get_utc_timezone());
-
- if (icaltime_is_null_time(dtend)) {
- if (!icaltime_is_date(dtstart)) {
- /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION
- it takes no time */
- span.end = span.start;
- return span;
- } else {
- dtend = dtstart;
- }
- }
-
- span.end = icaltime_as_timet_with_zone(dtend, icaltimezone_get_utc_timezone());
-
- if (icaltime_is_date(dtstart)) {
- /* no time specified, go until the end of the day..*/
- span.end += 60*60*24 - 1;
- }
- return span;
-}
-
-
-/** @brief Returns true if the two spans overlap
- *
- * @param s1 1st span to test
- * @param s2 2nd span to test
- * @return boolean value
- *
- * The result is calculated by testing if the start time of s1 is contained
- * by the s2 span, or if the end time of s1 is contained by the s2 span.
- *
- * Also returns true if the spans are equal.
- *
- * Note, this will return false if the spans are adjacent.
- */
-
-int icaltime_span_overlaps(icaltime_span *s1,
- icaltime_span *s2)
-{
- /* s1->start in s2 */
- if (s1->start > s2->start && s1->start < s2->end)
- return 1;
-
- /* s1->end in s2 */
- if (s1->end > s2->start && s1->end < s2->end)
- return 1;
-
- /* s2->start in s1 */
- if (s2->start > s1->start && s2->start < s1->end)
- return 1;
-
- /* s2->end in s1 */
- if (s2->end > s1->start && s2->end < s1->end)
- return 1;
-
- if (s1->start == s2->start && s1->end == s2->end)
- return 1;
-
- return 0;
-}
-
-/** @brief Returns true if the span is totally within the containing
- * span
- *
- * @param s The span to test for.
- * @param container The span to test against.
- * @return boolean value.
- *
- */
-
-int icaltime_span_contains(icaltime_span *s,
- icaltime_span *container)
-{
-
- if ((s->start >= container->start && s->start < container->end) &&
- (s->end <= container->end && s->end > container->start))
- return 1;
-
- return 0;
-}
diff --git a/libical/src/libical/icaltime.h b/libical/src/libical/icaltime.h
deleted file mode 100644
index 7b7374f5df..0000000000
--- a/libical/src/libical/icaltime.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icaltime.h
- CREATOR: eric 02 June 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-/** @file icaltime.h
- * @brief struct icaltimetype is a pseudo-object that abstracts time
- * handling.
- *
- * It can represent either a DATE or a DATE-TIME (floating, UTC or in a
- * given timezone), and it keeps track internally of its native timezone.
- *
- * The typical usage is to call the correct constructor specifying the
- * desired timezone. If this is not known until a later time, the
- * correct behavior is to specify a NULL timezone and call
- * icaltime_convert_to_zone() at a later time.
- *
- * There are several ways to create a new icaltimetype:
- *
- * - icaltime_null_time()
- * - icaltime_null_date()
- * - icaltime_current_time_with_zone()
- * - icaltime_today()
- * - icaltime_from_timet_with_zone(time_t tm, int is_date,
- * icaltimezone *zone)
- * - icaltime_from_string_with_zone(const char* str, icaltimezone *zone)
- * - icaltime_from_day_of_year(int doy, int year)
- * - icaltime_from_week_number(int week_number, int year)
- *
- * italtimetype objects can be converted to different formats:
- *
- * - icaltime_as_timet(struct icaltimetype tt)
- * - icaltime_as_timet_with_zone(struct icaltimetype tt,
- * icaltimezone *zone)
- * - icaltime_as_ical_string(struct icaltimetype tt)
- *
- * Accessor methods include:
- *
- * - icaltime_get_timezone(struct icaltimetype t)
- * - icaltime_get_tzid(struct icaltimetype t)
- * - icaltime_set_timezone(struct icaltimetype t, const icaltimezone *zone)
- * - icaltime_day_of_year(struct icaltimetype t)
- * - icaltime_day_of_week(struct icaltimetype t)
- * - icaltime_start_doy_week(struct icaltimetype t, int fdow)
- * - icaltime_week_number(struct icaltimetype t)
- *
- * Query methods include:
- *
- * - icaltime_is_null_time(struct icaltimetype t)
- * - icaltime_is_valid_time(struct icaltimetype t)
- * - icaltime_is_date(struct icaltimetype t)
- * - icaltime_is_utc(struct icaltimetype t)
- * - icaltime_is_floating(struct icaltimetype t)
- *
- * Modify, compare and utility methods include:
- *
- * - icaltime_add(struct icaltimetype t, struct icaldurationtype d)
- * - icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2)
- * - icaltime_compare_with_zone(struct icaltimetype a,struct icaltimetype b)
- * - icaltime_compare(struct icaltimetype a,struct icaltimetype b)
- * - icaltime_compare_date_only(struct icaltimetype a,
- * struct icaltimetype b)
- * - icaltime_adjust(struct icaltimetype *tt, int days, int hours,
- * int minutes, int seconds);
- * - icaltime_normalize(struct icaltimetype t);
- * - icaltime_convert_to_zone(const struct icaltimetype tt,
- * icaltimezone *zone);
- */
-
-#ifndef ICALTIME_H
-#define ICALTIME_H
-
-#include <time.h>
-
-/* An opaque struct representing a timezone. We declare this here to avoid
- a circular dependancy. */
-#ifndef ICALTIMEZONE_DEFINED
-#define ICALTIMEZONE_DEFINED
-typedef struct _icaltimezone icaltimezone;
-#endif
-
-/** icaltime_span is returned by icalcomponent_get_span() */
-struct icaltime_span {
- time_t start; /**< in UTC */
- time_t end; /**< in UTC */
- int is_busy; /**< 1->busy time, 0-> free time */
-};
-
-typedef struct icaltime_span icaltime_span;
-
-/*
- * FIXME
- *
- * is_utc is redundant, and might be considered a minor optimization.
- * It might be deprecated, so you should use icaltime_is_utc() instead.
- */
-struct icaltimetype
-{
- int year; /**< Actual year, e.g. 2001. */
- int month; /**< 1 (Jan) to 12 (Dec). */
- 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. */
-
- int is_daylight; /**< 1 -> time is in daylight savings time. */
-
- const icaltimezone *zone; /**< timezone */
-};
-
-typedef struct icaltimetype icaltimetype;
-
-/** 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 a null date */
-struct icaltimetype icaltime_null_date(void);
-
-/** Returns the current time in the given timezone, as an icaltimetype. */
-struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone);
-
-/** Returns the current day as an icaltimetype, with is_date set. */
-struct icaltimetype icaltime_today(void);
-
-/** Convert seconds past UNIX epoch to a timetype*/
-struct icaltimetype icaltime_from_timet(const time_t v, const int is_date);
-
-/** Convert seconds past UNIX epoch to a timetype, using timezones. */
-struct icaltimetype icaltime_from_timet_with_zone(const time_t tm,
- const int is_date, const icaltimezone *zone);
-
-/** create a time from an ISO format string */
-struct icaltimetype icaltime_from_string(const char* str);
-
-/** create a time from an ISO format string */
-struct icaltimetype icaltime_from_string_with_zone(const char* str,
- const icaltimezone *zone);
-
-/** Create a new time, given a day of year and a year. */
-struct icaltimetype icaltime_from_day_of_year(const int doy,
- const int year);
-
-/** @brief Contructor (TODO).
- * Create a new time from a weeknumber and a year. */
-struct icaltimetype icaltime_from_week_number(const int week_number,
- const int year);
-
-/** Return the time as seconds past the UNIX epoch */
-time_t icaltime_as_timet(const struct icaltimetype);
-
-/** Return the time as seconds past the UNIX epoch, using timezones. */
-time_t icaltime_as_timet_with_zone(const struct icaltimetype tt,
- const icaltimezone *zone);
-
-/** Return a string represention of the time, in RFC2445 format. The
- string is owned by libical */
-const char* icaltime_as_ical_string(const struct icaltimetype tt);
-
-/** @brief Return the timezone */
-const icaltimezone *icaltime_get_timezone(const struct icaltimetype t);
-
-/** @brief Return the tzid, or NULL for a floating time */
-char *icaltime_get_tzid(const struct icaltimetype t);
-
-/** @brief Set the timezone */
-struct icaltimetype icaltime_set_timezone(struct icaltimetype *t,
- const icaltimezone *zone);
-
-/** Return the day of the year of the given time */
-int icaltime_day_of_year(const struct icaltimetype t);
-
-/** Return the day of the week of the given time. Sunday is 1 */
-int icaltime_day_of_week(const struct icaltimetype t);
-
-/** Return the day of the year for the Sunday of the week that the
- given time is within. */
-int icaltime_start_doy_of_week(const struct icaltimetype t);
-
-/** Return the day of the year for the first day of the week that the
- given time is within. */
-int icaltime_start_doy_week(const struct icaltimetype t, int fdow);
-
-/** Return the week number for the week the given time is within */
-int icaltime_week_number(const struct icaltimetype t);
-
-/** Return true of the time is null. */
-int icaltime_is_null_time(const 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(const struct icaltimetype t);
-
-/** @brief Returns true if time is of DATE type, false if DATE-TIME */
-int icaltime_is_date(const struct icaltimetype t);
-
-/** @brief Returns true if time is relative to UTC zone */
-int icaltime_is_utc(const struct icaltimetype t);
-
-/** @brief Returns true if time is a floating time */
-int icaltime_is_floating(const struct icaltimetype t);
-
-/** Return -1, 0, or 1 to indicate that a<b, a==b or a>b */
-int icaltime_compare_with_zone(const struct icaltimetype a,
- const struct icaltimetype b);
-
-/** Return -1, 0, or 1 to indicate that a<b, a==b or a>b */
-int icaltime_compare(const struct icaltimetype a,
- const struct icaltimetype b);
-
-/** like icaltime_compare, but only use the date parts. */
-int icaltime_compare_date_only(const struct icaltimetype a,
- const struct icaltimetype b);
-
-/** Adds or subtracts a number of days, hours, minutes and seconds. */
-void icaltime_adjust(struct icaltimetype *tt, const int days,
- const int hours, const int minutes, const int seconds);
-
-/** Normalize the icaltime, so that all fields are within the normal range. */
-struct icaltimetype icaltime_normalize(const struct icaltimetype t);
-
-/** convert tt, of timezone tzid, into a utc time. Does nothing if the
- time is already UTC. */
-struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt,
- icaltimezone *zone);
-
-/** Return the number of days in the given month */
-int icaltime_days_in_month(const int month, const int year);
-
-
-/** @brief calculate an icaltimespan given a start and end time. */
-struct icaltime_span icaltime_span_new(struct icaltimetype dtstart,
- struct icaltimetype dtend,
- int is_busy);
-
-/** @brief Returns true if the two spans overlap **/
-int icaltime_span_overlaps(icaltime_span *s1,
- icaltime_span *s2);
-
-/** @brief Returns true if the span is totally within the containing
- * span
- */
-int icaltime_span_contains(icaltime_span *s,
- icaltime_span *container);
-
-
-#endif /* !ICALTIME_H */
-
-
diff --git a/libical/src/libical/icaltimezone.c b/libical/src/libical/icaltimezone.c
deleted file mode 100644
index c1c5e52785..0000000000
--- a/libical/src/libical/icaltimezone.c
+++ /dev/null
@@ -1,1709 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*======================================================================
- FILE: icaltimezone.c
- CREATOR: Damon Chaplin 15 March 2001
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2001, Damon Chaplin
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
-======================================================================*/
-
-/** @file icaltimezone.c
- * @brief implementation of timezone handling routines
- **/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "icalproperty.h"
-#include "icalarray.h"
-#include "icalerror.h"
-#include "icalparser.h"
-#include "icaltimezone.h"
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define PACKAGE_DATA_DIR "/Projects/libical"
-#endif
-
-/** This is the toplevel directory where the timezone data is installed in. */
-#define ZONEINFO_DIRECTORY PACKAGE_DATA_DIR "/zoneinfo"
-
-/** The prefix we use to uniquely identify TZIDs. */
-#define TZID_PREFIX "/softwarestudio.org/"
-#define TZID_PREFIX_LEN 20
-
-/** This is the filename of the file containing the city names and
- coordinates of all the builtin timezones. */
-#define ZONES_TAB_FILENAME "zones.tab"
-
-/** This is the number of years of extra coverage we do when expanding
- the timezone changes. */
-#define ICALTIMEZONE_EXTRA_COVERAGE 5
-
-/** This is the maximum year we will expand to. time_t values only go up to
- somewhere around 2037. */
-#define ICALTIMEZONE_MAX_YEAR 2035
-
-struct _icaltimezone {
- char *tzid;
- /**< The unique ID of this timezone,
- e.g. "/softwarestudio.org/Olson_20010601_1/Africa/Banjul".
- This should only be used to identify a VTIMEZONE. It is not
- meant to be displayed to the user in any form. */
-
- char *location;
- /**< The location for the timezone, e.g. "Africa/Accra" for the
- Olson database. We look for this in the "LOCATION" or
- "X-LIC-LOCATION" properties of the VTIMEZONE component. It
- isn't a standard property yet. This will be NULL if no location
- is found in the VTIMEZONE. */
-
- char *tznames;
- /**< This will be set to a combination of the TZNAME properties
- from the last STANDARD and DAYLIGHT components in the
- VTIMEZONE, e.g. "EST/EDT". If they both use the same TZNAME,
- or only one type of component is found, then only one TZNAME
- will appear, e.g. "AZOT". If no TZNAME is found this will be
- NULL. */
-
- double latitude;
- double longitude;
- /**< The coordinates of the city, in degrees. */
-
- icalcomponent *component;
- /**< The toplevel VTIMEZONE component loaded from the .ics file for this
- timezone. If we need to regenerate the changes data we need this. */
-
- icaltimezone *builtin_timezone;
- /**< If this is not NULL it points to the builtin icaltimezone
- that the above TZID refers to. This icaltimezone should be used
- instead when accessing the timezone changes data, so that the
- expanded timezone changes data is shared between calendar
- components. */
-
- int end_year;
- /**< This is the last year for which we have expanded the data to.
- If we need to calculate a date past this we need to expand the
- timezone component data from scratch. */
-
- icalarray *changes;
- /**< A dynamically-allocated array of time zone changes, sorted by the
- time of the change in local time. So we can do fast binary-searches
- to convert from local time to UTC. */
-};
-
-typedef struct _icaltimezonechange icaltimezonechange;
-
-struct _icaltimezonechange {
- int utc_offset;
- /**< The offset to add to UTC to get local time, in seconds. */
-
- int prev_utc_offset;
- /**< The offset to add to UTC, before this change, in seconds. */
-
- int year; /**< Actual year, e.g. 2001. */
- int month; /**< 1 (Jan) to 12 (Dec). */
- int day;
- int hour;
- int minute;
- int second;
- /**< The time that the change came into effect, in UTC.
- Note that the prev_utc_offset applies to this local time,
- since we haven't changed to the new offset yet. */
-
- int is_daylight;
- /**< Whether this is STANDARD or DAYLIGHT time. */
-};
-
-
-/** An array of icaltimezones for the builtin timezones. */
-static icalarray *builtin_timezones = NULL;
-
-/** This is the special UTC timezone, which isn't in builtin_timezones. */
-static icaltimezone utc_timezone = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-static char* zone_files_directory = NULL;
-
-static void icaltimezone_reset (icaltimezone *zone);
-static char* icaltimezone_get_location_from_vtimezone (icalcomponent *component);
-static char* icaltimezone_get_tznames_from_vtimezone (icalcomponent *component);
-static void icaltimezone_expand_changes (icaltimezone *zone,
- int end_year);
-static void icaltimezone_expand_vtimezone (icalcomponent *comp,
- int end_year,
- icalarray *changes);
-static int icaltimezone_compare_change_fn (const void *elem1,
- const void *elem2);
-
-static int icaltimezone_find_nearby_change (icaltimezone *zone,
- icaltimezonechange *change);
-
-static void icaltimezone_adjust_change (icaltimezonechange *tt,
- int days,
- int hours,
- int minutes,
- int seconds);
-
-static void icaltimezone_init (icaltimezone *zone);
-
-/** Gets the TZID, LOCATION/X-LIC-LOCATION, and TZNAME properties from the
- VTIMEZONE component and places them in the icaltimezone. It returns 1 on
- success, or 0 if the TZID can't be found. */
-static int icaltimezone_get_vtimezone_properties (icaltimezone *zone,
- icalcomponent *component);
-
-
-static void icaltimezone_load_builtin_timezone (icaltimezone *zone);
-
-static void icaltimezone_ensure_coverage (icaltimezone *zone,
- int end_year);
-
-
-static void icaltimezone_init_builtin_timezones(void);
-
-static void icaltimezone_parse_zone_tab (void);
-
-static char* icaltimezone_load_get_line_fn (char *s,
- size_t size,
- void *data);
-
-static void format_utc_offset (int utc_offset,
- char *buffer);
-
-static char* get_zone_directory(void);
-
-
-/** Creates a new icaltimezone. */
-icaltimezone*
-icaltimezone_new (void)
-{
- icaltimezone *zone;
-
- zone = (icaltimezone*) malloc (sizeof (icaltimezone));
- if (!zone) {
- icalerror_set_errno (ICAL_NEWFAILED_ERROR);
- return NULL;
- }
-
- icaltimezone_init (zone);
-
- return zone;
-}
-
-
-/** Frees all memory used for the icaltimezone. */
-void
-icaltimezone_free (icaltimezone *zone,
- int free_struct)
-{
- icaltimezone_reset (zone);
- if (free_struct)
- free (zone);
-}
-
-
-/** Resets the icaltimezone to the initial state, freeing most of the fields. */
-static void
-icaltimezone_reset (icaltimezone *zone)
-{
- if (zone->tzid)
- free (zone->tzid);
- if (zone->location)
- free (zone->location);
- if (zone->tznames)
- free (zone->tznames);
- if (zone->component)
- icalcomponent_free (zone->component);
- if (zone->changes)
- icalarray_free (zone->changes);
-
- icaltimezone_init (zone);
-}
-
-
-/** Initializes an icaltimezone. */
-static void
-icaltimezone_init (icaltimezone *zone)
-{
- zone->tzid = NULL;
- zone->location = NULL;
- zone->tznames = NULL;
- zone->latitude = 0.0;
- zone->longitude = 0.0;
- zone->component = NULL;
- zone->builtin_timezone = NULL;
- zone->end_year = 0;
- zone->changes = NULL;
-}
-
-
-/** Gets the TZID, LOCATION/X-LIC-LOCATION and TZNAME properties of
- the VTIMEZONE component and stores them in the icaltimezone. It
- returns 1 on success, or 0 if the TZID can't be found. Note that
- it expects the zone to be initialized or reset - it doesn't free
- any old values. */
-static int
-icaltimezone_get_vtimezone_properties (icaltimezone *zone,
- icalcomponent *component)
-{
- icalproperty *prop;
- const char *tzid;
-
- prop = icalcomponent_get_first_property (component, ICAL_TZID_PROPERTY);
- if (!prop)
- return 0;
-
- /* A VTIMEZONE MUST have a TZID, or a lot of our code won't work. */
- tzid = icalproperty_get_tzid (prop);
- if (!tzid)
- return 0;
-
- zone->tzid = strdup (tzid);
- zone->component = component;
- if ( zone->location != 0 ) free ( zone->location );
- zone->location = icaltimezone_get_location_from_vtimezone (component);
- zone->tznames = icaltimezone_get_tznames_from_vtimezone (component);
-
- return 1;
-}
-
-/** Gets the LOCATION or X-LIC-LOCATION property from a VTIMEZONE. */
-static char*
-icaltimezone_get_location_from_vtimezone (icalcomponent *component)
-{
- icalproperty *prop;
- const char *location;
- const char *name;
-
- prop = icalcomponent_get_first_property (component,
- ICAL_LOCATION_PROPERTY);
- if (prop) {
- location = icalproperty_get_location (prop);
- if (location)
- return strdup (location);
- }
-
- prop = icalcomponent_get_first_property (component, ICAL_X_PROPERTY);
- while (prop) {
- name = icalproperty_get_x_name (prop);
- if (name && !strcmp (name, "X-LIC-LOCATION")) {
- location = icalproperty_get_x (prop);
- if (location)
- return strdup (location);
- }
- prop = icalcomponent_get_next_property (component,
- ICAL_X_PROPERTY);
- }
-
- return NULL;
-}
-
-
-/** Gets the TZNAMEs used for the last STANDARD & DAYLIGHT components
- in a VTIMEZONE. If both STANDARD and DAYLIGHT components use the
- same TZNAME, it returns that. If they use different TZNAMEs, it
- formats them like "EST/EDT". The returned string should be freed by
- the caller. */
-static char*
-icaltimezone_get_tznames_from_vtimezone (icalcomponent *component)
-{
- icalcomponent *comp;
- icalcomponent_kind type;
- icalproperty *prop;
- struct icaltimetype dtstart;
- struct icaldatetimeperiodtype rdate;
- const char *current_tzname;
- const char *standard_tzname = NULL, *daylight_tzname = NULL;
- struct icaltimetype standard_max_date, daylight_max_date;
- struct icaltimetype current_max_date;
-
- standard_max_date = icaltime_null_time();
- daylight_max_date = icaltime_null_time();
-
- /* Step through the STANDARD & DAYLIGHT subcomponents. */
- comp = icalcomponent_get_first_component (component, ICAL_ANY_COMPONENT);
- while (comp) {
- type = icalcomponent_isa (comp);
- if (type == ICAL_XSTANDARD_COMPONENT
- || type == ICAL_XDAYLIGHT_COMPONENT) {
- current_max_date = icaltime_null_time ();
- current_tzname = NULL;
-
- /* Step through the properties. We want to find the TZNAME, and
- the largest DTSTART or RDATE. */
- prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY);
- while (prop) {
- switch (icalproperty_isa (prop)) {
- case ICAL_TZNAME_PROPERTY:
- current_tzname = icalproperty_get_tzname (prop);
- break;
-
- case ICAL_DTSTART_PROPERTY:
- dtstart = icalproperty_get_dtstart (prop);
- if (icaltime_compare (dtstart, current_max_date) > 0)
- current_max_date = dtstart;
-
- break;
-
- case ICAL_RDATE_PROPERTY:
- rdate = icalproperty_get_rdate (prop);
- if (icaltime_compare (rdate.time, current_max_date) > 0)
- current_max_date = rdate.time;
-
- break;
-
- default:
- break;
- }
-
- prop = icalcomponent_get_next_property (comp,
- ICAL_ANY_PROPERTY);
- }
-
- if (current_tzname) {
- if (type == ICAL_XSTANDARD_COMPONENT) {
- if (!standard_tzname
- || icaltime_compare (current_max_date,
- standard_max_date) > 0) {
- standard_max_date = current_max_date;
- standard_tzname = current_tzname;
- }
- } else {
- if (!daylight_tzname
- || icaltime_compare (current_max_date,
- daylight_max_date) > 0) {
- daylight_max_date = current_max_date;
- daylight_tzname = current_tzname;
- }
- }
- }
- }
-
- comp = icalcomponent_get_next_component (component,
- ICAL_ANY_COMPONENT);
- }
-
- /* Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME
- strings, which is totally useless. So we return NULL in that case. */
- if (standard_tzname && !strcmp (standard_tzname, "Standard Time"))
- return NULL;
-
- /* If both standard and daylight TZNAMEs were found, if they are the same
- we return just one, else we format them like "EST/EDT". */
- if (standard_tzname && daylight_tzname) {
- unsigned int standard_len, daylight_len;
- char *tznames;
-
- if (!strcmp (standard_tzname, daylight_tzname))
- return strdup (standard_tzname);
-
- standard_len = strlen (standard_tzname);
- daylight_len = strlen (daylight_tzname);
- tznames = malloc (standard_len + daylight_len + 2);
- strcpy (tznames, standard_tzname);
- tznames[standard_len] = '/';
- strcpy (tznames + standard_len + 1, daylight_tzname);
- return tznames;
- } else {
- const char *tznames;
-
- /* If either of the TZNAMEs was found just return that, else NULL. */
- tznames = standard_tzname ? standard_tzname : daylight_tzname;
- return tznames ? strdup (tznames) : NULL;
- }
-}
-
-
-static void
-icaltimezone_ensure_coverage (icaltimezone *zone,
- int end_year)
-{
- /* When we expand timezone changes we always expand at least up to this
- year, plus ICALTIMEZONE_EXTRA_COVERAGE. */
- static int icaltimezone_minimum_expansion_year = -1;
-
- int changes_end_year;
-
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
-
- if (icaltimezone_minimum_expansion_year == -1) {
- struct icaltimetype today = icaltime_today();
- icaltimezone_minimum_expansion_year = today.year;
- }
-
- changes_end_year = end_year;
- if (changes_end_year < icaltimezone_minimum_expansion_year)
- changes_end_year = icaltimezone_minimum_expansion_year;
-
- changes_end_year += ICALTIMEZONE_EXTRA_COVERAGE;
-
- if (changes_end_year > ICALTIMEZONE_MAX_YEAR)
- changes_end_year = ICALTIMEZONE_MAX_YEAR;
-
- if (!zone->changes || zone->end_year < end_year)
- icaltimezone_expand_changes (zone, changes_end_year);
-}
-
-
-static void
-icaltimezone_expand_changes (icaltimezone *zone,
- int end_year)
-{
- icalarray *changes;
- icalcomponent *comp;
-
-#if 0
- printf ("\nExpanding changes for: %s to year: %i\n", zone->tzid, end_year);
-#endif
-
- changes = icalarray_new (sizeof (icaltimezonechange), 32);
- if (!changes)
- return;
-
- /* Scan the STANDARD and DAYLIGHT subcomponents. */
- comp = icalcomponent_get_first_component (zone->component,
- ICAL_ANY_COMPONENT);
- while (comp) {
- icaltimezone_expand_vtimezone (comp, end_year, changes);
- comp = icalcomponent_get_next_component (zone->component,
- ICAL_ANY_COMPONENT);
- }
-
- /* Sort the changes. We may have duplicates but I don't think it will
- matter. */
- icalarray_sort (changes, icaltimezone_compare_change_fn);
-
- if (zone->changes)
- icalarray_free (zone->changes);
-
- zone->changes = changes;
- zone->end_year = end_year;
-}
-
-
-static void
-icaltimezone_expand_vtimezone (icalcomponent *comp,
- int end_year,
- icalarray *changes)
-{
- icaltimezonechange change;
- icalproperty *prop;
- struct icaltimetype dtstart, occ;
- struct icalrecurrencetype rrule;
- icalrecur_iterator* rrule_iterator;
- struct icaldatetimeperiodtype rdate;
- int found_dtstart = 0, found_tzoffsetto = 0, found_tzoffsetfrom = 0;
- int has_recurrence = 0;
-
- /* First we check if it is a STANDARD or DAYLIGHT component, and
- just return if it isn't. */
- if (icalcomponent_isa (comp) == ICAL_XSTANDARD_COMPONENT)
- change.is_daylight = 0;
- else if (icalcomponent_isa (comp) == ICAL_XDAYLIGHT_COMPONENT)
- change.is_daylight = 1;
- else
- return;
-
- /* Step through each of the properties to find the DTSTART,
- TZOFFSETFROM and TZOFFSETTO. We can't expand recurrences here
- since we need these properties before we can do that. */
- prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY);
- while (prop) {
- switch (icalproperty_isa (prop)) {
- case ICAL_DTSTART_PROPERTY:
- dtstart = icalproperty_get_dtstart (prop);
- found_dtstart = 1;
- break;
- case ICAL_TZOFFSETTO_PROPERTY:
- change.utc_offset = icalproperty_get_tzoffsetto (prop);
- /*printf ("Found TZOFFSETTO: %i\n", change.utc_offset);*/
- found_tzoffsetto = 1;
- break;
- case ICAL_TZOFFSETFROM_PROPERTY:
- change.prev_utc_offset = icalproperty_get_tzoffsetfrom (prop);
- /*printf ("Found TZOFFSETFROM: %i\n", change.prev_utc_offset);*/
- found_tzoffsetfrom = 1;
- break;
- case ICAL_RDATE_PROPERTY:
- case ICAL_RRULE_PROPERTY:
- has_recurrence = 1;
- break;
- default:
- /* Just ignore any other properties. */
- break;
- }
-
- prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY);
- }
-
- /* If we didn't find a DTSTART, TZOFFSETTO and TZOFFSETFROM we have to
- ignore the component. FIXME: Add an error property? */
- if (!found_dtstart || !found_tzoffsetto || !found_tzoffsetfrom)
- return;
-
-#if 0
- printf ("\n Expanding component DTSTART (Y/M/D): %i/%i/%i %i:%02i:%02i\n",
- dtstart.year, dtstart.month, dtstart.day,
- dtstart.hour, dtstart.minute, dtstart.second);
-#endif
-
- /* If the STANDARD/DAYLIGHT component has no recurrence data, we just add
- a single change for the DTSTART. */
- if (!has_recurrence) {
- change.year = dtstart.year;
- change.month = dtstart.month;
- change.day = dtstart.day;
- change.hour = dtstart.hour;
- change.minute = dtstart.minute;
- change.second = dtstart.second;
-
- /* Convert to UTC. */
- icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset);
-
-#if 0
- printf (" Appending single DTSTART (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n",
- change.year, change.month, change.day,
- change.hour, change.minute, change.second);
-#endif
-
- /* Add the change to the array. */
- icalarray_append (changes, &change);
- return;
- }
-
- /* The component has recurrence data, so we expand that now. */
- prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY);
- while (prop) {
-#if 0
- printf ("Expanding property...\n");
-#endif
- switch (icalproperty_isa (prop)) {
- case ICAL_RDATE_PROPERTY:
- rdate = icalproperty_get_rdate (prop);
- change.year = rdate.time.year;
- change.month = rdate.time.month;
- change.day = rdate.time.day;
- /* RDATEs with a DATE value inherit the time from
- the DTSTART. */
- if (icaltime_is_date(rdate.time)) {
- change.hour = dtstart.hour;
- change.minute = dtstart.minute;
- change.second = dtstart.second;
- } else {
- change.hour = rdate.time.hour;
- change.minute = rdate.time.minute;
- change.second = rdate.time.second;
-
- /* The spec was a bit vague about whether RDATEs were in local
- time or UTC so we support both to be safe. So if it is in
- UTC we have to add the UTC offset to get a local time. */
- if (!icaltime_is_utc(rdate.time))
- icaltimezone_adjust_change (&change, 0, 0, 0,
- -change.prev_utc_offset);
- }
-
-#if 0
- printf (" Appending RDATE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n",
- change.year, change.month, change.day,
- change.hour, change.minute, change.second);
-#endif
-
- icalarray_append (changes, &change);
- break;
- case ICAL_RRULE_PROPERTY:
- rrule = icalproperty_get_rrule (prop);
-
- /* If the rrule UNTIL value is set and is in UTC, we convert it to
- a local time, since the recurrence code has no way to convert
- it itself. */
- if (!icaltime_is_null_time (rrule.until) && rrule.until.is_utc) {
-#if 0
- printf (" Found RRULE UNTIL in UTC.\n");
-#endif
-
- /* To convert from UTC to a local time, we use the TZOFFSETFROM
- since that is the offset from UTC that will be in effect
- when each of the RRULE occurrences happens. */
- icaltime_adjust (&rrule.until, 0, 0, 0,
- change.prev_utc_offset);
- rrule.until.is_utc = 0;
- }
-
- rrule_iterator = icalrecur_iterator_new (rrule, dtstart);
- for (;;) {
- occ = icalrecur_iterator_next (rrule_iterator);
- if (occ.year > end_year || icaltime_is_null_time (occ))
- break;
-
- change.year = occ.year;
- change.month = occ.month;
- change.day = occ.day;
- change.hour = occ.hour;
- change.minute = occ.minute;
- change.second = occ.second;
-
-#if 0
- printf (" Appending RRULE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n",
- change.year, change.month, change.day,
- change.hour, change.minute, change.second);
-#endif
-
- icaltimezone_adjust_change (&change, 0, 0, 0,
- -change.prev_utc_offset);
-
- icalarray_append (changes, &change);
- }
-
- icalrecur_iterator_free (rrule_iterator);
- break;
- default:
- break;
- }
-
- prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY);
- }
-}
-
-
-/** A function to compare 2 icaltimezonechange elements, used for qsort(). */
-static int
-icaltimezone_compare_change_fn (const void *elem1,
- const void *elem2)
-{
- const icaltimezonechange *change1, *change2;
- int retval;
-
- change1 = elem1;
- change2 = elem2;
-
- if (change1->year < change2->year)
- retval = -1;
- else if (change1->year > change2->year)
- retval = 1;
-
- else if (change1->month < change2->month)
- retval = -1;
- else if (change1->month > change2->month)
- retval = 1;
-
- else if (change1->day < change2->day)
- retval = -1;
- else if (change1->day > change2->day)
- retval = 1;
-
- else if (change1->hour < change2->hour)
- retval = -1;
- else if (change1->hour > change2->hour)
- retval = 1;
-
- else if (change1->minute < change2->minute)
- retval = -1;
- else if (change1->minute > change2->minute)
- retval = 1;
-
- else if (change1->second < change2->second)
- retval = -1;
- else if (change1->second > change2->second)
- retval = 1;
-
- else
- retval = 0;
-
- return retval;
-}
-
-
-
-void
-icaltimezone_convert_time (struct icaltimetype *tt,
- icaltimezone *from_zone,
- icaltimezone *to_zone)
-{
- int utc_offset, is_daylight;
-
- /* If the time is a DATE value or both timezones are the same, or we are
- converting a floating time, we don't need to do anything. */
- if (icaltime_is_date(*tt) || from_zone == to_zone || from_zone == NULL)
- return;
-
- /* Convert the time to UTC by getting the UTC offset and subtracting it. */
- utc_offset = icaltimezone_get_utc_offset (from_zone, tt, NULL);
- icaltime_adjust (tt, 0, 0, 0, -utc_offset);
-
- /* Now we convert the time to the new timezone by getting the UTC offset
- of our UTC time and adding it. */
- utc_offset = icaltimezone_get_utc_offset_of_utc_time (to_zone, tt,
- &is_daylight);
- tt->is_daylight = is_daylight;
- icaltime_adjust (tt, 0, 0, 0, utc_offset);
-}
-
-
-
-
-/** @deprecated This API wasn't updated when we changed icaltimetype to contain its own
- timezone. Also, this takes a pointer instead of the struct. */
-/* Calculates the UTC offset of a given local time in the given
- timezone. It is the number of seconds to add to UTC to get local
- time. The is_daylight flag is set to 1 if the time is in
- daylight-savings time. */
-int
-icaltimezone_get_utc_offset (icaltimezone *zone,
- struct icaltimetype *tt,
- int *is_daylight)
-{
- icaltimezonechange *zone_change, *prev_zone_change, tt_change, tmp_change;
- int change_num, step, utc_offset_change, cmp;
- int change_num_to_use;
- int want_daylight;
-
- if (tt == NULL)
- return 0;
-
- if (is_daylight)
- *is_daylight = 0;
-
- /* For local times and UTC return 0. */
- if (zone == NULL || zone == &utc_timezone)
- return 0;
-
- /* Use the builtin icaltimezone if possible. */
- if (zone->builtin_timezone)
- zone = zone->builtin_timezone;
-
- /* Make sure the changes array is expanded up to the given time. */
- icaltimezone_ensure_coverage (zone, tt->year);
-
- if (!zone->changes || zone->changes->num_elements == 0)
- return 0;
-
- /* Copy the time parts of the icaltimetype to an icaltimezonechange so we
- can use our comparison function on it. */
- tt_change.year = tt->year;
- tt_change.month = tt->month;
- tt_change.day = tt->day;
- tt_change.hour = tt->hour;
- tt_change.minute = tt->minute;
- tt_change.second = tt->second;
-
- /* This should find a change close to the time, either the change before
- it or the change after it. */
- change_num = icaltimezone_find_nearby_change (zone, &tt_change);
-
- /* Sanity check. */
- icalerror_assert (change_num >= 0,
- "Negative timezone change index");
- icalerror_assert (change_num < zone->changes->num_elements,
- "Timezone change index out of bounds");
-
- /* Now move backwards or forwards to find the timezone change that applies
- to tt. It should only have to do 1 or 2 steps. */
- zone_change = icalarray_element_at (zone->changes, change_num);
- step = 1;
- change_num_to_use = -1;
- for (;;) {
- /* Copy the change, so we can adjust it. */
- tmp_change = *zone_change;
-
- /* If the clock is going backward, check if it is in the region of time
- that is used twice. If it is, use the change with the daylight
- setting which matches tt, or use standard if we don't know. */
- if (tmp_change.utc_offset < tmp_change.prev_utc_offset) {
- /* If the time change is at 2:00AM local time and the clock is
- going back to 1:00AM we adjust the change to 1:00AM. We may
- have the wrong change but we'll figure that out later. */
- icaltimezone_adjust_change (&tmp_change, 0, 0, 0,
- tmp_change.utc_offset);
- } else {
- icaltimezone_adjust_change (&tmp_change, 0, 0, 0,
- tmp_change.prev_utc_offset);
- }
-
- cmp = icaltimezone_compare_change_fn (&tt_change, &tmp_change);
-
- /* If the given time is on or after this change, then this change may
- apply, but we continue as a later change may be the right one.
- If the given time is before this change, then if we have already
- found a change which applies we can use that, else we need to step
- backwards. */
- if (cmp >= 0)
- change_num_to_use = change_num;
- else
- step = -1;
-
- /* If we are stepping backwards through the changes and we have found
- a change that applies, then we know this is the change to use so
- we exit the loop. */
- if (step == -1 && change_num_to_use != -1)
- break;
-
- change_num += step;
-
- /* If we go past the start of the changes array, then we have no data
- for this time so we return a UTC offset of 0. */
- if (change_num < 0)
- return 0;
-
- if (change_num >= zone->changes->num_elements)
- break;
-
- zone_change = icalarray_element_at (zone->changes, change_num);
- }
-
- /* If we didn't find a change to use, then we have a bug! */
- icalerror_assert (change_num_to_use != -1,
- "No applicable timezone change found");
-
- /* Now we just need to check if the time is in the overlapped region of
- time when clocks go back. */
- zone_change = icalarray_element_at (zone->changes, change_num_to_use);
-
- utc_offset_change = zone_change->utc_offset - zone_change->prev_utc_offset;
- if (utc_offset_change < 0 && change_num_to_use > 0) {
- tmp_change = *zone_change;
- icaltimezone_adjust_change (&tmp_change, 0, 0, 0,
- tmp_change.prev_utc_offset);
-
- if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) < 0) {
- /* The time is in the overlapped region, so we may need to use
- either the current zone_change or the previous one. If the
- time has the is_daylight field set we use the matching change,
- else we use the change with standard time. */
- prev_zone_change = icalarray_element_at (zone->changes,
- change_num_to_use - 1);
-
- /* I was going to add an is_daylight flag to struct icaltimetype,
- but iCalendar doesn't let us distinguish between standard and
- daylight time anyway, so there's no point. So we just use the
- standard time instead. */
- want_daylight = (tt->is_daylight == 1) ? 1 : 0;
-
-#if 0
- if (zone_change->is_daylight == prev_zone_change->is_daylight)
- printf (" **** Same is_daylight setting\n");
-#endif
-
- if (zone_change->is_daylight != want_daylight
- && prev_zone_change->is_daylight == want_daylight)
- zone_change = prev_zone_change;
- }
- }
-
- /* Now we know exactly which timezone change applies to the time, so
- we can return the UTC offset and whether it is a daylight time. */
- if (is_daylight)
- *is_daylight = zone_change->is_daylight;
- return zone_change->utc_offset;
-}
-
-
-/** @deprecated This API wasn't updated when we changed icaltimetype to contain its own
- timezone. Also, this takes a pointer instead of the struct. */
-/** Calculates the UTC offset of a given UTC time in the given
- timezone. It is the number of seconds to add to UTC to get local
- time. The is_daylight flag is set to 1 if the time is in
- daylight-savings time. */
-int
-icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone,
- struct icaltimetype *tt,
- int *is_daylight)
-{
- icaltimezonechange *zone_change, tt_change, tmp_change;
- int change_num, step, change_num_to_use;
-
- if (is_daylight)
- *is_daylight = 0;
-
- /* For local times and UTC return 0. */
- if (zone == NULL || zone == &utc_timezone)
- return 0;
-
- /* Use the builtin icaltimezone if possible. */
- if (zone->builtin_timezone)
- zone = zone->builtin_timezone;
-
- /* Make sure the changes array is expanded up to the given time. */
- icaltimezone_ensure_coverage (zone, tt->year);
-
- if (!zone->changes || zone->changes->num_elements == 0)
- return 0;
-
- /* Copy the time parts of the icaltimetype to an icaltimezonechange so we
- can use our comparison function on it. */
- tt_change.year = tt->year;
- tt_change.month = tt->month;
- tt_change.day = tt->day;
- tt_change.hour = tt->hour;
- tt_change.minute = tt->minute;
- tt_change.second = tt->second;
-
- /* This should find a change close to the time, either the change before
- it or the change after it. */
- change_num = icaltimezone_find_nearby_change (zone, &tt_change);
-
- /* Sanity check. */
- icalerror_assert (change_num >= 0,
- "Negative timezone change index");
- icalerror_assert (change_num < zone->changes->num_elements,
- "Timezone change index out of bounds");
-
- /* Now move backwards or forwards to find the timezone change that applies
- to tt. It should only have to do 1 or 2 steps. */
- zone_change = icalarray_element_at (zone->changes, change_num);
- step = 1;
- change_num_to_use = -1;
- for (;;) {
- /* Copy the change and adjust it to UTC. */
- tmp_change = *zone_change;
-
- /* If the given time is on or after this change, then this change may
- apply, but we continue as a later change may be the right one.
- If the given time is before this change, then if we have already
- found a change which applies we can use that, else we need to step
- backwards. */
- if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) >= 0)
- change_num_to_use = change_num;
- else
- step = -1;
-
- /* If we are stepping backwards through the changes and we have found
- a change that applies, then we know this is the change to use so
- we exit the loop. */
- if (step == -1 && change_num_to_use != -1)
- break;
-
- change_num += step;
-
- /* If we go past the start of the changes array, then we have no data
- for this time so we return a UTC offset of 0. */
- if (change_num < 0)
- return 0;
-
- if (change_num >= zone->changes->num_elements)
- break;
-
- zone_change = icalarray_element_at (zone->changes, change_num);
- }
-
- /* If we didn't find a change to use, then we have a bug! */
- icalerror_assert (change_num_to_use != -1,
- "No applicable timezone change found");
-
- /* Now we know exactly which timezone change applies to the time, so
- we can return the UTC offset and whether it is a daylight time. */
- zone_change = icalarray_element_at (zone->changes, change_num_to_use);
- if (is_daylight)
- *is_daylight = zone_change->is_daylight;
-
- return zone_change->utc_offset;
-}
-
-
-/** Returns the index of a timezone change which is close to the time
- given in change. */
-static int
-icaltimezone_find_nearby_change (icaltimezone *zone,
- icaltimezonechange *change)
-{
- icaltimezonechange *zone_change;
- int lower, upper, middle, cmp;
-
- /* Do a simple binary search. */
- lower = middle = 0;
- upper = zone->changes->num_elements;
-
- while (lower < upper) {
- middle = (lower + upper) / 2;
- zone_change = icalarray_element_at (zone->changes, middle);
- cmp = icaltimezone_compare_change_fn (change, zone_change);
- if (cmp == 0)
- break;
- else if (cmp < 0)
- upper = middle;
- else
- lower = middle + 1;
- }
-
- return middle;
-}
-
-
-
-
-/** Adds (or subtracts) a time from a icaltimezonechange. NOTE: This
- function is exactly the same as icaltime_adjust() except for the
- type of the first parameter. */
-static void
-icaltimezone_adjust_change (icaltimezonechange *tt,
- int days,
- int hours,
- int minutes,
- int seconds)
-{
- int second, minute, hour, day;
- int minutes_overflow, hours_overflow, days_overflow;
- int days_in_month;
-
- /* Add on the seconds. */
- second = tt->second + seconds;
- tt->second = second % 60;
- minutes_overflow = second / 60;
- if (tt->second < 0) {
- tt->second += 60;
- minutes_overflow--;
- }
-
- /* Add on the minutes. */
- minute = tt->minute + minutes + minutes_overflow;
- tt->minute = minute % 60;
- hours_overflow = minute / 60;
- if (tt->minute < 0) {
- tt->minute += 60;
- hours_overflow--;
- }
-
- /* Add on the hours. */
- hour = tt->hour + hours + hours_overflow;
- tt->hour = hour % 24;
- days_overflow = hour / 24;
- if (tt->hour < 0) {
- tt->hour += 24;
- days_overflow--;
- }
-
- /* Add on the days. */
- day = tt->day + days + days_overflow;
- if (day > 0) {
- for (;;) {
- days_in_month = icaltime_days_in_month (tt->month, tt->year);
- if (day <= days_in_month)
- break;
-
- tt->month++;
- if (tt->month >= 13) {
- tt->year++;
- tt->month = 1;
- }
-
- day -= days_in_month;
- }
- } else {
- while (day <= 0) {
- if (tt->month == 1) {
- tt->year--;
- tt->month = 12;
- } else {
- tt->month--;
- }
-
- day += icaltime_days_in_month (tt->month, tt->year);
- }
- }
- tt->day = day;
-}
-
-
-char*
-icaltimezone_get_tzid (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return NULL. */
- if (!zone)
- return NULL;
-
- if (!zone->tzid)
- icaltimezone_load_builtin_timezone (zone);
-
- return zone->tzid;
-}
-
-
-char*
-icaltimezone_get_location (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return NULL. */
- if (!zone)
- return NULL;
-
- /* Note that for builtin timezones this comes from zones.tab so we don't
- need to check the timezone is loaded here. */
- return zone->location;
-}
-
-
-char*
-icaltimezone_get_tznames (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return NULL. */
- if (!zone)
- return NULL;
-
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
-
- return zone->tznames;
-}
-
-
-/** Returns the latitude of a builtin timezone. */
-double
-icaltimezone_get_latitude (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return 0. */
- if (!zone)
- return 0.0;
-
- /* Note that for builtin timezones this comes from zones.tab so we don't
- need to check the timezone is loaded here. */
- return zone->latitude;
-}
-
-
-/** Returns the longitude of a builtin timezone. */
-double
-icaltimezone_get_longitude (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return 0. */
- if (!zone)
- return 0.0;
-
- /* Note that for builtin timezones this comes from zones.tab so we don't
- need to check the timezone is loaded here. */
- return zone->longitude;
-}
-
-
-/** Returns the VTIMEZONE component of a timezone. */
-icalcomponent*
-icaltimezone_get_component (icaltimezone *zone)
-{
- /* If this is a floating time, without a timezone, return NULL. */
- if (!zone)
- return NULL;
-
- if (!zone->component)
- icaltimezone_load_builtin_timezone (zone);
-
- return zone->component;
-}
-
-
-/** Sets the VTIMEZONE component of an icaltimezone, initializing the
- tzid, location & tzname fields. It returns 1 on success or 0 on
- failure, i.e. no TZID was found. */
-int
-icaltimezone_set_component (icaltimezone *zone,
- icalcomponent *comp)
-{
- icaltimezone_reset (zone);
- return icaltimezone_get_vtimezone_properties (zone, comp);
-}
-
-
-/* Returns the timezone name to display to the user. We prefer to use the
- Olson city name, but fall back on the TZNAME, or finally the TZID. We don't
- want to use "" as it may be wrongly interpreted as a floating time.
- Do not free the returned string. */
-char*
-icaltimezone_get_display_name (icaltimezone *zone)
-{
- char *display_name;
-
- display_name = icaltimezone_get_location (zone);
- if (!display_name)
- display_name = icaltimezone_get_tznames (zone);
- if (!display_name) {
- display_name = icaltimezone_get_tzid (zone);
- /* Outlook will strip out X-LIC-LOCATION property and so all
- we get back in the iTIP replies is the TZID. So we see if
- this is one of our TZIDs and if so we jump to the city name
- at the end of it. */
- if (display_name
- && !strncmp (display_name, TZID_PREFIX, TZID_PREFIX_LEN)) {
- /* Get the location, which is after the 3rd '/' char. */
- char *p;
- int num_slashes = 0;
- for (p = display_name; *p; p++) {
- if (*p == '/') {
- num_slashes++;
- if (num_slashes == 3)
- return p + 1;
- }
- }
- }
- }
-
- return display_name;
-}
-
-
-icalarray*
-icaltimezone_array_new (void)
-{
- return icalarray_new (sizeof (icaltimezone), 16);
-}
-
-
-void
-icaltimezone_array_append_from_vtimezone (icalarray *timezones,
- icalcomponent *child)
-{
- icaltimezone zone;
-
- icaltimezone_init (&zone);
- if (icaltimezone_get_vtimezone_properties (&zone, child))
- icalarray_append (timezones, &zone);
-}
-
-
-void
-icaltimezone_array_free (icalarray *timezones)
-{
- icaltimezone *zone;
- int i;
-
- if ( timezones )
- {
- for (i = 0; i < timezones->num_elements; i++) {
- zone = icalarray_element_at (timezones, i);
- icaltimezone_free (zone, 0);
- }
-
- icalarray_free (timezones);
- }
-}
-
-
-/*
- * BUILTIN TIMEZONE HANDLING
- */
-
-
-/** Returns an icalarray of icaltimezone structs, one for each builtin
- timezone. This will load and parse the zones.tab file to get the
- timezone names and their coordinates. It will not load the
- VTIMEZONE data for any timezones. */
-icalarray*
-icaltimezone_get_builtin_timezones (void)
-{
- if (!builtin_timezones)
- icaltimezone_init_builtin_timezones ();
-
- return builtin_timezones;
-}
-
-/** Release builtin timezone memory */
-void
-icaltimezone_free_builtin_timezones(void)
-{
- icaltimezone_array_free(builtin_timezones);
-}
-
-
-/** Returns a single builtin timezone, given its Olson city name. */
-icaltimezone*
-icaltimezone_get_builtin_timezone (const char *location)
-{
- icaltimezone *zone;
- int lower, upper, middle, cmp;
- char *zone_location;
-
- if (!location || !location[0])
- return NULL;
-
- if (!strcmp (location, "UTC"))
- return &utc_timezone;
-
- if (!builtin_timezones)
- icaltimezone_init_builtin_timezones ();
-
- /* Do a simple binary search. */
- lower = middle = 0;
- upper = builtin_timezones->num_elements;
-
- while (lower < upper) {
- middle = (lower + upper) / 2;
- zone = icalarray_element_at (builtin_timezones, middle);
- zone_location = icaltimezone_get_location (zone);
- cmp = strcmp (location, zone_location);
- if (cmp == 0)
- return zone;
- else if (cmp < 0)
- upper = middle;
- else
- lower = middle + 1;
- }
-
- return NULL;
-}
-
-
-/** Returns a single builtin timezone, given its TZID. */
-icaltimezone*
-icaltimezone_get_builtin_timezone_from_tzid (const char *tzid)
-{
- int num_slashes = 0;
- const char *p, *zone_tzid;
- icaltimezone *zone;
-
- if (!tzid || !tzid[0])
- return NULL;
-
- /* Check that the TZID starts with our unique prefix. */
- if (strncmp (tzid, TZID_PREFIX, TZID_PREFIX_LEN))
- return NULL;
-
- /* Get the location, which is after the 3rd '/' character. */
- p = tzid;
- for (p = tzid; *p; p++) {
- if (*p == '/') {
- num_slashes++;
- if (num_slashes == 3)
- break;
- }
- }
-
- if (num_slashes != 3)
- return NULL;
-
- p++;
-
- /* Now we can use the function to get the builtin timezone from the
- location string. */
- zone = icaltimezone_get_builtin_timezone (p);
- if (!zone)
- return NULL;
-
- /* Check that the builtin TZID matches exactly. We don't want to return
- a different version of the VTIMEZONE. */
- zone_tzid = icaltimezone_get_tzid (zone);
- if (!strcmp (zone_tzid, tzid))
- return zone;
- else
- return NULL;
-}
-
-
-/** Returns the special UTC timezone. */
-icaltimezone*
-icaltimezone_get_utc_timezone (void)
-{
- if (!builtin_timezones)
- icaltimezone_init_builtin_timezones ();
-
- return &utc_timezone;
-}
-
-
-
-/** This initializes the builtin timezone data, i.e. the
- builtin_timezones array and the special UTC timezone. It should be
- called before any code that uses the timezone functions. */
-static void
-icaltimezone_init_builtin_timezones (void)
-{
- /* Initialize the special UTC timezone. */
- utc_timezone.tzid = "UTC";
-
- icaltimezone_parse_zone_tab ();
-}
-
-
-/** This parses the zones.tab file containing the names and locations
- of the builtin timezones. It creates the builtin_timezones array
- which is an icalarray of icaltimezone structs. It only fills in the
- location, latitude and longtude fields; the rest are left
- blank. The VTIMEZONE component is loaded later if it is needed. The
- timezones in the zones.tab file are sorted by their name, which is
- useful for binary searches. */
-static void
-icaltimezone_parse_zone_tab (void)
-{
- char *filename;
- FILE *fp;
- char buf[1024]; /* Used to store each line of zones.tab as it is read. */
- char location[1024]; /* Stores the city name when parsing buf. */
- unsigned int filename_len;
- int latitude_degrees, latitude_minutes, latitude_seconds;
- int longitude_degrees, longitude_minutes, longitude_seconds;
- icaltimezone zone;
-
- icalerror_assert (builtin_timezones == NULL,
- "Parsing zones.tab file multiple times");
-
- builtin_timezones = icalarray_new (sizeof (icaltimezone), 32);
-
- filename_len = strlen (get_zone_directory()) + strlen (ZONES_TAB_FILENAME)
- + 2;
-
- filename = (char*) malloc (filename_len);
- if (!filename) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- snprintf (filename, filename_len, "%s/%s", get_zone_directory(),
- ZONES_TAB_FILENAME);
-
- fp = fopen (filename, "r");
- free (filename);
- if (!fp) {
- icalerror_set_errno(ICAL_FILE_ERROR);
- return;
- }
-
- while (fgets (buf, sizeof(buf), fp)) {
- if (*buf == '#') continue;
-
- /* The format of each line is: "latitude longitude location". */
- if (sscanf (buf, "%4d%2d%2d %4d%2d%2d %s",
- &latitude_degrees, &latitude_minutes,
- &latitude_seconds,
- &longitude_degrees, &longitude_minutes,
- &longitude_seconds,
- location) != 7) {
- fprintf (stderr, "Invalid timezone description line: %s\n", buf);
- continue;
- }
-
- icaltimezone_init (&zone);
- zone.location = strdup (location);
-
- if (latitude_degrees >= 0)
- zone.latitude = (double) latitude_degrees
- + (double) latitude_minutes / 60
- + (double) latitude_seconds / 3600;
- else
- zone.latitude = (double) latitude_degrees
- - (double) latitude_minutes / 60
- - (double) latitude_seconds / 3600;
-
- if (longitude_degrees >= 0)
- zone.longitude = (double) longitude_degrees
- + (double) longitude_minutes / 60
- + (double) longitude_seconds / 3600;
- else
- zone.longitude = (double) longitude_degrees
- - (double) longitude_minutes / 60
- - (double) longitude_seconds / 3600;
-
- icalarray_append (builtin_timezones, &zone);
-
-#if 0
- printf ("Found zone: %s %f %f\n",
- location, zone.latitude, zone.longitude);
-#endif
- }
-
- fclose (fp);
-}
-
-
-/** Loads the builtin VTIMEZONE data for the given timezone. */
-static void
-icaltimezone_load_builtin_timezone (icaltimezone *zone)
-{
- char *filename;
- unsigned int filename_len;
- FILE *fp;
- icalparser *parser;
- icalcomponent *comp, *subcomp;
-
- /* If the location isn't set, it isn't a builtin timezone. */
- if (!zone->location || !zone->location[0])
- return;
-
- filename_len = strlen (get_zone_directory()) + strlen (zone->location) + 6;
-
- filename = (char*) malloc (filename_len);
- if (!filename) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- snprintf (filename, filename_len, "%s/%s.ics", get_zone_directory(),
- zone->location);
-
- fp = fopen (filename, "r");
- free (filename);
- if (!fp) {
- icalerror_set_errno(ICAL_FILE_ERROR);
- return;
- }
-
-
- /* ##### B.# Sun, 11 Nov 2001 04:04:29 +1100
- this is where the MALFORMEDDATA error is being set, after the call to 'icalparser_parse'
- fprintf(stderr, "** WARNING ** %s: %d %s\n", __FILE__, __LINE__, icalerror_strerror(icalerrno));
- */
-
- parser = icalparser_new ();
- icalparser_set_gen_data (parser, fp);
- comp = icalparser_parse (parser, icaltimezone_load_get_line_fn);
- icalparser_free (parser);
- fclose (fp);
-
-
-
- /* Find the VTIMEZONE component inside the VCALENDAR. There should be 1. */
- subcomp = icalcomponent_get_first_component (comp,
- ICAL_VTIMEZONE_COMPONENT);
- if (!subcomp) {
- icalerror_set_errno(ICAL_PARSE_ERROR);
- return;
- }
-
- icaltimezone_get_vtimezone_properties (zone, subcomp);
-
- icalcomponent_remove_component(comp,subcomp);
-
- icalcomponent_free(comp);
-
-}
-
-
-/** Callback used from icalparser_parse() */
-static char *
-icaltimezone_load_get_line_fn (char *s,
- size_t size,
- void *data)
-{
- return fgets (s, size, (FILE*) data);
-}
-
-
-
-
-/*
- * DEBUGGING
- */
-
-/**
- * This outputs a list of timezone changes for the given timezone to the
- * given file, up to the maximum year given. We compare this output with the
- * output from 'vzic --dump-changes' to make sure that we are consistent.
- * (vzic is the Olson timezone database to VTIMEZONE converter.)
- *
- * The output format is:
- *
- * Zone-Name [tab] Date [tab] Time [tab] UTC-Offset
- *
- * The Date and Time fields specify the time change in UTC.
- *
- * The UTC Offset is for local (wall-clock) time. It is the amount of time
- * to add to UTC to get local time.
- */
-int
-icaltimezone_dump_changes (icaltimezone *zone,
- int max_year,
- FILE *fp)
-{
- static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- icaltimezonechange *zone_change;
- int change_num;
- char buffer[8];
-
- /* Make sure the changes array is expanded up to the given time. */
- icaltimezone_ensure_coverage (zone, max_year);
-
-#if 0
- printf ("Num changes: %i\n", zone->changes->num_elements);
-#endif
-
- change_num = 0;
- for (change_num = 0; change_num < zone->changes->num_elements; change_num++) {
- zone_change = icalarray_element_at (zone->changes, change_num);
-
- if (zone_change->year > max_year)
- break;
-
- fprintf (fp, "%s\t%2i %s %04i\t%2i:%02i:%02i",
- zone->location,
- zone_change->day, months[zone_change->month - 1],
- zone_change->year,
- zone_change->hour, zone_change->minute, zone_change->second);
-
- /* Wall Clock Time offset from UTC. */
- format_utc_offset (zone_change->utc_offset, buffer);
- fprintf (fp, "\t%s", buffer);
-
- fprintf (fp, "\n");
- }
- return 1;
-}
-
-
-/** This formats a UTC offset as "+HHMM" or "+HHMMSS".
- buffer should have space for 8 characters. */
-static void
-format_utc_offset (int utc_offset,
- char *buffer)
-{
- char *sign = "+";
- int hours, minutes, seconds;
-
- if (utc_offset < 0) {
- utc_offset = -utc_offset;
- sign = "-";
- }
-
- hours = utc_offset / 3600;
- minutes = (utc_offset % 3600) / 60;
- seconds = utc_offset % 60;
-
- /* Sanity check. Standard timezone offsets shouldn't be much more than 12
- hours, and daylight saving shouldn't change it by more than a few hours.
- (The maximum offset is 15 hours 56 minutes at present.) */
- if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60
- || seconds < 0 || seconds >= 60) {
- fprintf (stderr, "Warning: Strange timezone offset: H:%i M:%i S:%i\n",
- hours, minutes, seconds);
- }
-
- if (seconds == 0)
- sprintf (buffer, "%s%02i%02i", sign, hours, minutes);
- else
- sprintf (buffer, "%s%02i%02i%02i", sign, hours, minutes, seconds);
-}
-
-static char* get_zone_directory(void)
-{
- return zone_files_directory == NULL ? ZONEINFO_DIRECTORY : zone_files_directory;
-}
-
-void set_zone_directory(char *path)
-{
- zone_files_directory = malloc(strlen(path)+1);
- if ( zone_files_directory != NULL )
- {
- strcpy(zone_files_directory,path);
- }
-}
-
-void free_zone_directory(void)
-{
- if ( zone_files_directory != NULL )
- {
- free(zone_files_directory);
- }
-}
diff --git a/libical/src/libical/icaltimezone.h b/libical/src/libical/icaltimezone.h
deleted file mode 100644
index b5e9aaa009..0000000000
--- a/libical/src/libical/icaltimezone.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*======================================================================
- FILE: icaltimezone.h
- CREATOR: Damon Chaplin 15 March 2001
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2001, Damon Chaplin
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
-======================================================================*/
-/**
- * @file icaltimezone.h
- * @brief timezone handling routines
- */
-
-#ifndef ICALTIMEZONE_H
-#define ICALTIMEZONE_H
-
-#include <stdio.h> /* For FILE* */
-#include "icaltime.h"
-#include "icalarray.h"
-#include "icalcomponent.h"
-
-
-#ifndef ICALTIMEZONE_DEFINED
-#define ICALTIMEZONE_DEFINED
-/** @brief An opaque struct representing a timezone.
- * We declare this here to avoid a circular dependancy.
- */
-typedef struct _icaltimezone icaltimezone;
-#endif
-
-/**
- * @par Creating/Destroying individual icaltimezones.
- */
-
-/** Creates a new icaltimezone. */
-icaltimezone *icaltimezone_new (void);
-
-/** Frees all memory used for the icaltimezone. Set free_struct to free the
- icaltimezone struct as well. */
-void icaltimezone_free (icaltimezone *zone,
- int free_struct);
-
-
-/**
- * @par Accessing timezones.
- */
-
-/** Free any builtin timezone information **/
-void icaltimezone_free_builtin_timezones(void);
-
-/** Returns the array of builtin icaltimezones. */
-icalarray* icaltimezone_get_builtin_timezones (void);
-
-/** Returns a single builtin timezone, given its Olson city name. */
-icaltimezone* icaltimezone_get_builtin_timezone (const char *location);
-
-/** Returns a single builtin timezone, given its TZID. */
-icaltimezone* icaltimezone_get_builtin_timezone_from_tzid (const char *tzid);
-
-/** Returns the UTC timezone. */
-icaltimezone* icaltimezone_get_utc_timezone (void);
-
-/** Returns the TZID of a timezone. */
-char* icaltimezone_get_tzid (icaltimezone *zone);
-
-/** Returns the city name of a timezone. */
-char* icaltimezone_get_location (icaltimezone *zone);
-
-/** Returns the TZNAME properties used in the latest STANDARD and DAYLIGHT
- components. If they are the same it will return just one, e.g. "LMT".
- If they are different it will format them like "EST/EDT". Note that this
- may also return NULL. */
-char* icaltimezone_get_tznames (icaltimezone *zone);
-
-/** Returns the latitude of a builtin timezone. */
-double icaltimezone_get_latitude (icaltimezone *zone);
-
-/** Returns the longitude of a builtin timezone. */
-double icaltimezone_get_longitude (icaltimezone *zone);
-
-/** Returns the VTIMEZONE component of a timezone. */
-icalcomponent* icaltimezone_get_component (icaltimezone *zone);
-
-/** Sets the VTIMEZONE component of an icaltimezone, initializing the tzid,
- location & tzname fields. It returns 1 on success or 0 on failure, i.e.
- no TZID was found. */
-int icaltimezone_set_component (icaltimezone *zone,
- icalcomponent *comp);
-
-char* icaltimezone_get_display_name (icaltimezone *zone);
-
-/**
- * @par Converting times between timezones.
- */
-
-void icaltimezone_convert_time (struct icaltimetype *tt,
- icaltimezone *from_zone,
- icaltimezone *to_zone);
-
-
-/**
- * @par Getting offsets from UTC.
- */
-
-/** Calculates the UTC offset of a given local time in the given
- timezone. It is the number of seconds to add to UTC to get local
- time. The is_daylight flag is set to 1 if the time is in
- daylight-savings time. */
-int icaltimezone_get_utc_offset (icaltimezone *zone,
- struct icaltimetype *tt,
- int *is_daylight);
-
-/** Calculates the UTC offset of a given UTC time in the given
- timezone. It is the number of seconds to add to UTC to get local
- time. The is_daylight flag is set to 1 if the time is in
- daylight-savings time. */
-int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone,
- struct icaltimetype *tt,
- int *is_daylight);
-
-
-
-/*
- * Handling arrays of timezones. Mainly for internal use.
- */
-icalarray* icaltimezone_array_new (void);
-
-void icaltimezone_array_append_from_vtimezone (icalarray *timezones,
- icalcomponent *child);
-void icaltimezone_array_free (icalarray *timezones);
-
-
-/*
- * @par Handling the default location the timezone files
- */
-
-/** Set the directory to look for the zonefiles */
-void set_zone_directory(char *path);
-
-/** Free memory dedicated to the zonefile directory */
-void free_zone_directory(void);
-
-/*
- * @par Debugging Output.
- */
-
-/** Dumps information about changes in the timezone up to and including
- max_year. */
-int icaltimezone_dump_changes (icaltimezone *zone,
- int max_year,
- FILE *fp);
-
-#endif /* ICALTIMEZONE_H */
diff --git a/libical/src/libical/icaltypes.c b/libical/src/libical/icaltypes.c
deleted file mode 100644
index 19719f8aa7..0000000000
--- a/libical/src/libical/icaltypes.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaltypes.c
- CREATOR: eric 16 May 1999
-
- $Id$
- $Locker$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icaltypes.c
-
- ======================================================================*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icaltypes.h"
-#include "icalerror.h"
-#include "icalmemory.h"
-#include <stdlib.h> /* for malloc and abs() */
-#include <errno.h> /* for errno */
-#include <string.h> /* for icalmemory_strdup */
-#include <assert.h>
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-#define TEMP_MAX 1024
-
-
-int icaltriggertype_is_null_trigger(struct icaltriggertype tr)
-{
- if(icaltime_is_null_time(tr.time) &&
- icaldurationtype_is_null_duration(tr.duration)){
- return 1;
- }
-
- return 0;
-}
-
-int icaltriggertype_is_bad_trigger(struct icaltriggertype tr)
-{
- if(icaldurationtype_is_bad_duration(tr.duration)){
- return 1;
- }
-
- return 0;
-}
-
-struct icaltriggertype icaltriggertype_from_int(const int reltime)
-{
- struct icaltriggertype tr;
-
- tr.time = icaltime_null_time();
- tr.duration = icaldurationtype_from_int(reltime);
-
- return tr;
-}
-
-struct icaltriggertype icaltriggertype_from_string(const char* str)
-{
-
-
- struct icaltriggertype tr, null_tr;
- icalerrorstate es;
- icalerrorenum e;
-
- tr.time= icaltime_null_time();
- tr.duration = icaldurationtype_from_int(0);
-
- null_tr = tr;
-
- if(str == 0) goto error;
-
- /* Suppress errors so a failure in icaltime_from_string() does not cause an abort */
- es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR);
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
- e = icalerrno;
- icalerror_set_errno(ICAL_NO_ERROR);
-
- tr.time = icaltime_from_string(str);
-
- if (icaltime_is_null_time(tr.time)){
-
- tr.duration = icaldurationtype_from_string(str);
-
- if (icaldurationtype_is_bad_duration(tr.duration)) goto error;
- }
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
- icalerror_set_errno(e);
- return tr;
-
- error:
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return tr;
-
-}
-
-
-struct icalreqstattype icalreqstattype_from_string(const char* str)
-{
- const char *p1,*p2;
- struct icalreqstattype stat;
- short major=0, minor=0;
-
- icalerror_check_arg((str != 0),"str");
-
- stat.code = ICAL_UNKNOWN_STATUS;
- stat.debug = 0;
- stat.desc = 0;
-
- /* Get the status numbers */
-
- sscanf(str, "%hd.%hd",&major, &minor);
-
- if (major <= 0 || minor < 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return stat;
- }
-
- stat.code = icalenum_num_to_reqstat(major, minor);
-
- if (stat.code == ICAL_UNKNOWN_STATUS){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return stat;
- }
-
-
- p1 = strchr(str,';');
-
- if (p1 == 0){
-/* icalerror_set_errno(ICAL_BADARG_ERROR);*/
- return stat;
- }
-
- /* Just ignore the second clause; it will be taken from inside the library
- */
-
-
-
- p2 = strchr(p1+1,';');
- if (p2 != 0 && *p2 != 0){
- stat.debug = p2+1;
- }
-
- return stat;
-
-}
-
-const char* icalreqstattype_as_string(struct icalreqstattype stat)
-{
- char *temp;
-
- temp = (char*)icalmemory_tmp_buffer(TEMP_MAX);
-
- icalerror_check_arg_rz((stat.code != ICAL_UNKNOWN_STATUS),"Status");
-
- if (stat.desc == 0){
- stat.desc = icalenum_reqstat_desc(stat.code);
- }
-
- if(stat.debug != 0){
- snprintf(temp,TEMP_MAX,"%d.%d;%s;%s", icalenum_reqstat_major(stat.code),
- icalenum_reqstat_minor(stat.code),
- stat.desc, stat.debug);
-
- } else {
- snprintf(temp,TEMP_MAX,"%d.%d;%s", icalenum_reqstat_major(stat.code),
- icalenum_reqstat_minor(stat.code),
- stat.desc);
- }
-
- return temp;
-}
diff --git a/libical/src/libical/icaltypes.h b/libical/src/libical/icaltypes.h
deleted file mode 100644
index 1e5c5e09bb..0000000000
--- a/libical/src/libical/icaltypes.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icaltypes.h
- CREATOR: eric 20 March 1999
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icaltypes.h
-
-======================================================================*/
-
-#ifndef ICALTYPES_H
-#define ICALTYPES_H
-
-#include <time.h>
-#include "icalenums.h"
-#include "icaltime.h"
-#include "icalduration.h"
-#include "icalperiod.h"
-
-
-struct icalgeotype
-{
- float lat;
- float lon;
-};
-
-
-struct icaldatetimeperiodtype
-{
- struct icaltimetype time;
- struct icalperiodtype period;
-};
-
-
-struct icaltriggertype
-{
- struct icaltimetype time;
- struct icaldurationtype duration;
-};
-
-struct icaltriggertype icaltriggertype_from_int(const int reltime);
-struct icaltriggertype icaltriggertype_from_string(const char* str);
-
-int icaltriggertype_is_null_trigger(struct icaltriggertype tr);
-int icaltriggertype_is_bad_trigger(struct icaltriggertype tr);
-
-/* struct icalreqstattype. This struct contains two string pointers,
-but don't try to free either of them. The "desc" string is a pointer
-to a static table inside the library. Don't try to free it. The
-"debug" string is a pointer into the string that the called passed
-into to icalreqstattype_from_string. Don't try to free it either, and
-don't use it after the original string has been freed.
-
-BTW, you would get that original string from
-*icalproperty_get_requeststatus() or icalvalue_get_text(), when
-operating on a the value of a request_status property. */
-
-struct icalreqstattype {
-
- icalrequeststatus code;
- const char* desc;
- const char* debug;
-};
-
-struct icalreqstattype icalreqstattype_from_string(const char* str);
-const char* icalreqstattype_as_string(struct icalreqstattype);
-
-
-
-struct icaltimezonephase {
- const char* tzname;
- int is_stdandard; /* 1 = standard tme, 0 = daylight savings time */
- struct icaltimetype dtstart;
- int offsetto;
- int tzoffsetfrom;
- const char* comment;
- struct icaldatetimeperiodtype rdate;
- const char* rrule;
-};
-
-
-struct icaltimezonetype {
- const char* tzid;
- struct icaltimetype last_mod;
- const char* tzurl;
-
- /* Array of phases. The end of the array is a phase with tzname == 0 */
- struct icaltimezonephase *phases;
-};
-
-void icaltimezonetype_free(struct icaltimezonetype tzt);
-
-
-#endif /* !ICALTYPES_H */
diff --git a/libical/src/libical/icalvalue.c b/libical/src/libical/icalvalue.c
deleted file mode 100644
index 2e52670c61..0000000000
--- a/libical/src/libical/icalvalue.c
+++ /dev/null
@@ -1,1322 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* vi:set ts=4 sts=4 sw=4 expandtab : */
-/*======================================================================
- FILE: icalvalue.c
- CREATOR: eric 02 May 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvalue.c
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "icalerror.h"
-#include "icalmemory.h"
-#include "icalparser.h"
-#include "icalenums.h"
-#include "icalvalueimpl.h"
-
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for sprintf */
-#include <string.h> /* For memset, others */
-#include <stddef.h> /* For offsetof() macro */
-#include <errno.h>
-#include <time.h> /* for mktime */
-#include <stdlib.h> /* for atoi and atof */
-#include <limits.h> /* for SHRT_MAX */
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-#if _MAC_OS_
-#include "icalmemory_strdup.h"
-#endif
-
-#define TMP_BUF_SIZE 1024
-
-void print_datetime_to_string(char* str, const struct icaltimetype *data);
-void print_date_to_string(char* str, const struct icaltimetype *data);
-void print_time_to_string(char* str, const struct icaltimetype *data);
-
-
-struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind){
-
- struct icalvalue_impl* v;
-
- if (!icalvalue_kind_is_valid(kind))
- return NULL;
-
- if ( ( v = (struct icalvalue_impl*)
- malloc(sizeof(struct icalvalue_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- strcpy(v->id,"val");
-
- v->kind = kind;
- v->size = 0;
- v->parent = 0;
- v->x_value = 0;
- memset(&(v->data),0,sizeof(v->data));
-
- return v;
-
-}
-
-
-
-icalvalue*
-icalvalue_new (icalvalue_kind kind)
-{
- return (icalvalue*)icalvalue_new_impl(kind);
-}
-
-icalvalue* icalvalue_new_clone(const icalvalue* old) {
- struct icalvalue_impl* new;
-
- new = icalvalue_new_impl(old->kind);
-
- if (new == 0){
- return 0;
- }
-
- strcpy(new->id, old->id);
- new->kind = old->kind;
- new->size = old->size;
-
- switch (new->kind){
- case ICAL_ATTACH_VALUE:
- case ICAL_BINARY_VALUE:
- {
- /* Hmm. We just ref the attach value, which may not be the right
- * thing to do. We cannot quite copy the data, anyways, since we
- * don't know how long it is.
- */
- new->data.v_attach = old->data.v_attach;
- if (new->data.v_attach)
- icalattach_ref (new->data.v_attach);
-
- break;
- }
- case ICAL_QUERY_VALUE:
- case ICAL_STRING_VALUE:
- case ICAL_TEXT_VALUE:
- case ICAL_CALADDRESS_VALUE:
- case ICAL_URI_VALUE:
- {
- if (old->data.v_string != 0) {
- new->data.v_string=icalmemory_strdup(old->data.v_string);
-
- if ( new->data.v_string == 0 ) {
- return 0;
- }
-
- }
- break;
- }
- case ICAL_RECUR_VALUE:
- {
- if(old->data.v_recur != 0){
- new->data.v_recur = malloc(sizeof(struct icalrecurrencetype));
-
- if(new->data.v_recur == 0){
- return 0;
- }
-
- memcpy( new->data.v_recur, old->data.v_recur,
- sizeof(struct icalrecurrencetype));
- }
- break;
- }
-
- case ICAL_X_VALUE:
- {
- if (old->x_value != 0) {
- new->x_value=icalmemory_strdup(old->x_value);
-
- if (new->x_value == 0) {
- return 0;
- }
- }
-
- break;
- }
-
- default:
- {
- /* all of the other types are stored as values, not
- pointers, so we can just copy the whole structure. */
-
- new->data = old->data;
- }
- }
-
- return new;
-}
-
-static char* icalmemory_strdup_and_dequote(const char* str)
-{
- const char* p;
- char* out = (char*)malloc(sizeof(char) * strlen(str) +1);
- char* pout;
-
- if (out == 0){
- return 0;
- }
-
- pout = out;
-
- for (p = str; *p!=0; p++){
-
- if( *p == '\\')
- {
- p++;
- switch(*p){
- case 0:
- {
- *pout = '\0';
- break;
-
- }
- case 'n':
- case 'N':
- {
- *pout = '\n';
- break;
- }
- case 't':
- case 'T':
- {
- *pout = '\t';
- break;
- }
- case 'r':
- case 'R':
- {
- *pout = '\r';
- break;
- }
- case 'b':
- case 'B':
- {
- *pout = '\b';
- break;
- }
- case 'f':
- case 'F':
- {
- *pout = '\f';
- break;
- }
- case ';':
- case ',':
- case '"':
- case '\\':
- {
- *pout = *p;
- break;
- }
- default:
- {
- *pout = ' ';
- }
- }
- } else {
- *pout = *p;
- }
-
- pout++;
-
- }
-
- *pout = '\0';
-
- return out;
-}
-
-/*
- * FIXME
- *
- * This is a bad API, as it forces callers to specify their own X type.
- * This function should take care of this by itself.
- */
-static
-icalvalue* icalvalue_new_enum(icalvalue_kind kind, int x_type, const char* str)
-{
- int e = icalproperty_kind_and_string_to_enum(kind, str);
- struct icalvalue_impl *value;
-
- if(e != 0 && icalproperty_enum_belongs_to_property(
- icalproperty_value_kind_to_kind(kind),e)) {
-
- value = icalvalue_new_impl(kind);
- value->data.v_enum = e;
- } else {
- /* Make it an X value */
- value = icalvalue_new_impl(kind);
- value->data.v_enum = x_type;
- icalvalue_set_x(value,str);
- }
-
- return value;
-}
-
-
-icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind,const char* str,icalproperty** error)
-{
-
- struct icalvalue_impl *value = 0;
-
- icalerror_check_arg_rz(str!=0,"str");
-
- if (error != 0){
- *error = 0;
- }
-
- switch (kind){
-
- case ICAL_ATTACH_VALUE:
- {
- icalattach *attach;
-
- attach = icalattach_new_from_url (str);
- if (!attach)
- break;
-
- value = icalvalue_new_attach (attach);
- icalattach_unref (attach);
- break;
- }
-
- case ICAL_BINARY_VALUE:
- case ICAL_BOOLEAN_VALUE:
- {
- /* HACK */
- value = 0;
-
- if (error != 0){
- char temp[TMP_BUF_SIZE];
- sprintf(temp,"%s Values are not implemented",
- icalvalue_kind_to_string(kind));
- *error = icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_VALUEPARSEERROR),
- 0);
- }
- break;
- }
-
-
- case ICAL_TRANSP_VALUE:
- value = icalvalue_new_enum(kind, (int)ICAL_TRANSP_X,str);
- break;
- case ICAL_METHOD_VALUE:
- value = icalvalue_new_enum(kind, (int)ICAL_METHOD_X,str);
- break;
- case ICAL_STATUS_VALUE:
- value = icalvalue_new_enum(kind, (int)ICAL_STATUS_X,str);
- break;
- case ICAL_ACTION_VALUE:
- value = icalvalue_new_enum(kind, (int)ICAL_ACTION_X,str);
- break;
-
- case ICAL_QUERY_VALUE:
- value = icalvalue_new_query(str);
- break;
-
- case ICAL_CLASS_VALUE:
- value = icalvalue_new_enum(kind, (int)ICAL_CLASS_X,str);
- break;
-
- case ICAL_CMD_VALUE:
- value = icalvalue_new_enum(kind, ICAL_CMD_X,str);
- break;
- case ICAL_QUERYLEVEL_VALUE:
- value = icalvalue_new_enum(kind, ICAL_QUERYLEVEL_X,str);
- break;
- case ICAL_CARLEVEL_VALUE:
- value = icalvalue_new_enum(kind, ICAL_CARLEVEL_X,str);
- break;
-
-
- case ICAL_INTEGER_VALUE:
- value = icalvalue_new_integer(atoi(str));
- break;
-
- case ICAL_FLOAT_VALUE:
- value = icalvalue_new_float((float)atof(str));
- break;
-
- case ICAL_UTCOFFSET_VALUE:
- {
- int t,utcoffset, hours, minutes, seconds;
- /* treat the UTCOFSET string a a decimal number, disassemble its digits
- and reconstruct it as sections */
- t = strtol(str,0,10);
- /* add phantom seconds field */
- if(abs(t)<9999){t *= 100; }
- hours = (t/10000);
- minutes = (t-hours*10000)/100;
- seconds = (t-hours*10000-minutes*100);
- utcoffset = hours*3600+minutes*60+seconds;
-
- value = icalvalue_new_utcoffset(utcoffset);
-
- break;
- }
-
- case ICAL_TEXT_VALUE:
- {
- char* dequoted_str = icalmemory_strdup_and_dequote(str);
- value = icalvalue_new_text(dequoted_str);
- free(dequoted_str);
- break;
- }
-
- case ICAL_STRING_VALUE:
- value = icalvalue_new_string(str);
- break;
-
- case ICAL_CALADDRESS_VALUE:
- value = icalvalue_new_caladdress(str);
- break;
-
- case ICAL_URI_VALUE:
- value = icalvalue_new_uri(str);
- break;
-
- case ICAL_GEO_VALUE:
- value = 0;
- /* HACK */
-
- if (error != 0){
- char temp[TMP_BUF_SIZE];
- sprintf(temp,"GEO Values are not implemented");
- *error = icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_VALUEPARSEERROR),
- 0);
- }
-
- /*icalerror_warn("Parsing GEO properties is unimplmeneted");*/
-
- break;
-
- case ICAL_RECUR_VALUE:
- {
- struct icalrecurrencetype rt;
- rt = icalrecurrencetype_from_string(str);
- if(rt.freq != ICAL_NO_RECURRENCE){
- value = icalvalue_new_recur(rt);
- }
- break;
- }
-
- case ICAL_DATE_VALUE:
- case ICAL_DATETIME_VALUE:
- {
- struct icaltimetype tt;
-
- tt = icaltime_from_string(str);
- if(!icaltime_is_null_time(tt)){
- value = icalvalue_new_impl(kind);
- value->data.v_time = tt;
-
- icalvalue_reset_kind(value);
- }
- break;
- }
-
- case ICAL_DATETIMEPERIOD_VALUE:
- {
- struct icaltimetype tt;
- struct icalperiodtype p;
- tt = icaltime_from_string(str);
-
- if(!icaltime_is_null_time(tt)){
- value = icalvalue_new_datetime(tt);
- break;
- }
-
- p = icalperiodtype_from_string(str);
- if (!icalperiodtype_is_null_period(p)){
- value = icalvalue_new_period(p);
- }
-
- break;
- }
-
- case ICAL_DURATION_VALUE:
- {
- struct icaldurationtype dur = icaldurationtype_from_string(str);
-
- if (!icaldurationtype_is_bad_duration(dur)) { /* failed to parse */
- value = icalvalue_new_duration(dur);
- }
-
- break;
- }
-
- case ICAL_PERIOD_VALUE:
- {
- struct icalperiodtype p;
- p = icalperiodtype_from_string(str);
-
- if(!icalperiodtype_is_null_period(p)){
- value = icalvalue_new_period(p);
- }
- break;
- }
-
- case ICAL_TRIGGER_VALUE:
- {
- struct icaltriggertype tr = icaltriggertype_from_string(str);
- if (!icaltriggertype_is_bad_trigger(tr)) {
- value = icalvalue_new_trigger(tr);
- }
- break;
- }
-
- case ICAL_REQUESTSTATUS_VALUE:
- {
- struct icalreqstattype rst = icalreqstattype_from_string(str);
- if(rst.code != ICAL_UNKNOWN_STATUS){
- value = icalvalue_new_requeststatus(rst);
- }
- break;
-
- }
-
- case ICAL_X_VALUE:
- {
- char* dequoted_str = icalmemory_strdup_and_dequote(str);
- value = icalvalue_new_x(dequoted_str);
- free(dequoted_str);
- }
- break;
-
- default:
- {
- if (error != 0 ){
- char temp[TMP_BUF_SIZE];
-
- snprintf(temp,TMP_BUF_SIZE,"Unknown type for \'%s\'",str);
-
- *error = icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_VALUEPARSEERROR),
- 0);
- }
-
- icalerror_warn("icalvalue_new_from_string got an unknown value type");
- value=0;
- }
- }
-
-
- if (error != 0 && *error == 0 && value == 0){
- char temp[TMP_BUF_SIZE];
-
- snprintf(temp,TMP_BUF_SIZE,"Failed to parse value: \'%s\'",str);
-
- *error = icalproperty_vanew_xlicerror(
- temp,
- icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_VALUEPARSEERROR),
- 0);
- }
-
-
- return value;
-
-}
-
-icalvalue* icalvalue_new_from_string(icalvalue_kind kind,const char* str)
-{
- return icalvalue_new_from_string_with_error(kind,str,(icalproperty**)0);
-}
-
-
-
-void
-icalvalue_free (icalvalue* v)
-{
- icalerror_check_arg_rv((v != 0),"value");
-
-#ifdef ICAL_FREE_ON_LIST_IS_ERROR
- icalerror_assert( (v->parent ==0),"This value is still attached to a property");
-
-#else
- if(v->parent !=0){
- return;
- }
-#endif
-
- if(v->x_value != 0){
- free(v->x_value);
- }
-
- switch (v->kind){
- case ICAL_BINARY_VALUE:
- case ICAL_ATTACH_VALUE: {
- if (v->data.v_attach) {
- icalattach_unref (v->data.v_attach);
- v->data.v_attach = NULL;
- }
-
- break;
- }
- case ICAL_TEXT_VALUE:
- case ICAL_CALADDRESS_VALUE:
- case ICAL_URI_VALUE:
- case ICAL_QUERY_VALUE:
- {
- if (v->data.v_string != 0) {
- free((void*)v->data.v_string);
- v->data.v_string = 0;
- }
- break;
- }
- case ICAL_RECUR_VALUE:
- {
- if(v->data.v_recur != 0){
- free((void*)v->data.v_recur);
- v->data.v_recur = 0;
- }
- break;
- }
-
- default:
- {
- /* Nothing to do */
- }
- }
-
- v->kind = ICAL_NO_VALUE;
- v->size = 0;
- v->parent = 0;
- memset(&(v->data),0,sizeof(v->data));
- v->id[0] = 'X';
- free(v);
-}
-
-int
-icalvalue_is_valid (const icalvalue* value)
-{
- if(value == 0){
- return 0;
- }
-
- return 1;
-}
-
-static char* icalvalue_binary_as_ical_string(const icalvalue* value) {
-
- const char* data;
- char* str;
- icalerror_check_arg_rz( (value!=0),"value");
-
- data = icalvalue_get_binary(value);
-
- str = (char*)icalmemory_tmp_buffer(60);
- sprintf(str,"icalvalue_binary_as_ical_string is not implemented yet");
-
- return str;
-}
-
-
-#define MAX_INT_DIGITS 12 /* Enough for 2^32 + sign*/
-
-static char* icalvalue_int_as_ical_string(const icalvalue* value) {
- int data;
- char* str = (char*)icalmemory_tmp_buffer(MAX_INT_DIGITS);
-
- icalerror_check_arg_rz( (value!=0),"value");
-
- data = icalvalue_get_integer(value);
-
- snprintf(str,MAX_INT_DIGITS,"%d",data);
-
- return str;
-}
-
-static char* icalvalue_utcoffset_as_ical_string(const icalvalue* value)
-{
- int data,h,m,s;
- char sign;
- char* str = (char*)icalmemory_tmp_buffer(9);
-
- icalerror_check_arg_rz( (value!=0),"value");
-
- data = icalvalue_get_utcoffset(value);
-
- if (abs(data) == data){
- sign = '+';
- } else {
- sign = '-';
- }
-
- h = data/3600;
- m = (data - (h*3600))/ 60;
- s = (data - (h*3600) - (m*60));
-
- if (s > 0)
- sprintf(str,"%c%02d%02d%02d",sign,abs(h),abs(m),abs(s));
- else
- sprintf(str,"%c%02d%02d",sign,abs(h),abs(m));
-
- return str;
-}
-
-static char* icalvalue_string_as_ical_string(const icalvalue* value) {
-
- const char* data;
- char* str = 0;
- icalerror_check_arg_rz( (value!=0),"value");
- data = value->data.v_string;
-
- str = (char*)icalmemory_tmp_buffer(strlen(data)+1);
-
- strcpy(str,data);
-
- return str;
-}
-
-
-static char* icalvalue_recur_as_ical_string(const icalvalue* value)
-{
- struct icalrecurrencetype *recur = value->data.v_recur;
-
- return icalrecurrencetype_as_string(recur);
-}
-
- /* @todo This is not RFC2445 compliant.
- * The RFC only allows:
- * TSAFE-CHAR = %x20-21 / %x23-2B / %x2D-39 / %x3C-5B / %x5D-7E / NON-US-ASCII
- * As such, \t\r\b\f are not allowed, not even escaped
- */
-
-static char* icalvalue_text_as_ical_string(const icalvalue* value) {
- char *str;
- char *str_p;
- char *rtrn;
- const char *p;
- size_t buf_sz;
-
- buf_sz = strlen(value->data.v_string)+1;
-
- str_p = str = (char*)icalmemory_new_buffer(buf_sz);
-
- if (str_p == 0){
- return 0;
- }
-
- for(p=value->data.v_string; *p!=0; p++){
-
- switch(*p){
- case '\n': {
- icalmemory_append_string(&str,&str_p,&buf_sz,"\\n");
- break;
- }
-
- case '\t': {
- icalmemory_append_string(&str,&str_p,&buf_sz,"\\t");
- break;
- }
- case '\r': {
- icalmemory_append_string(&str,&str_p,&buf_sz,"\\r");
- break;
- }
- case '\b': {
- icalmemory_append_string(&str,&str_p,&buf_sz,"\\b");
- break;
- }
- case '\f': {
- icalmemory_append_string(&str,&str_p,&buf_sz,"\\f");
- break;
- }
-
- case ';':
- case ',':
- case '"':
- case '\\':{
- icalmemory_append_char(&str,&str_p,&buf_sz,'\\');
- icalmemory_append_char(&str,&str_p,&buf_sz,*p);
- break;
- }
-
- default: {
- icalmemory_append_char(&str,&str_p,&buf_sz,*p);
- }
- }
- }
-
- /* Assume the last character is not a '\0' and add one. We could
- check *str_p != 0, but that would be an uninitialized memory
- read. */
-
-
- icalmemory_append_char(&str,&str_p,&buf_sz,'\0');
-
- rtrn = icalmemory_tmp_copy(str);
-
- icalmemory_free_buffer(str);
-
- return rtrn;
-}
-
-
-static char*
-icalvalue_attach_as_ical_string(const icalvalue* value)
-{
- icalattach *a;
- char * str;
-
- icalerror_check_arg_rz( (value!=0),"value");
-
- a = icalvalue_get_attach(value);
-
- if (icalattach_get_is_url (a)) {
- const char *url;
-
- url = icalattach_get_url (a);
- str = icalmemory_tmp_buffer (strlen (url) + 1);
- strcpy (str, url);
- return str;
- } else
- return icalvalue_binary_as_ical_string (value);
-}
-
-
-static char* icalvalue_duration_as_ical_string(const icalvalue* value) {
-
- struct icaldurationtype data;
-
- icalerror_check_arg_rz( (value!=0),"value");
- data = icalvalue_get_duration(value);
-
- return icaldurationtype_as_ical_string(data);
-}
-
-void print_time_to_string(char* str, const struct icaltimetype *data)
-{
- char temp[20];
-
- if (icaltime_is_utc(*data)){
- sprintf(temp,"%02d%02d%02dZ",data->hour,data->minute,data->second);
- } else {
- sprintf(temp,"%02d%02d%02d",data->hour,data->minute,data->second);
- }
-
- strcat(str,temp);
-}
-
-
-void print_date_to_string(char* str, const struct icaltimetype *data)
-{
- char temp[20];
-
- sprintf(temp,"%04d%02d%02d",data->year,data->month,data->day);
-
- strcat(str,temp);
-}
-
-static char* icalvalue_date_as_ical_string(const icalvalue* value) {
-
- struct icaltimetype data;
- char* str;
- icalerror_check_arg_rz( (value!=0),"value");
- data = icalvalue_get_date(value);
-
- str = (char*)icalmemory_tmp_buffer(9);
-
- str[0] = 0;
- print_date_to_string(str,&data);
-
- return str;
-}
-
-void print_datetime_to_string(char* str, const struct icaltimetype *data)
-{
- print_date_to_string(str,data);
- strcat(str,"T");
- print_time_to_string(str,data);
-}
-
-static const char* icalvalue_datetime_as_ical_string(const icalvalue* value) {
-
- struct icaltimetype data;
- char* str;
- icalvalue_kind kind = icalvalue_isa(value);
-
- icalerror_check_arg_rz( (value!=0),"value");
-
-
- if( !(kind == ICAL_DATE_VALUE || kind == ICAL_DATETIME_VALUE ))
- {
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return 0;
- }
-
- data = icalvalue_get_datetime(value);
-
- str = (char*)icalmemory_tmp_buffer(20);
-
- str[0] = 0;
-
- print_datetime_to_string(str,&data);
-
- return str;
-
-}
-
-static char* icalvalue_float_as_ical_string(const icalvalue* value) {
-
- float data;
- char* str;
- icalerror_check_arg_rz( (value!=0),"value");
- data = icalvalue_get_float(value);
-
- str = (char*)icalmemory_tmp_buffer(15);
-
- sprintf(str,"%f",data);
-
- return str;
-}
-
-static char* icalvalue_geo_as_ical_string(const icalvalue* value) {
-
- struct icalgeotype data;
- char* str;
- icalerror_check_arg_rz( (value!=0),"value");
-
- data = icalvalue_get_geo(value);
-
- str = (char*)icalmemory_tmp_buffer(25);
-
- sprintf(str,"%f;%f",data.lat,data.lon);
-
- return str;
-}
-
-static const char* icalvalue_datetimeperiod_as_ical_string(const icalvalue* value) {
- struct icaldatetimeperiodtype dtp = icalvalue_get_datetimeperiod(value);
-
- icalerror_check_arg_rz( (value!=0),"value");
-
- if(!icaltime_is_null_time(dtp.time)){
- return icaltime_as_ical_string(dtp.time);
- } else {
- return icalperiodtype_as_ical_string(dtp.period);
- }
-}
-
-static const char* icalvalue_period_as_ical_string(const icalvalue* value) {
- struct icalperiodtype data;
- icalerror_check_arg_rz( (value!=0),"value");
- data = icalvalue_get_period(value);
-
- return icalperiodtype_as_ical_string(data);
-
-}
-
-static const char* icalvalue_trigger_as_ical_string(const icalvalue* value) {
-
- struct icaltriggertype data;
-
- icalerror_check_arg_rz( (value!=0),"value");
- data = icalvalue_get_trigger(value);
-
- if(!icaltime_is_null_time(data.time)){
- return icaltime_as_ical_string(data.time);
- } else {
- return icaldurationtype_as_ical_string(data.duration);
- }
-
-}
-
-const char*
-icalvalue_as_ical_string(const icalvalue* value)
-{
- if(value == 0){
- return 0;
- }
-
- switch (value->kind){
-
- case ICAL_ATTACH_VALUE:
- return icalvalue_attach_as_ical_string(value);
-
- case ICAL_BINARY_VALUE:
- return icalvalue_binary_as_ical_string(value);
-
- case ICAL_BOOLEAN_VALUE:
- case ICAL_INTEGER_VALUE:
- return icalvalue_int_as_ical_string(value);
-
- case ICAL_UTCOFFSET_VALUE:
- return icalvalue_utcoffset_as_ical_string(value);
-
- case ICAL_TEXT_VALUE:
- return icalvalue_text_as_ical_string(value);
-
- case ICAL_QUERY_VALUE:
- return icalvalue_string_as_ical_string(value);
-
- case ICAL_STRING_VALUE:
- case ICAL_URI_VALUE:
- case ICAL_CALADDRESS_VALUE:
- return icalvalue_string_as_ical_string(value);
-
- case ICAL_DATE_VALUE:
- return icalvalue_date_as_ical_string(value);
- case ICAL_DATETIME_VALUE:
- return icalvalue_datetime_as_ical_string(value);
- case ICAL_DURATION_VALUE:
- return icalvalue_duration_as_ical_string(value);
-
- case ICAL_PERIOD_VALUE:
- return icalvalue_period_as_ical_string(value);
- case ICAL_DATETIMEPERIOD_VALUE:
- return icalvalue_datetimeperiod_as_ical_string(value);
-
- case ICAL_FLOAT_VALUE:
- return icalvalue_float_as_ical_string(value);
-
- case ICAL_GEO_VALUE:
- return icalvalue_geo_as_ical_string(value);
-
- case ICAL_RECUR_VALUE:
- return icalvalue_recur_as_ical_string(value);
-
- case ICAL_TRIGGER_VALUE:
- return icalvalue_trigger_as_ical_string(value);
-
- case ICAL_REQUESTSTATUS_VALUE:
- return icalreqstattype_as_string(value->data.v_requeststatus);
-
- case ICAL_ACTION_VALUE:
- case ICAL_CMD_VALUE:
- case ICAL_QUERYLEVEL_VALUE:
- case ICAL_CARLEVEL_VALUE:
- case ICAL_METHOD_VALUE:
- case ICAL_STATUS_VALUE:
- case ICAL_TRANSP_VALUE:
- case ICAL_CLASS_VALUE:
- if(value->x_value !=0){
- return icalmemory_tmp_copy(value->x_value);
- }
-
- return icalproperty_enum_to_string(value->data.v_enum);
-
- case ICAL_X_VALUE:
- if (value->x_value != 0)
- return icalmemory_tmp_copy(value->x_value);
-
- /* FALLTHRU */
-
- case ICAL_NO_VALUE:
- default:
- {
- return 0;
- }
- }
-}
-
-
-icalvalue_kind
-icalvalue_isa (const icalvalue* value)
-{
- if(value == 0){
- return ICAL_NO_VALUE;
- }
-
- return value->kind;
-}
-
-
-int
-icalvalue_isa_value (void* value)
-{
- struct icalvalue_impl *impl = (struct icalvalue_impl *)value;
-
- icalerror_check_arg_rz( (value!=0), "value");
-
- if (strcmp(impl->id,"val") == 0) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-static int icalvalue_is_time(const icalvalue* a) {
- icalvalue_kind kind = icalvalue_isa(a);
-
- if(kind == ICAL_DATETIME_VALUE ||
- kind == ICAL_DATE_VALUE ){
- return 1;
- }
-
- return 0;
-
-}
-
-/*
- * In case of error, this function returns 0. This is partly bogus, as 0 is
- * not part of the returned enum.
- * FIXME We should probably add an error value to the enum.
- */
-icalparameter_xliccomparetype
-icalvalue_compare(const icalvalue* a, const icalvalue *b)
-{
-
- icalerror_check_arg_rz( (a!=0), "a");
- icalerror_check_arg_rz( (b!=0), "b");
-
- /* Not the same type; they can only be unequal */
- if( ! (icalvalue_is_time(a) && icalvalue_is_time(b)) &&
- icalvalue_isa(a) != icalvalue_isa(b)){
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
-
- switch (icalvalue_isa(a)){
-
- case ICAL_ATTACH_VALUE:
- {
- if (icalattach_get_is_url(a->data.v_attach) &&
- icalattach_get_is_url(b->data.v_attach)) {
- if (strcasecmp(icalattach_get_url(a->data.v_attach),
- icalattach_get_url(b->data.v_attach)) == 0)
- return ICAL_XLICCOMPARETYPE_EQUAL;
- else
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
- else {
- if (a->data.v_attach == b->data.v_attach)
- return ICAL_XLICCOMPARETYPE_EQUAL;
- else
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
- }
- case ICAL_BINARY_VALUE:
- {
- if (a->data.v_attach == b->data.v_attach)
- return ICAL_XLICCOMPARETYPE_EQUAL;
- else
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
-
- case ICAL_BOOLEAN_VALUE:
- {
- if (icalvalue_get_boolean(a) == icalvalue_get_boolean(b)){
- return ICAL_XLICCOMPARETYPE_EQUAL;
- } else {
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
- }
-
- case ICAL_FLOAT_VALUE:
- {
- if (a->data.v_float > b->data.v_float){
- return ICAL_XLICCOMPARETYPE_GREATER;
- } else if (a->data.v_float < b->data.v_float){
- return ICAL_XLICCOMPARETYPE_LESS;
- } else {
- return ICAL_XLICCOMPARETYPE_EQUAL;
- }
- }
-
- case ICAL_INTEGER_VALUE:
- case ICAL_UTCOFFSET_VALUE:
- {
- if (a->data.v_int > b->data.v_int){
- return ICAL_XLICCOMPARETYPE_GREATER;
- } else if (a->data.v_int < b->data.v_int){
- return ICAL_XLICCOMPARETYPE_LESS;
- } else {
- return ICAL_XLICCOMPARETYPE_EQUAL;
- }
- }
-
- case ICAL_DURATION_VALUE:
- {
- int dur_a = icaldurationtype_as_int(a->data.v_duration);
- int dur_b = icaldurationtype_as_int(b->data.v_duration);
-
- if (dur_a > dur_b){
- return ICAL_XLICCOMPARETYPE_GREATER;
- } else if (dur_a < dur_b){
- return ICAL_XLICCOMPARETYPE_LESS;
- } else {
- return ICAL_XLICCOMPARETYPE_EQUAL;
- }
- }
-
-
- case ICAL_TEXT_VALUE:
- case ICAL_URI_VALUE:
- case ICAL_CALADDRESS_VALUE:
- case ICAL_TRIGGER_VALUE:
- case ICAL_DATE_VALUE:
- case ICAL_DATETIME_VALUE:
- case ICAL_DATETIMEPERIOD_VALUE:
- case ICAL_QUERY_VALUE:
- case ICAL_RECUR_VALUE:
- {
- int r;
-
- r = strcmp(icalvalue_as_ical_string(a),
- icalvalue_as_ical_string(b));
-
- if (r > 0) {
- return ICAL_XLICCOMPARETYPE_GREATER;
- } else if (r < 0){
- return ICAL_XLICCOMPARETYPE_LESS;
- } else {
- return ICAL_XLICCOMPARETYPE_EQUAL;
- }
-
-
- }
-
- case ICAL_METHOD_VALUE:
- {
- if (icalvalue_get_method(a) == icalvalue_get_method(b)){
- return ICAL_XLICCOMPARETYPE_EQUAL;
- } else {
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
-
- }
-
- case ICAL_STATUS_VALUE:
- {
- if (icalvalue_get_status(a) == icalvalue_get_status(b)){
- return ICAL_XLICCOMPARETYPE_EQUAL;
- } else {
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
-
- }
-
- case ICAL_TRANSP_VALUE:
- {
- if (icalvalue_get_transp(a) == icalvalue_get_transp(b)){
- return ICAL_XLICCOMPARETYPE_EQUAL;
- } else {
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
- }
-
- case ICAL_ACTION_VALUE:
- {
- if (icalvalue_get_action(a) == icalvalue_get_action(b)){
- return ICAL_XLICCOMPARETYPE_EQUAL;
- } else {
- return ICAL_XLICCOMPARETYPE_NOTEQUAL;
- }
- }
-
- case ICAL_PERIOD_VALUE:
- case ICAL_GEO_VALUE:
- case ICAL_NO_VALUE:
- default:
- {
- icalerror_warn("Comparison not implemented for value type");
- return 0;
- }
- }
-
-}
-
-/** Examine the value and possibly change the kind to agree with the
- * value
- */
-
-void icalvalue_reset_kind(icalvalue* value)
-{
- if( (value->kind==ICAL_DATETIME_VALUE || value->kind==ICAL_DATE_VALUE )&&
- !icaltime_is_null_time(value->data.v_time) ) {
-
- if(icaltime_is_date(value->data.v_time)){
- value->kind = ICAL_DATE_VALUE;
- } else {
- value->kind = ICAL_DATETIME_VALUE;
- }
- }
-
-}
-
-void icalvalue_set_parent(icalvalue* value,
- icalproperty* property)
-{
- value->parent = property;
-}
-
-icalproperty* icalvalue_get_parent(icalvalue* value)
-{
- return value->parent;
-}
-
-
-int icalvalue_encode_ical_string(const char *szText, char *szEncText, int nMaxBufferLen)
-{
- char *ptr;
- icalvalue *value = 0;
-
- if ((szText == 0) || (szEncText == 0))
- return 0;
-
- value = icalvalue_new_from_string(ICAL_STRING_VALUE, szText);
-
- if (value == 0)
- return 0;
-
- ptr = icalvalue_text_as_ical_string(value);
- if (ptr == 0)
- return 0;
-
- if ((int)strlen(ptr) >= nMaxBufferLen)
- {
- icalvalue_free (value);
- return 0;
- }
-
- strcpy(szEncText, ptr);
-
- icalvalue_free ((icalvalue*)value);
-
- return 1;
-}
-
-/* The remaining interfaces are 'new', 'set' and 'get' for each of the value
- types */
diff --git a/libical/src/libical/icalvalue.h b/libical/src/libical/icalvalue.h
deleted file mode 100644
index 851e7234bc..0000000000
--- a/libical/src/libical/icalvalue.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue.h
- CREATOR: eric 20 March 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvalue.h
-
- ======================================================================*/
-
-#ifndef ICALVALUE_H
-#define ICALVALUE_H
-
-#include <time.h>
-#include "icalenums.h"
-#include "icaltypes.h"
-#include "icalrecur.h"
-#include "icalduration.h"
-#include "icalperiod.h"
-#include "icalderivedproperty.h" /* For icalproperty_method, etc. */
-#include "icalderivedparameter.h"
-#include "icalderivedvalue.h"
-
-/* Defined in icalderivedvalue.h */
-/*typedef struct icalvalue_impl icalvalue;*/
-
-icalvalue* icalvalue_new(icalvalue_kind kind);
-
-icalvalue* icalvalue_new_clone(const icalvalue* value);
-
-icalvalue* icalvalue_new_from_string(icalvalue_kind kind, const char* str);
-
-void icalvalue_free(icalvalue* value);
-
-int icalvalue_is_valid(const icalvalue* value);
-
-const char* icalvalue_as_ical_string(const icalvalue* value);
-
-icalvalue_kind icalvalue_isa(const icalvalue* value);
-
-int icalvalue_isa_value(void*);
-
-icalparameter_xliccomparetype icalvalue_compare(const icalvalue* a, const icalvalue *b);
-
-
-/* Special, non autogenerated value accessors */
-
-icalvalue* icalvalue_new_recur (struct icalrecurrencetype v);
-void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v);
-struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value);
-
-icalvalue* icalvalue_new_trigger (struct icaltriggertype v);
-void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v);
-struct icaltriggertype icalvalue_get_trigger(const icalvalue* value);
-
-icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v);
-void icalvalue_set_datetimeperiod(icalvalue* value,
- struct icaldatetimeperiodtype v);
-struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value);
-
-/* Convert enumerations */
-
-icalvalue_kind icalvalue_string_to_kind(const char* str);
-const char* icalvalue_kind_to_string(const icalvalue_kind kind);
-
-/** Check validity of a specific icalvalue_kind **/
-int icalvalue_kind_is_valid(const icalvalue_kind kind);
-
-/** Encode a character string in ical format, esacpe certain characters, etc. */
-int icalvalue_encode_ical_string(const char *szText, char *szEncText, int MaxBufferLen);
-
-#endif /*ICALVALUE_H*/
diff --git a/libical/src/libical/icalvalue_cxx.cpp b/libical/src/libical/icalvalue_cxx.cpp
deleted file mode 100644
index a1db030c33..0000000000
--- a/libical/src/libical/icalvalue_cxx.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue_cxx.cpp
- CREATOR: fnguyen 12/21/01
- (C) COPYRIGHT 2001, Critical Path
-======================================================================*/
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-typedef char* string; // Will use the string library from STL
-
-ICalValue::ICalValue() throw(icalerrorenum) : imp(icalvalue_new(ICAL_ANY_VALUE)){}
-
-ICalValue::ICalValue(const ICalValue& v) throw (icalerrorenum) {
- imp = icalvalue_new_clone(v.imp);
- if (!imp) throw icalerrno;
-}
-ICalValue& ICalValue::operator=(const ICalValue& v) throw(icalerrorenum) {
- if (this == &v) return *this;
-
- if (imp != NULL)
- {
- icalvalue_free(imp);
- imp = icalvalue_new_clone(v.imp);
- if (!imp) throw icalerrno;
- }
-
- return *this;
-}
-
-ICalValue::~ICalValue(){
- if (imp != NULL) icalvalue_free(imp);
-}
-
-ICalValue::ICalValue(icalvalue* v) throw(icalerrorenum) : imp(v){
-}
-
-ICalValue::ICalValue(icalvalue_kind kind) throw(icalerrorenum) {
- imp = icalvalue_new(kind);
- if (!imp) throw icalerrno;
-}
-
-ICalValue::ICalValue(icalvalue_kind kind, string str) throw(icalerrorenum) {
- imp = icalvalue_new_from_string(kind, str);
- if (!imp) throw icalerrno;
-}
-
-string ICalValue::as_ical_string(){
- return (string)icalvalue_as_ical_string(imp);
-}
-bool ICalValue::is_valid(){
- if (imp == NULL) return false;
- return (icalvalue_is_valid(imp) ? true : false);
-}
-icalvalue_kind ICalValue::isa(){
- return icalvalue_isa(imp);
-}
-int ICalValue::isa_value(void* value){
- return icalvalue_isa_value(value);
-}
-
-/* Special, non autogenerated value accessors */
-void ICalValue::set_recur(struct icalrecurrencetype v){
- icalvalue_set_recur(imp, v);
-}
-struct icalrecurrencetype ICalValue::get_recur(){
- return icalvalue_get_recur(imp);
-}
-
-void ICalValue::set_trigger(struct icaltriggertype v){}
-struct icaltriggertype ICalValue::get_trigger(){
- return icalvalue_get_trigger(imp);
-}
-
-void ICalValue::set_datetimeperiod(struct icaldatetimeperiodtype v){
- icalvalue_set_datetimeperiod(imp, v);
-}
-struct icaldatetimeperiodtype ICalValue::get_datetimeperiod(){
- return icalvalue_get_datetimeperiod(imp);
-}
-
-icalparameter_xliccomparetype ICalValue::compare(ICalValue& a, ICalValue& b){
- return icalvalue_compare(a, b);
-}
-
-/* Convert enumerations */
-icalvalue_kind ICalValue::string_to_kind(string str){
- return icalvalue_string_to_kind(str);
-}
-string ICalValue::kind_to_string(icalvalue_kind kind){
- return (string)icalvalue_kind_to_string(kind);
-}
-
-/* BOOLEAN */
-int ICalValue::get_boolean(){
- return icalvalue_get_boolean(imp);
-}
-void ICalValue::set_boolean(int v){
- icalvalue_set_boolean(imp, v);
-}
-
-/* UTC-OFFSET */
-int ICalValue::get_utcoffset(){
- return icalvalue_get_utcoffset(imp);
-}
-void ICalValue::set_utcoffset(int v){
- icalvalue_set_utcoffset(imp, v);
-}
-
-/* METHOD */
-enum icalproperty_method ICalValue::get_method(){
- return icalvalue_get_method(imp);
-}
-void ICalValue::set_method(enum icalproperty_method v){
- icalvalue_set_method(imp, v);
-}
-
-/* CAL-ADDRESS */
-string ICalValue::get_caladdress(){
- return (string)icalvalue_get_caladdress(imp);
-}
-void ICalValue::set_caladdress(string v){
- icalvalue_set_caladdress(imp, v);
-}
-
-/* PERIOD */
-struct icalperiodtype ICalValue::get_period(){
- return icalvalue_get_period(imp);
-}
-void ICalValue::set_period(struct icalperiodtype v){
- icalvalue_set_period(imp, v);
-}
-
-/* STATUS */
-enum icalproperty_status ICalValue::get_status(){
- return icalvalue_get_status(imp);
-}
-void ICalValue::set_status(enum icalproperty_status v){
- icalvalue_set_status(imp, v);
-}
-
-/* BINARY */
-string ICalValue::get_binary(){
- return (string)icalvalue_get_binary(imp);
-}
-void ICalValue::set_binary(string v){
- icalvalue_set_binary(imp, v);
-}
-
-/* TEXT */
-string ICalValue::get_text(){
- return (string)icalvalue_get_text(imp);
-}
-void ICalValue::set_text(string v){
- icalvalue_set_text(imp, v);
-}
-
-/* DURATION */
-struct icaldurationtype ICalValue::get_duration(){
- return icalvalue_get_duration(imp);
-}
-void ICalValue::set_duration(struct icaldurationtype v){
- icalvalue_set_duration(imp, v);
-}
-
-/* INTEGER */
-int ICalValue::get_integer(){
- return icalvalue_get_integer(imp);
-}
-void ICalValue::set_integer(int v){
- icalvalue_set_integer(imp, v);
-}
-
-/* URI */
-string ICalValue::get_uri(){
- return (string)icalvalue_get_uri(imp);
-}
-void ICalValue::set_uri(string v){
- icalvalue_set_uri(imp, v);
-}
-
-/* ATTACH */
-icalattach *ICalValue::get_attach(){
- return icalvalue_get_attach(imp);
-}
-void ICalValue::set_attach(icalattach *v){
- icalvalue_set_attach(imp, v);
-}
-
-/* CLASS */
-enum icalproperty_class ICalValue::get_class(){
- return icalvalue_get_class(imp);
-}
-void ICalValue::set_class(enum icalproperty_class v){
- icalvalue_set_class(imp, v);
-}
-
-/* FLOAT */
-float ICalValue::get_float(){
- return icalvalue_get_float(imp);
-}
-void ICalValue::set_float(float v){
- icalvalue_set_float(imp, v);
-}
-
-/* QUERY */
-string ICalValue::get_query(){
- return (string)icalvalue_get_query(imp);
-}
-void ICalValue::set_query(string v){
- icalvalue_set_query(imp, v);
-}
-
-/* STRING */
-string ICalValue::get_string(){
- return (string)icalvalue_get_string(imp);
-}
-void ICalValue::set_string(string v){
- icalvalue_set_string(imp, v);
-}
-
-/* TRANSP */
-enum icalproperty_transp ICalValue::get_transp(){
- return icalvalue_get_transp(imp);
-}
-void ICalValue::set_transp(enum icalproperty_transp v){
- icalvalue_set_transp(imp, v);
-}
-
-/* DATE-TIME */
-struct icaltimetype ICalValue::get_datetime(){
- return icalvalue_get_datetime(imp);
-}
-void ICalValue::set_datetime(struct icaltimetype v){
- icalvalue_set_datetime(imp, v);
-}
-
-/* GEO */
-struct icalgeotype ICalValue::get_geo(){
- return icalvalue_get_geo(imp);
-}
-void ICalValue::set_geo(struct icalgeotype v){
- icalvalue_set_geo(imp, v);
-}
-
-/* DATE */
-struct icaltimetype ICalValue::get_date(){
- return icalvalue_get_date(imp);
-}
-void ICalValue::set_date(struct icaltimetype v){
- icalvalue_set_date(imp, v);
-}
-
-/* ACTION */
-enum icalproperty_action ICalValue::get_action(){
- return icalvalue_get_action(imp);
-}
-void ICalValue::set_action(enum icalproperty_action v){
- icalvalue_set_action(imp, v);
-}
diff --git a/libical/src/libical/icalvalue_cxx.h b/libical/src/libical/icalvalue_cxx.h
deleted file mode 100644
index 0023e84764..0000000000
--- a/libical/src/libical/icalvalue_cxx.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue_cxx.h
- CREATOR: fnguyen 12/13/01
- (C) COPYRIGHT 2001, Critical Path
-======================================================================*/
-
-#ifndef CP_ICALVALUE_H
-#define CP_ICALVALUE_H
-
-extern "C" {
-#include "ical.h"
-};
-
-#include "icptrholder.h"
-
-typedef char* string; // Will use the string library from STL
-
-class ICalValue {
-public:
- ICalValue() throw(icalerrorenum);
- ICalValue(const ICalValue&) throw(icalerrorenum);
- ICalValue& operator=(const ICalValue&) throw(icalerrorenum);
- ~ICalValue();
-
- ICalValue(icalvalue*) throw(icalerrorenum);
- ICalValue(icalvalue_kind kind) throw(icalerrorenum);
- ICalValue(icalvalue_kind kind, string str) throw(icalerrorenum);
-
- operator icalvalue* () { return imp; }
-
- void detach() {
- imp = NULL;
- }
-
-public:
- string as_ical_string();
- bool is_valid();
- icalvalue_kind isa();
- int isa_value(void*);
-
- /* Special, non autogenerated value accessors */
- void set_recur(struct icalrecurrencetype v);
- struct icalrecurrencetype get_recur();
-
- void set_trigger(struct icaltriggertype v);
- struct icaltriggertype get_trigger();
-
- void set_datetimeperiod(struct icaldatetimeperiodtype v);
- struct icaldatetimeperiodtype get_datetimeperiod();
-
-public:
- static icalparameter_xliccomparetype compare(ICalValue& a, ICalValue& b);
-
- /* Convert enumerations */
- static icalvalue_kind string_to_kind(string str);
- string kind_to_string(icalvalue_kind kind);
-
-public:
- /* BOOLEAN */
- int get_boolean();
- void set_boolean(int v);
-
- /* UTC-OFFSET */
- int get_utcoffset();
- void set_utcoffset(int v);
-
- /* METHOD */
- enum icalproperty_method get_method();
- void set_method(enum icalproperty_method v);
-
- /* CAL-ADDRESS */
- string get_caladdress();
- void set_caladdress(string v);
-
- /* PERIOD */
- struct icalperiodtype get_period();
- void set_period(struct icalperiodtype v);
-
- /* STATUS */
- enum icalproperty_status get_status();
- void set_status(enum icalproperty_status v);
-
- /* BINARY */
- string get_binary();
- void set_binary(string v);
-
- /* TEXT */
- string get_text();
- void set_text(string v);
-
- /* DURATION */
- struct icaldurationtype get_duration();
- void set_duration(struct icaldurationtype v);
-
- /* INTEGER */
- int get_integer();
- void set_integer(int v);
-
- /* URI */
- string get_uri();
- void set_uri(string v);
-
- /* ATTACH */
- icalattach *get_attach();
- void set_attach(icalattach *v);
-
- /* CLASS */
- enum icalproperty_class get_class();
- void set_class(enum icalproperty_class v);
-
- /* FLOAT */
- float get_float();
- void set_float(float v);
-
- /* QUERY */
- string get_query();
- void set_query(string v);
-
- /* STRING */
- string get_string();
- void set_string(string v);
-
- /* TRANSP */
- enum icalproperty_transp get_transp();
- void set_transp(enum icalproperty_transp v);
-
- /* DATE-TIME */
- struct icaltimetype get_datetime();
- void set_datetime(struct icaltimetype v);
-
- /* GEO */
- struct icalgeotype get_geo();
- void set_geo(struct icalgeotype v);
-
- /* DATE */
- struct icaltimetype get_date();
- void set_date(struct icaltimetype v);
-
- /* ACTION */
- enum icalproperty_action get_action();
- void set_action(enum icalproperty_action v);
-
-private:
- icalvalue* imp;
-};
-
-
-typedef ICPointerHolder<ICalValue> ICalValueTmpPtr; /* see icptrholder.h for comments */
-
-#endif /*ICALVALUE_H*/
diff --git a/libical/src/libical/icalvalueimpl.h b/libical/src/libical/icalvalueimpl.h
deleted file mode 100644
index d1ba7863ef..0000000000
--- a/libical/src/libical/icalvalueimpl.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalvalue.c
- CREATOR: eric 02 May 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvalue.c
-
- Contributions from:
- Graham Davison (g.m.davison@computer.org)
-
-
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef ICALVALUEIMPL_H
-#define ICALVALUEIMPL_H
-
-#include "icalenums.h"
-#include "icalproperty.h"
-#include "icalderivedvalue.h"
-
-
-struct icalvalue_impl {
- icalvalue_kind kind; /*this is the kind that is visible from the outside*/
-
- char id[5];
- int size;
- icalproperty* parent;
- char* x_value;
-
- union data {
- icalattach *v_attach;
- /* void *v_binary; */ /* use v_attach */
- const char *v_string;
- /*char *v_text;*/
- /*char *v_caladdress;*/
- /*char *v_uri;*/
- float v_float;
- int v_int;
- /*int v_boolean;*/
- /*int v_integer;*/
- struct icaldurationtype v_duration;
- /*int v_utcoffset;*/
-
- struct icalperiodtype v_period;
- /*struct icalperiodtype v_datetimeperiod;*/
- struct icalgeotype v_geo;
- /*time_t v_time;*/
- struct icaltimetype v_time;
- /*struct icaltimetype v_date;*/
- /*struct icaltimetype v_datetime;*/
- /*struct icaltimetype v_datetimedate;*/
-
- struct icalreqstattype v_requeststatus;
-
- /* struct icalrecurrencetype was once included
- directly ( not referenced ) in this union, but it
- contributes 2000 bytes to every value, so now it is
- a reference*/
-
- struct icalrecurrencetype *v_recur;
- struct icaltriggertype v_trigger;
-
- int v_enum;
- /* v_enum takes care of several enumerated types including:
- icalproperty_method v_method;
- icalproperty_status v_status;
- icalproperty_action v_action;
- icalproperty_class v_class;
- icalproperty_transp v_transp;
- */
-
- } data;
-};
-
-#endif
diff --git a/libical/src/libical/icalversion.h.in b/libical/src/libical/icalversion.h.in
deleted file mode 100644
index 5d213693e5..0000000000
--- a/libical/src/libical/icalversion.h.in
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef ICAL_VERSION_H
-#define ICAL_VERSION_H
-
-#define ICAL_PACKAGE "@PACKAGE@"
-#define ICAL_VERSION "@VERSION@"
-
-#endif
diff --git a/libical/src/libical/icalyacc.y b/libical/src/libical/icalyacc.y
deleted file mode 100644
index 65f0041ec4..0000000000
--- a/libical/src/libical/icalyacc.y
+++ /dev/null
@@ -1,417 +0,0 @@
-%{
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalitip.y
- CREATOR: eric 10 June 1999
-
- DESCRIPTION:
-
- $Id: icalyacc.y,v 1.16 2003/10/21 18:28:27 ettore Exp $
- $Locker: $
-
- (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
- The original code is icalitip.y
-
-
-
- =======================================================================*/
-
-#include <stdlib.h>
-#include <string.h> /* for strdup() */
-#include "icalparser.h"
-#include "pvl.h"
-
-icalvalue *icalparser_yy_value; /* Current Value */
-
-void ical_yyerror(char* s);
-void icalparser_clear_flex_input();
-int ical_yy_lex(void);
-
-/* Globals for UTCOFFSET values */
-int utc;
-int utc_b;
-int utcsign;
-
-/* Globals for DURATION values */
-struct icaldurationtype duration;
-
-/* Globals for TRIGGER values */
-struct icaltriggertype trigger;
-
-void copy_list(short* array, size_t size);
-void add_prop(icalproperty_kind);
-void icalparser_fill_date(struct tm* t, char* dstr);
-void icalparser_fill_time(struct tm* t, char* tstr);
-void set_value_type(icalvalue_kind kind);
-void set_parser_value_state();
-struct icaltimetype fill_datetime(char* d, char* t);
-void ical_yy_error(char *s); /* Don't know why I need this.... */
-int yylex(void); /* Or this. */
-
-
-
-/* Set the state of the lexer so it will interpret values ( iCAL
- VALUEs, that is, ) correctly. */
-
-%}
-
-%union {
- float v_float;
- int v_int;
- char* v_string;
-}
-
-
- /* Renaming hack */
-
-/*
-#define yymaxdepth ical_yy_maxdepth
-#define yyparse ical_yy_parse
-#define yyerror ical_yy_error
-#define yylval ical_yy_lval
-#define yychar ical_yy_char
-#define yydebug ical_yy_debug
-#define yypact ical_yy_pact
-#define yyr1 ical_yy_r1
-#define yyr2 ical_yy_r2
-#define yydef ical_yy_def
-#define yychk ical_yy_chk
-#define yypgo ical_yy_pgo
-#define yyact ical_yy_act
-#define yyexca ical_yy_exca
-#define yyerrflag ical_yy_errflag
-#define yynerrs ical_yy_nerrs
-#define yyps ical_yy_ps
-#define yypv ical_yy_pv
-#define yys ical_yy_s
-#define yy_yys ical_yy_yys
-#define yystate ical_yy_state
-#define yytmp ical_yy_tmp
-#define yyv ical_yy_v
-#define yy_yyv ical_yy_yyv
-#define yyval ical_yy_val
-#define yylloc ical_yy_lloc
-#define yyreds ical_yy_reds
-#define yytoks ical_yy_toks
-#define yylhs ical_yy_yylhs
-#define yylen ical_yy_yylen
-#define yydefred ical_yy_yydefred
-#define yydgoto ical_yy_yydgoto
-#define yydefred ical_yy_yydefred
-#define yydgoto ical_yy_yydgoto
-#define yysindex ical_yy_yysindex
-#define yyrindex ical_yy_yyrindex
-#define yygindex ical_yy_yygindex
-#define yytable ical_yy_yytable
-#define yycheck ical_yy_yycheck
-#define yyname ical_yy_yyname
-#define yyrule ical_yy_yyrule
-#define yy_scan_bytes ical_yy_scan_bytes
-#define yy_scan_string ical_yy_scan_string
-#define yy_scan_buffer ical_yy_scan_buffer
-*/
-
-/* These are redefined with the -P option to flex */
-/*
-#define yy_create_buffer ical_yy_create_buffer
-#define yy_delete_buffer ical_yy_delete_buffer
-#define yy_flex_debug ical_yy_flex_debug
-#define yy_init_buffer ical_yy_init_buffer
-#define yy_flush_buffer ical_yy_flush_buffer
-#define yy_load_buffer_state ical_yy_load_buffer_state
-#define yy_switch_to_buffer ical_yy_switch_to_buffer
-#define yyin ical_yyin
-#define yyleng ical_yyleng
-#define yylex ical_yylex
-#define yylineno ical_yylineno
-#define yyout ical_yyout
-#define yyrestart ical_yyrestart
-#define yytext ical_yytext
-#define yywrap ical_yywrap
-*/
-
-
-%token <v_string> DIGITS
-%token <v_int> INTNUMBER
-%token <v_float> FLOATNUMBER
-%token <v_string> STRING
-%token EOL EQUALS CHARACTER COLON COMMA SEMICOLON MINUS TIMESEPERATOR
-
-%token TRUE FALSE
-
-%token FREQ BYDAY BYHOUR BYMINUTE BYMONTH BYMONTHDAY BYSECOND BYSETPOS BYWEEKNO
-%token BYYEARDAY DAILY MINUTELY MONTHLY SECONDLY WEEKLY HOURLY YEARLY
-%token INTERVAL COUNT UNTIL WKST MO SA SU TU WE TH FR
-
-%token BIT8 ACCEPTED ADD AUDIO BASE64 BINARY BOOLEAN BUSY BUSYTENTATIVE
-%token BUSYUNAVAILABLE CALADDRESS CANCEL CANCELLED CHAIR CHILD COMPLETED
-%token CONFIDENTIAL CONFIRMED COUNTER DATE DATETIME DECLINECOUNTER DECLINED
-%token DELEGATED DISPLAY DRAFT DURATION EMAIL END FINAL FLOAT FREE GREGORIAN
-%token GROUP INDIVIDUAL INPROCESS INTEGER NEEDSACTION NONPARTICIPANT
-%token OPAQUE OPTPARTICIPANT PARENT PERIOD PRIVATE PROCEDURE PUBLIC PUBLISH
-%token RECUR REFRESH REPLY REQPARTICIPANT REQUEST RESOURCE ROOM SIBLING
-%token START TENTATIVE TEXT THISANDFUTURE THISANDPRIOR TIME TRANSPAENT
-%token UNKNOWN UTCOFFSET XNAME
-
-%token ALTREP CN CUTYPE DAYLIGHT DIR ENCODING EVENT FBTYPE FMTTYPE LANGUAGE
-%token MEMBER PARTSTAT RANGE RELATED RELTYPE ROLE RSVP SENTBY STANDARD URI
-
-%token TIME_CHAR UTC_CHAR
-
-
-%%
-
-value:
- date_value
- | datetime_value
- | duration_value
- | period_value
- | utcoffset_value
- | error {
- icalparser_yy_value = 0;
- icalparser_clear_flex_input();
- yyclearin;
- }
-;
-
-
-date_value: DIGITS
- {
- struct icaltimetype stm;
-
- stm = fill_datetime($1,0);
-
- stm.hour = -1;
- stm.minute = -1;
- stm.second = -1;
- stm.is_utc = 0;
- stm.is_date = 1;
-
- icalparser_yy_value = icalvalue_new_date(stm);
- }
-;
-
-utc_char:
- /*empty*/ {utc = 0;}
- | UTC_CHAR {utc = 1;}
-;
-
-/* This is used in the period_value, where there may be two utc characters per rule. */
-utc_char_b:
- /*empty*/ {utc_b = 0;}
- | UTC_CHAR {utc_b = 1;}
-;
-
-datetime_value:
- DIGITS TIME_CHAR DIGITS utc_char
- {
- struct icaltimetype stm;
- stm = fill_datetime($1, $3);
- stm.is_utc = utc;
- stm.is_date = 0;
-
- icalparser_yy_value =
- icalvalue_new_datetime(stm);
- }
-;
-
-
-/* Duration */
-
-
-dur_date: dur_day
- | dur_day dur_time
-;
-
-dur_week: DIGITS 'W'
- {
- duration.weeks = atoi($1);
- }
-;
-
-dur_time: TIME_CHAR dur_hour
- {
- }
- | TIME_CHAR dur_minute
- {
- }
- | TIME_CHAR dur_second
- {
- }
-;
-
-dur_hour: DIGITS 'H'
- {
- duration.hours = atoi($1);
- }
- | DIGITS 'H' dur_minute
- {
- duration.hours = atoi($1);
- }
-;
-
-dur_minute: DIGITS 'M'
- {
- duration.minutes = atoi($1);
- }
- | DIGITS 'M' dur_second
- {
- duration.minutes = atoi($1);
- }
-;
-
-dur_second: DIGITS 'S'
- {
- duration.seconds = atoi($1);
- }
-;
-
-dur_day: DIGITS 'D'
- {
- duration.days = atoi($1);
- }
-;
-
-dur_prefix: /* empty */
- {
- duration.is_neg = 0;
- }
- | '+'
- {
- duration.is_neg = 0;
- }
- | '-'
- {
- duration.is_neg = 1;
- }
-;
-
-duration_value: dur_prefix 'P' dur_date
- {
- icalparser_yy_value = icalvalue_new_duration(duration);
- memset(&duration,0, sizeof(duration));
- }
- | dur_prefix 'P' dur_time
- {
- icalparser_yy_value = icalvalue_new_duration(duration);
- memset(&duration,0, sizeof(duration));
- }
- | dur_prefix 'P' dur_week
- {
- icalparser_yy_value = icalvalue_new_duration(duration);
- memset(&duration,0, sizeof(duration));
- }
-;
-
-
-/* Period */
-
-period_value: DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b
- {
- struct icalperiodtype p;
-
- p.start = fill_datetime($1,$3);
- p.start.is_utc = utc;
- p.start.is_date = 0;
-
-
- p.end = fill_datetime($6,$8);
- p.end.is_utc = utc_b;
- p.end.is_date = 0;
-
- p.duration.days = -1;
- p.duration.weeks = -1;
- p.duration.hours = -1;
- p.duration.minutes = -1;
- p.duration.seconds = -1;
-
- icalparser_yy_value = icalvalue_new_period(p);
- }
- | DIGITS TIME_CHAR DIGITS utc_char '/' duration_value
- {
- struct icalperiodtype p;
-
- p.start = fill_datetime($1,$3);
- p.start.is_utc = utc;
- p.start.is_date = 0;
-
- p.end.year = -1;
- p.end.month = -1;
- p.end.day = -1;
- p.end.hour = -1;
- p.end.minute = -1;
- p.end.second = -1;
-
- /* The duration_value rule setes the global 'duration'
- variable, but it also creates a new value in
- icalparser_yy_value. So, free that, then copy
- 'duration' into the icalperiodtype struct. */
-
- p.duration = icalvalue_get_duration(icalparser_yy_value);
- icalvalue_free(icalparser_yy_value);
- icalparser_yy_value = 0;
-
- icalparser_yy_value = icalvalue_new_period(p);
-
- }
-;
-
-
-/* UTC Offset */
-
-plusminus: '+' { utcsign = 1; }
- | '-' { utcsign = -1; }
-;
-
-utcoffset_value:
- plusminus INTNUMBER INTNUMBER
- {
- icalparser_yy_value = icalvalue_new_utcoffset( utcsign * (($2*3600) + ($3*60)) );
- }
-
- | plusminus INTNUMBER INTNUMBER INTNUMBER
- {
- icalparser_yy_value = icalvalue_new_utcoffset(utcsign * (($2*3600) + ($3*60) +($4)));
- }
-;
-
-%%
-
-struct icaltimetype fill_datetime(char* datestr, char* timestr)
-{
- struct icaltimetype stm;
-
- memset(&stm,0,sizeof(stm));
-
- if (datestr != 0){
- sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month),
- &(stm.day));
- }
-
- if (timestr != 0){
- sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute),
- &(stm.second));
- }
-
- return stm;
-
-}
-
-void ical_yyerror(char* s)
-{
- /*fprintf(stderr,"Parse error \'%s\'\n", s);*/
-}
-
diff --git a/libical/src/libical/icptrholder.h b/libical/src/libical/icptrholder.h
deleted file mode 100644
index 4161604951..0000000000
--- a/libical/src/libical/icptrholder.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icptrholder.h
- * @author wyau (08/29/02)
- * @brief C++ template classes for managing C++ pointers returned by VComponent::get_..._component,
- * VComponent::get_..._property, ICalPropety::get_..._value.
- * @remarks VComponent::get... functions returns a C++ oject that wraps the libical implementation.
- * It is important to note that the wrapped implementation still belongs to the orginal
- * component. To stop memory leak, caller must delete the pointer. However, the destructor
- * will call the appropriate free function. eg. ~VComponent calls icalcomponent_free(imp).
- * As stated previously, imp stil belongs to the original component. To avoid freeing the
- * wrapped "imp", caller must set the "imp" to null before deleting the pointer.
- *
- * The template class relieves the burden of memory management when used as a stack based
- * object. The class holds a pointer to the C++ Wrapper. The destructor set the imp to
- * null before deleting the pointer.
- *
- * Each C++ Wrapper instantiates a template class in it's corresponding .h file.
- *
- * Usage example:
- * VComponentTmpPtr p; // VComponentTmpPtr is an instantiation of this template
- * for (p=component.get_first_component; p!= NULL; p=component.get_next_component) {
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-#ifndef __ICPTRHOLDER_H__
-#define __ICPTRHOLDER_H__
-
-template<class T> class ICPointerHolder {
-public:
- ICPointerHolder() { ptr = NULL; }
- ICPointerHolder(T* p) { ptr = p; }
-
- // copy constructor to support assignment
- ICPointerHolder(const ICPointerHolder& ip) {
- ptr = ip.ptr;
-
- // We need to transfer ownership of ptr to this object by setting
- // ip's ptr to null. Otherwise, ptr will de deleted twice.
- // const ugliness requires us to do the const_cast.
- ICPointerHolder *ipp = const_cast<ICPointerHolder*>(&ip);
- ipp->ptr = NULL;
- };
-
- ~ICPointerHolder() {
- release();
- }
-
- ICPointerHolder& operator=(T* p) {
- this->release();
- ptr = p;
- return *this;
- }
-
- ICPointerHolder& operator=(ICPointerHolder& p) {
- this->release();
- ptr = p.ptr; // this transfer ownership of the pointer
- p.ptr = NULL; // set it to null so the pointer won't get delete twice.
- return *this;
- }
-
- int operator!=(T* p) {return (ptr != p);}
- int operator==(T* p) {return (ptr == p);}
-
- operator T*() const {
- return ptr;
- }
-
- T* operator->() const {
- assert(ptr);
- return ptr;
- }
-
- T& operator*() {
- assert(ptr);
- return *ptr;
- }
-
-private:
- void release() {
- if (ptr != NULL) {
- ptr->detach();
- delete ptr;
- ptr = NULL;
- }
- }
-
- T* ptr;
-};
-
-#endif
diff --git a/libical/src/libical/pvl.c b/libical/src/libical/pvl.c
deleted file mode 100644
index 9c271ce953..0000000000
--- a/libical/src/libical/pvl.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/*======================================================================
- FILE: pvl.c
- CREATOR: eric November, 1995
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "pvl.h"
-#include <errno.h>
-#include <assert.h>
-#include <stdlib.h>
-
-/**
- struct pvl_list_t
-
- The list structure. This is the hanlde for the entire list
-
- This type is also private. Use pvl_list instead
-
- */
-
-typedef struct pvl_list_t
-{
- int MAGIC; /**< Magic Identifier */
- struct pvl_elem_t *head; /**< Head of list */
- struct pvl_elem_t *tail; /**< Tail of list */
- int count; /**< Number of items in the list */
- struct pvl_elem_t *p; /**< Pointer used for iterators */
-} pvl_list_t;
-
-
-
-
-/**
- * This global is incremented for each call to pvl_new_element(); it gives each
- * list a unique identifer
- */
-
-int pvl_elem_count = 0;
-int pvl_list_count = 0;
-
-
-/**
- * @brief Creates a new list, clears the pointers and assigns a magic number
- *
- * @return Pointer to the new list, 0 if there is no available memory.
- */
-
-pvl_list
-pvl_newlist()
-{
- struct pvl_list_t *L;
-
- if ( ( L = (struct pvl_list_t*)malloc(sizeof(struct pvl_list_t))) == 0)
- {
- errno = ENOMEM;
- return 0;
- }
-
- L->MAGIC = pvl_list_count;
- pvl_list_count++;
- L->head = 0;
- L->tail = 0;
- L->count = 0;
- L->p = 0;
-
- return L;
-}
-
-void
-pvl_free(pvl_list l)
-{
- struct pvl_list_t *L = (struct pvl_list_t *)l;
-
- pvl_clear(l);
-
- free(L);
-}
-
-/**
- * @brief Creates a new list element, assigns a magic number, and assigns
- * the next and previous pointers.
- *
- * Passing in the next and previous points may seem odd, but it allos the user
- * to set them while keeping the internal data hidden. In nearly all cases,
- * the user is the pvl library itself.
- *
- * @param d The data item to be stored in the list
- * @param next Pointer value to assign to the member "next"
- * @param prior Pointer value to assign to the member "prior"
- *
- * @return A pointer to the new element, 0 if there is no memory available.
- */
-
-pvl_elem
-pvl_new_element(void *d, pvl_elem next, pvl_elem prior)
-{
- struct pvl_elem_t *E;
-
- if ( ( E = (struct pvl_elem_t*)malloc(sizeof(struct pvl_elem_t))) == 0)
- {
- errno = ENOMEM;
- return 0;
- }
-
- E->MAGIC = pvl_elem_count++;
- E->d = d;
- E->next = next;
- E->prior = prior;
-
- return (pvl_elem)E;
-}
-
-/**
- * @brief Add a new element to the from of the list
- *
- * @param L The list to add the item to
- * @param d Pointer to the item to add
- */
-
-void
-pvl_unshift(pvl_list L,void *d)
-{
- struct pvl_elem_t *E = pvl_new_element(d,L->head,0);
-
- if (E->next != 0)
- {
- /* Link the head node to it */
- E->next->prior = E;
- }
-
- /* move the head */
- L->head = E;
-
- /* maybe move the tail */
-
- if (L->tail == 0)
- {
- L->tail = E;
- }
-
- L->count++;
-}
-
-/**
- * @brief Remove an element from the front of the list
- *
- * @param L The list to operate on
- *
- * @return the entry on the front of the list
- */
-
-void*
-pvl_shift(pvl_list L)
-{
- if (L->head == 0)
- {
- return 0;
- }
-
- return pvl_remove(L,(void*)L->head);
-
-}
-
-/**
- * @brief Add a new item to the tail of the list
- *
- * @param L The list to operate on
- * @param d Pointer to the item to add
- *
- */
-
-void
-pvl_push(pvl_list L,void *d)
-{
- struct pvl_elem_t *E = pvl_new_element(d,0,L->tail);
-
- /* These are done in pvl_new_element
- E->next = 0;
- E->prior = L->tail;
- */
-
- if (L->tail != 0)
- {
- L->tail->next = E;
- }
-
- if (L->head == 0)
- {
- L->head = E;
- }
-
- L->tail = E;
-
- L->count++;
-
-}
-
-/**
- * @brief Remove an element from the tail of the list
- *
- * @param L The list to operate on
- */
-
-void*
-pvl_pop(pvl_list L)
-{
- if ( L->tail == 0)
- {
- return 0;
- }
-
- return pvl_remove(L,(void*) L->tail);;
-
-}
-
-
-/**
- * Add a new item to a list that is ordered by a comparison function.
- * This routine assumes that the list is properly ordered.
- *
- * @param L The list to operate on
- * @param f Pointer to a comparison function
- * @param d Pointer to data to pass to the comparison function
- */
-
-void
-pvl_insert_ordered(pvl_list L,pvl_comparef f,void *d)
-{
- struct pvl_elem_t *P;
-
- L->count++;
-
- /* Empty list, add to head */
-
- if(L->head == 0)
- {
- pvl_unshift(L,d);
- return;
- }
-
- /* smaller than head, add to head */
-
- if ( ((*f)(d,L->head->d)) <= 0)
- {
- pvl_unshift(L,d);
- return;
- }
-
- /* larger than tail, add to tail */
- if ( (*f)(d,L->tail->d) >= 0)
- {
- pvl_push(L,d);
- return;
- }
-
-
- /* Search for the first element that is smaller, and add before it */
-
- for (P=L->head; P != 0; P = P->next)
- {
- if ( (*f)(P->d,d) >= 0)
- {
- pvl_insert_before(L,P,d);
- return;
- }
- }
-
- /* badness, choke */
-#ifndef lint
- assert(0);
-#endif
-}
-
-/**
- * @brief Add a new item after the referenced element.
- * @param L The list to operate on
- * @param P The list element to add the item after
- * @param d Pointer to the item to add.
- */
-
-void
-pvl_insert_after(pvl_list L,pvl_elem P,void *d)
-{
- struct pvl_elem_t *E = 0;
-
- L->count++;
-
- if (P == 0)
- {
- pvl_unshift(L,d);
- return;
- }
-
- if ( P == L->tail)
- {
- E = pvl_new_element(d,0,P);
- L->tail = E;
- E->prior->next = E;
- }
- else
- {
- E = pvl_new_element(d,P->next,P);
- E->next->prior = E;
- E->prior->next = E;
- }
-}
-
-/**
- * @brief Add an item after a referenced item
- *
- * @param L The list to operate on
- * @param P The list element to add the item before
- * @param d Pointer to the data to be added.
- */
-
-void
-pvl_insert_before(pvl_list L,pvl_elem P,void *d)
-{
- struct pvl_elem_t *E = 0;
-
- L->count++;
-
- if (P == 0)
- {
- pvl_unshift(L,d);
- return;
- }
-
- if ( P == L->head)
- {
- E = pvl_new_element(d,P,0);
- E->next->prior = E;
- L->head = E;
- }
- else
- {
- E = pvl_new_element(d,P,P->prior);
- E->prior->next = E;
- E->next->prior = E;
- }
-}
-
-/**
- * @brief Remove the referenced item from the list.
- *
- * This routine will free the element, but not the data item that the
- * element contains.
- *
- * @param L The list to operate on
- * @param E The element to remove.
- */
-
-void*
-pvl_remove(pvl_list L,pvl_elem E)
-{
- void* data;
-
- if (E == L->head)
- {
- if (E->next != 0)
- {
- E->next->prior = 0;
- L->head = E->next;
- } else {
- /* E Also points to tail -> only one element in list */
- L->tail = 0;
- L->head = 0;
- }
- }
- else if (E == L->tail)
- {
- if (E->prior != 0)
- {
- E->prior->next = 0;
- L->tail = E->prior;
- } else {
- /* E points to the head, so it was the last element */
- /* This case should be taken care of in the previous clause */
- L->head = 0;
- L->tail = 0;
- }
- }
- else
- {
- E->prior->next = E->next;
- E->next->prior = E->prior;
- }
-
-
- L->count--;
-
- data = E->d;
-
- E->prior = 0;
- E->next = 0;
- E->d = 0;
-
- free(E);
-
- return data;
-
-}
-
-/**
- * @brief Return a pointer to data that satisfies a function.
- *
- * This routine will interate through the entire list and call the
- * find function for each item. It will break and return a pointer to the
- * data that causes the find function to return 1.
- *
- * @param l The list to operate on
- * @param f Pointer to the find function
- * @param v Pointer to constant data to pass into the function
- *
- * @return Pointer to the element that the find function found.
- */
-
-pvl_elem
-pvl_find(pvl_list l,pvl_findf f,void* v)
-{
- pvl_elem e;
-
- for (e=pvl_head(l); e!= 0; e = pvl_next(e))
- {
- if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1)
- {
- /* Save this elem for a call to find_next */
- ((struct pvl_list_t *)l)->p = e;
- return e;
- }
- }
-
- return 0;
-
-}
-
-/**
- * @brief Like pvl_find(), but continues the search where the last find() or
- * find_next() left off.
- *
- * @param l The list to operate on
- * @param f Pointer to the find function
- * @param v Pointer to constant data to pass into the function
- *
- * @return Pointer to the element that the find function found.
- */
-
-pvl_elem
-pvl_find_next(pvl_list l,pvl_findf f,void* v)
-{
-
- pvl_elem e;
-
- for (e=pvl_head(l); e!= 0; e = pvl_next(e))
- {
- if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1)
- {
- /* Save this elem for a call to find_next */
- ((struct pvl_list_t *)l)->p = e;
- return e;
- }
- }
-
- return 0;
-
-}
-
-/**
- * @brief Remove the all the elements in the list. The does not free
- * the data items the elements hold.
- */
-
-void
-pvl_clear(pvl_list l)
-{
- pvl_elem e = pvl_head(l);
- pvl_elem next;
-
- if (e == 0) {
- return;
- }
-
- while(e != 0)
- {
- next = pvl_next(e);
- pvl_remove(l,e);
- e = next;
- }
-}
-
-
-/**
- * @brief Returns the number of items in the list.
- */
-
-int
-pvl_count(pvl_list L)
-{
- return L->count;
-}
-
-
-/**
- * @brief Returns a pointer to the given element
- */
-
-pvl_elem
-pvl_next(pvl_elem E)
-{
- if (E == 0){
- return 0;
- }
-
- return (pvl_elem)E->next;
-}
-
-
-/**
- * @brief Returns a pointer to the element previous to the element given.
- */
-
-pvl_elem
-pvl_prior(pvl_elem E)
-{
- return (pvl_elem)E->prior;
-}
-
-
-/**
- * @brief Returns a pointer to the first item in the list.
- */
-
-pvl_elem
-pvl_head(pvl_list L )
-{
- return (pvl_elem)L->head;
-}
-
-/**
- * @brief Returns a pointer to the last item in the list.
- */
-pvl_elem
-pvl_tail(pvl_list L)
-{
- return (pvl_elem)L->tail;
-}
-
-#ifndef PVL_USE_MACROS
-void*
-pvl_data(pvl_elem E)
-{
- if ( E == 0){
- return 0;
- }
-
- return E->d;
-}
-#endif
-
-/**
- * @brief Call a function for every item in the list.
- *
- * @param l The list to operate on
- * @param f Pointer to the function to call
- * @param v Data to pass to the function on every iteration
- */
-
-void
-pvl_apply(pvl_list l,pvl_applyf f, void *v)
-{
- pvl_elem e;
-
- for (e=pvl_head(l); e!= 0; e = pvl_next(e))
- {
- (*f)(((struct pvl_elem_t *)e)->d,v);
- }
-
-}
diff --git a/libical/src/libical/pvl.h b/libical/src/libical/pvl.h
deleted file mode 100644
index 92ec546479..0000000000
--- a/libical/src/libical/pvl.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*======================================================================
- FILE: pvl.h
- CREATOR: eric November, 1995
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-======================================================================*/
-
-
-#ifndef __PVL_H__
-#define __PVL_H__
-
-typedef struct pvl_list_t* pvl_list;
-typedef struct pvl_elem_t* pvl_elem;
-
-/**
- * This type is private. Always use pvl_elem instead. The struct would
- * not even appear in this header except to make code in the USE_MACROS
- * blocks work
- */
-
-typedef struct pvl_elem_t
-{
- int MAGIC; /**< Magic Identifier */
- void *d; /**< Pointer to data user is storing */
- struct pvl_elem_t *next; /**< Next element */
- struct pvl_elem_t *prior; /**< Prior element */
-} pvl_elem_t;
-
-
-
-/**
- * This global is incremented for each call to pvl_new_element(); it gives each
- * list a unique identifer
- */
-
-extern int pvl_elem_count;
-extern int pvl_list_count;
-
-/* Create new lists or elements */
-pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior);
-pvl_list pvl_newlist(void);
-void pvl_free(pvl_list);
-
-/* Add, remove, or get the head of the list */
-void pvl_unshift(pvl_list l,void *d);
-void* pvl_shift(pvl_list l);
-pvl_elem pvl_head(pvl_list);
-
-/* Add, remove or get the tail of the list */
-void pvl_push(pvl_list l,void *d);
-void* pvl_pop(pvl_list l);
-pvl_elem pvl_tail(pvl_list);
-
-/* Insert elements in random places */
-typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/
-void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d);
-void pvl_insert_after(pvl_list l,pvl_elem e,void *d);
-void pvl_insert_before(pvl_list l,pvl_elem e,void *d);
-
-/* Remove an element, or clear the entire list */
-void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */
-void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */
-
-int pvl_count(pvl_list);
-
-/* Navagate the list */
-pvl_elem pvl_next(pvl_elem e);
-pvl_elem pvl_prior(pvl_elem e);
-
-/* get the data in the list */
-#ifndef PVL_USE_MACROS
-void* pvl_data(pvl_elem);
-#else
-#define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d;
-#endif
-
-
-/* Find an element for which a function returns true */
-typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/
-pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v);
-pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v);
-
-/**
- * Pass each element in the list to a function
- * a is list elem, b is other data
- */
-typedef void (*pvl_applyf)(void* a, void* b);
-void pvl_apply(pvl_list l,pvl_applyf f, void *v);
-
-
-#endif /* __PVL_H__ */
-
-
-
-
-
diff --git a/libical/src/libical/sspm.c b/libical/src/libical/sspm.c
deleted file mode 100644
index c6647d37af..0000000000
--- a/libical/src/libical/sspm.c
+++ /dev/null
@@ -1,1619 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: sspm.c Parse Mime
- CREATOR: eric 25 June 2000
-
- $Id$
- $Locker$
-
- 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.
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Initial Developer of the Original Code is Eric Busboom
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-
-#include <stdio.h>
-#include <string.h>
-#include "sspm.h"
-#include <assert.h>
-#include <ctype.h> /* for tolower */
-#include <stdlib.h> /* for malloc, free */
-#include <string.h> /* for strcasecmp */
-
-#ifdef DMALLOC
-#include "dmalloc.h"
-#endif
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-#define TMP_BUF_SIZE 1024
-
-
-enum mime_state {
- UNKNOWN_STATE,
- IN_HEADER,
- END_OF_HEADER,
- IN_BODY,
- OPENING_PART,
- END_OF_PART,
- TERMINAL_END_OF_PART,
- END_OF_INPUT
-};
-
-struct mime_impl{
- struct sspm_part *parts;
- size_t max_parts;
- int part_no;
- int level;
- struct sspm_action_map *actions;
- char* (*get_string)(char *s, size_t size, void* data);
- void* get_string_data;
- char temp[TMP_BUF_SIZE];
- enum mime_state state;
-};
-
-void sspm_free_header(struct sspm_header *header);
-void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header);
-void sspm_read_header(struct mime_impl *impl,struct sspm_header *header);
-
-char* sspm_strdup(char* str){
-
- char* s;
-
- s = strdup(str);
-
- return s;
-}
-
-
-static struct major_content_type_map
-{
- enum sspm_major_type type;
- char* str;
-
-} major_content_type_map[] =
-{
- {SSPM_MULTIPART_MAJOR_TYPE,"multipart" },
- {SSPM_TEXT_MAJOR_TYPE,"text" },
- {SSPM_TEXT_MAJOR_TYPE,"text" },
- {SSPM_IMAGE_MAJOR_TYPE,"image" },
- {SSPM_AUDIO_MAJOR_TYPE,"audio" },
- {SSPM_VIDEO_MAJOR_TYPE,"video" },
- {SSPM_APPLICATION_MAJOR_TYPE,"application" },
- {SSPM_MULTIPART_MAJOR_TYPE,"multipart" },
- {SSPM_MESSAGE_MAJOR_TYPE,"message" },
- {SSPM_UNKNOWN_MAJOR_TYPE,"" },
-};
-
-static struct minor_content_type_map
-{
- enum sspm_minor_type type;
- char* str;
-
-} minor_content_type_map[] =
-{
- {SSPM_ANY_MINOR_TYPE,"*" },
- {SSPM_PLAIN_MINOR_TYPE,"plain" },
- {SSPM_RFC822_MINOR_TYPE,"rfc822" },
- {SSPM_DIGEST_MINOR_TYPE,"digest" },
- {SSPM_CALENDAR_MINOR_TYPE,"calendar" },
- {SSPM_MIXED_MINOR_TYPE,"mixed" },
- {SSPM_RELATED_MINOR_TYPE,"related" },
- {SSPM_ALTERNATIVE_MINOR_TYPE,"alternative" },
- {SSPM_PARALLEL_MINOR_TYPE, "parallel" },
- {SSPM_UNKNOWN_MINOR_TYPE,"" }
-};
-
-
-
-struct encoding_map {
- enum sspm_encoding encoding;
- char* str;
-} sspm_encoding_map[] =
-{
- {SSPM_NO_ENCODING,""},
- {SSPM_QUOTED_PRINTABLE_ENCODING,"quoted-printable"},
- {SSPM_8BIT_ENCODING,"8bit"},
- {SSPM_7BIT_ENCODING,"7bit"},
- {SSPM_BINARY_ENCODING,"binary"},
- {SSPM_BASE64_ENCODING,"base64"},
- {SSPM_UNKNOWN_ENCODING,""}
-
-};
-
-
-char* sspm_get_parameter(char* line, char* parameter)
-{
- char *p,*s,*q;
- static char name[1024];
-
- /* Find where the parameter name is in the line */
- p = strstr(line,parameter);
-
- if( p == 0){
- return 0;
- }
-
- /* skip over the parameter name, the '=' and any blank spaces */
-
- p+=strlen(parameter);
-
- while(*p==' ' || *p == '='){
- p++;
- }
-
- /*now find the next semicolon*/
-
- s = strchr(p,';');
-
- /* Strip of leading quote */
- q = strchr(p,'\"');
-
- if(q !=0){
- p = q+1;
- }
-
- if(s != 0){
- strncpy(name,p,(size_t)s-(size_t)p);
- } else {
- strcpy(name,p);
- }
-
- /* Strip off trailing quote, if it exists */
-
- q = strrchr(name,'\"');
-
- if (q != 0){
- *q='\0';
- }
-
- return name;
-}
-
-char* sspm_property_name(char* line)
-{
- static char name[1024];
- char *c = strchr(line,':');
-
- if(c != 0){
- strncpy(name,line,(size_t)c-(size_t)line);
- name[(size_t)c-(size_t)line] = '\0';
- return name;
- } else {
- return 0;
- }
-}
-
-char* sspm_value(char* line)
-{
- static char value[1024];
-
- char *c,*s, *p;
-
- /* Find the first colon and the next semicolon */
-
- c = strchr(line,':');
- s = strchr(c,';');
-
- /* Skip the colon */
- c++;
-
- if (s == 0){
- s = c+strlen(line);
- }
-
- for(p=value; c != s; c++){
- if(*c!=' ' && *c!='\n'){
- *(p++) = *c;
- }
- }
-
- *p='\0';
-
- return value;
-
-}
-
-static char *mime_headers[] = {
- "Content-Type",
- "Content-Transfer-Encoding",
- "Content-Disposition",
- "Content-Id",
- "Mime-Version",
- 0
-};
-
-
-void* sspm_default_new_part()
-{
- return 0;
-}
-void sspm_default_add_line(void *part, struct sspm_header *header,
- char* line, size_t size)
-{
-}
-
-void* sspm_default_end_part(void* part)
-{
- return 0;
-}
-
-void sspm_default_free_part(void *part)
-{
-}
-
-
-
-struct sspm_action_map sspm_action_map[] =
-{
- {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,sspm_default_new_part,sspm_default_add_line,sspm_default_end_part,sspm_default_free_part},
-};
-
-int sspm_is_mime_header(char *line)
-{
- char *name = sspm_property_name(line);
- int i;
-
- if(name == 0){
- return 0;
- }
-
- for(i = 0; mime_headers[i] != 0; i++){
- if(strcasecmp(name, mime_headers[i]) == 0)
- return 1;
- }
-
- return 0;
-}
-
-int sspm_is_mail_header(char* line)
-{
- char *name = sspm_property_name(line);
-
- if (name != 0){
- return 1;
- }
-
- return 0;
-
-}
-
-int sspm_is_blank(char* line)
-{
- char *p;
- char c =0;
-
- for(p=line; *p!=0; p++){
- if( ! (*p == ' '|| *p == '\t' || *p=='\n') ){
- c++;
- }
- }
-
- if (c==0){
- return 1;
- }
-
- return 0;
-
-}
-
-int sspm_is_continuation_line(char* line)
-{
- if (line[0] == ' '|| line[0] == '\t' ) {
- return 1;
- }
-
- return 0;
-}
-
-int sspm_is_mime_boundary(char *line)
-{
- if( line[0] == '-' && line[1] == '-') {
- return 1;
- }
-
- return 0;
-}
-
-int sspm_is_mime_terminating_boundary(char *line)
-{
-
-
- if (sspm_is_mime_boundary(line) &&
- strstr(line,"--\n")){
- return 1;
- }
-
- return 0;
-}
-
-enum line_type {
- EMPTY,
- BLANK,
- MIME_HEADER,
- MAIL_HEADER,
- HEADER_CONTINUATION,
- BOUNDARY,
- TERMINATING_BOUNDARY,
- UNKNOWN_TYPE
-};
-
-
-static enum line_type get_line_type(char* line){
-
- if (line == 0){
- return EMPTY;
- } else if(sspm_is_blank(line)){
- return BLANK;
- } else if (sspm_is_mime_header(line)){
- return MIME_HEADER;
- } else if (sspm_is_mail_header(line)){
- return MAIL_HEADER;
- } else if (sspm_is_continuation_line(line)){
- return HEADER_CONTINUATION;
- } else if (sspm_is_mime_terminating_boundary(line)){
- return TERMINATING_BOUNDARY;
- } else if (sspm_is_mime_boundary(line)) {
- return BOUNDARY;
- } else {
- return UNKNOWN_TYPE;
- }
-
-
-}
-
-
-static struct sspm_action_map get_action(struct mime_impl *impl,
- enum sspm_major_type major,
- enum sspm_minor_type minor)
-{
- int i;
-
- /* Read caller suppled action map */
-
- if (impl->actions != 0){
- for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){
- if((major == impl->actions[i].major &&
- minor == impl->actions[i].minor) ||
- (major == impl->actions[i].major &&
- minor == SSPM_ANY_MINOR_TYPE)){
- return impl->actions[i];
- }
- }
- }
-
- /* Else, read default action map */
-
- for(i=0; sspm_action_map[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){
- if((major == sspm_action_map[i].major &&
- minor == sspm_action_map[i].minor) ||
- (major == sspm_action_map[i].major &&
- minor == SSPM_ANY_MINOR_TYPE)){
- break;
- }
- }
-
- return sspm_action_map[i];
-}
-
-
-char* sspm_lowercase(char* str)
-{
- char* p = 0;
- char* new = sspm_strdup(str);
-
- if(str ==0){
- return 0;
- }
-
- for(p = new; *p!=0; p++){
- *p = tolower(*p);
- }
-
- return new;
-}
-
-enum sspm_major_type sspm_find_major_content_type(char* type)
-{
- int i;
-
- char* ltype = sspm_lowercase(type);
-
- for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){
- if(strncmp(ltype, major_content_type_map[i].str,
- strlen(major_content_type_map[i].str))==0){
- free(ltype);
- return major_content_type_map[i].type;
- }
- }
- free(ltype);
- return major_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */
-}
-
-enum sspm_minor_type sspm_find_minor_content_type(char* type)
-{
- int i;
- char* ltype = sspm_lowercase(type);
-
- char *p = strchr(ltype,'/');
-
- if (p==0){
- return SSPM_UNKNOWN_MINOR_TYPE;
- }
-
- p++; /* Skip the '/' */
-
- for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){
- if(strncmp(p, minor_content_type_map[i].str,
- strlen(minor_content_type_map[i].str))==0){
- free(ltype);
- return minor_content_type_map[i].type;
- }
- }
-
- free(ltype);
- return minor_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */
-}
-
-char* sspm_major_type_string(enum sspm_major_type type)
-{
- int i;
-
- for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE;
- i++){
-
- if(type == major_content_type_map[i].type){
- return major_content_type_map[i].str;
- }
- }
-
- return major_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */
-}
-
-char* sspm_minor_type_string(enum sspm_minor_type type)
-{
- int i;
- for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE;
- i++){
- if(type == minor_content_type_map[i].type){
- return minor_content_type_map[i].str;
- }
- }
-
- return minor_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */
-}
-
-
-char* sspm_encoding_string(enum sspm_encoding type)
-{
- int i;
- for (i=0; sspm_encoding_map[i].encoding != SSPM_UNKNOWN_ENCODING;
- i++){
- if(type == sspm_encoding_map[i].encoding){
- return sspm_encoding_map[i].str;
- }
- }
-
- return sspm_encoding_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */
-}
-
-/* Interpret a header line and add its data to the header
- structure. */
-void sspm_build_header(struct sspm_header *header, char* line)
-{
- char *prop;
- char *val;
-
- val = sspm_strdup(sspm_value(line));
- prop = sspm_strdup(sspm_property_name(line));
-
- if(strcmp(prop,"Content-Type") == 0){
-
- /* Create a new mime_header, fill in content-type
- and possibly boundary */
-
- char* boundary= sspm_get_parameter(line,"boundary");
-
- header->def = 0;
- header->major = sspm_find_major_content_type(val);
- header->minor = sspm_find_minor_content_type(val);
-
- if(header->minor == SSPM_UNKNOWN_MINOR_TYPE){
- char *p = strchr(val,'/');
-
- if (p != 0){
- p++; /* Skip the '/' */
-
- header->minor_text = sspm_strdup(p);
- } else {
- /* Error, malformed content type */
- header->minor_text = sspm_strdup("unknown");
- }
- }
- if (boundary != 0){
- header->boundary = sspm_strdup(boundary);
- }
-
- } else if(strcmp(prop,"Content-Transfer-Encoding")==0){
- char* encoding = sspm_value(line);
- char* lencoding = sspm_lowercase(encoding);
-
- if(strcmp(lencoding,"base64")==0){
- header->encoding = SSPM_BASE64_ENCODING;
- } else if(strcmp(lencoding,"quoted-printable")==0){
- header->encoding = SSPM_QUOTED_PRINTABLE_ENCODING;
- } else if(strcmp(lencoding,"binary")==0){
- header->encoding = SSPM_BINARY_ENCODING;
- } else if(strcmp(lencoding,"7bit")==0){
- header->encoding = SSPM_7BIT_ENCODING;
- } else if(strcmp(lencoding,"8bit")==0){
- header->encoding = SSPM_8BIT_ENCODING;
- } else {
- header->encoding = SSPM_UNKNOWN_ENCODING;
- }
-
-
- free(lencoding);
-
- header->def = 0;
-
- } else if(strcmp(prop,"Content-Id")==0){
- char* cid = sspm_value(line);
- header->content_id = sspm_strdup(cid);
- header->def = 0;
-
- }
- free(val);
- free(prop);
-}
-
-char* sspm_get_next_line(struct mime_impl *impl)
-{
- char* s;
- s = impl->get_string(impl->temp,TMP_BUF_SIZE,impl->get_string_data);
-
- if(s == 0){
- impl->state = END_OF_INPUT;
- }
- return s;
-}
-
-
-void sspm_store_part(struct mime_impl *impl, struct sspm_header header,
- int level, void *part, size_t size)
-{
-
- impl->parts[impl->part_no].header = header;
- impl->parts[impl->part_no].level = level;
- impl->parts[impl->part_no].data = part;
- impl->parts[impl->part_no].data_size = size;
- impl->part_no++;
-}
-
-void sspm_set_error(struct sspm_header* header, enum sspm_error error,
- char* message)
-{
- header->error = error;
-
- if(header->error_text!=0){
- free(header->error_text);
- }
-
- header->def = 0;
-
- if(message != 0){
- header->error_text = sspm_strdup(message);
- } else {
- header->error_text = 0;
- }
-
-}
-
-void* sspm_make_part(struct mime_impl *impl,
- struct sspm_header *header,
- struct sspm_header *parent_header,
- void **end_part,
- size_t *size)
-{
-
- /* For a single part type, read to the boundary, if there is a
- boundary. Otherwise, read until the end of input. This routine
- assumes that the caller has read the header and has left the input
- at the first blank line */
-
- char *line;
- void *part;
- int end = 0;
-
- struct sspm_action_map action = get_action(
- impl,
- header->major,
- header->minor);
-
- *size = 0;
- part =action.new_part();
-
- impl->state = IN_BODY;
-
- while(end == 0 && (line = sspm_get_next_line(impl)) != 0){
-
- if(sspm_is_mime_boundary(line)){
-
- /* If there is a boundary, then this must be a multipart
- part, so there must be a parent_header. */
- if(parent_header == 0){
- char* boundary;
- end = 1;
- *end_part = 0;
-
- sspm_set_error(header,SSPM_UNEXPECTED_BOUNDARY_ERROR,line);
-
- /* Read until the paired terminating boundary */
- if((boundary = (char*)malloc(strlen(line)+5)) == 0){
- fprintf(stderr,"Out of memory");
- abort();
- }
- strcpy(boundary,line);
- strcat(boundary,"--");
- while((line = sspm_get_next_line(impl)) != 0){
- /*printf("Error: %s\n",line);*/
- if(strcmp(boundary,line)==0){
- break;
- }
- }
- free(boundary);
-
- break;
- }
-
- if(strncmp((line+2),parent_header->boundary,
- sizeof(parent_header->boundary)) == 0){
- *end_part = action.end_part(part);
-
- if(sspm_is_mime_boundary(line)){
- impl->state = END_OF_PART;
- } else if ( sspm_is_mime_terminating_boundary(line)){
- impl->state = TERMINAL_END_OF_PART;
- }
- end = 1;
- } else {
- /* Error, this is not the correct terminating boundary*/
-
- /* read and discard until we get the right boundary. */
- char* boundary;
- char msg[256];
-
- snprintf(msg,256,
- "Expected: %s--. Got: %s",
- parent_header->boundary,line);
-
- sspm_set_error(parent_header,
- SSPM_WRONG_BOUNDARY_ERROR,msg);
-
- /* Read until the paired terminating boundary */
- if((boundary = (char*)malloc(strlen(line)+5)) == 0){
- fprintf(stderr,"Out of memory");
- abort();
- }
- strcpy(boundary,line);
- strcat(boundary,"--");
- while((line = sspm_get_next_line(impl)) != 0){
- if(strcmp(boundary,line)==0){
- break;
- }
- }
- free(boundary);
-
- }
- } else {
- char* data=0;
- char* rtrn=0;
- *size = strlen(line);
-
- data = (char*)malloc(*size+2);
- assert(data != 0);
- if (header->encoding == SSPM_BASE64_ENCODING){
- rtrn = decode_base64(data,line,size);
- } else if(header->encoding == SSPM_QUOTED_PRINTABLE_ENCODING){
- rtrn = decode_quoted_printable(data,line,size);
- }
-
- if(rtrn == 0){
- strcpy(data,line);
- }
-
- /* add a end-of-string after the data, just in case binary
- data from decode64 gets passed to a tring handling
- routine in add_line */
- data[*size+1]='\0';
-
- action.add_line(part,header,data,*size);
-
- free(data);
- }
- }
-
- if (end == 0){
- /* End the part if the input is exhausted */
- *end_part = action.end_part(part);
- }
-
- return end_part;
-}
-
-
-void* sspm_make_multipart_subpart(struct mime_impl *impl,
- struct sspm_header *parent_header)
-{
- struct sspm_header header;
- char *line;
- void* part;
- size_t size;
-
- if(parent_header->boundary == 0){
- /* Error. Multipart headers must have a boundary*/
-
- sspm_set_error(parent_header,SSPM_NO_BOUNDARY_ERROR,0);
- /* read all of the reamining lines */
- while((line = sspm_get_next_line(impl)) != 0){
- }
-
- return 0;
- }
-
-
- /* Step 1: Read the opening boundary */
-
- if(get_line_type(impl->temp) != BOUNDARY){
- while((line=sspm_get_next_line(impl)) != 0 ){
- if(sspm_is_mime_boundary(line)){
-
- assert(parent_header != 0);
-
- /* Check if it is the right boundary */
- if(!sspm_is_mime_terminating_boundary(line) &&
- strncmp((line+2),parent_header->boundary,
- sizeof(parent_header->boundary))
- == 0){
- /* The +2 in strncmp skips over the leading "--" */
-
- break;
- } else {
- /* Got the wrong boundary, so read and discard
- until we get the right boundary. */
- char* boundary;
- char msg[256];
-
- snprintf(msg,256,
- "Expected: %s. Got: %s",
- parent_header->boundary,line);
-
- sspm_set_error(parent_header,
- SSPM_WRONG_BOUNDARY_ERROR,msg);
-
- /* Read until the paired terminating boundary */
- if((boundary = (char*)malloc(strlen(line)+5)) == 0){
- fprintf(stderr,"Out of memory");
- abort();
- }
- strcpy(boundary,line);
- strcat(boundary,"--");
- while((line = sspm_get_next_line(impl)) != 0){
- if(strcmp(boundary,line)==0){
- break;
- }
- }
- free(boundary);
-
- return 0;
- }
- }
- }
- }
-
- /* Step 2: Get the part header */
- sspm_read_header(impl,&header);
-
- /* If the header is still listed as default, there was probably an
- error */
- if(header.def == 1 && header.error != SSPM_NO_ERROR){
- sspm_set_error(&header,SSPM_NO_HEADER_ERROR,0);
- return 0;
- }
-
- if(header.error!= SSPM_NO_ERROR){
- sspm_store_part(impl,header,impl->level,0,0);
- return 0;
- }
-
- /* Step 3: read the body */
-
- if(header.major == SSPM_MULTIPART_MAJOR_TYPE){
- struct sspm_header *child_header;
- child_header = &(impl->parts[impl->part_no].header);
-
- /* Store the multipart part */
- sspm_store_part(impl,header,impl->level,0,0);
-
- /* now get all of the sub-parts */
- part = sspm_make_multipart_part(impl,child_header);
-
- if(get_line_type(impl->temp) != TERMINATING_BOUNDARY){
-
- sspm_set_error(child_header,SSPM_NO_BOUNDARY_ERROR,impl->temp);
- return 0;
- }
-
- sspm_get_next_line(impl); /* Step past the terminating boundary */
-
- } else {
- sspm_make_part(impl, &header,parent_header,&part,&size);
-
- memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part));
-
- sspm_store_part(impl,header,impl->level,part,size);
-
- }
-
- return part;
-}
-
-void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header)
-{
- void *part=0;
-
- /* Now descend a level into each of the children of this part */
- impl->level++;
-
- /* Now we are working on the CHILD */
- memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part));
-
- do{
- part = sspm_make_multipart_subpart(impl,header);
-
- if (part==0){
- /* Clean up the part in progress */
- impl->parts[impl->part_no].header.major
- = SSPM_NO_MAJOR_TYPE;
- impl->parts[impl->part_no].header.minor
- = SSPM_NO_MINOR_TYPE;
-
- }
-
-
- } while (get_line_type(impl->temp) != TERMINATING_BOUNDARY &&
- impl->state != END_OF_INPUT);
-
- impl->level--;
-
- return 0;
-}
-
-
-void sspm_read_header(struct mime_impl *impl,struct sspm_header *header)
-{
-#define BUF_SIZE 1024
-#define MAX_HEADER_LINES 25
-
- char *buf;
- char header_lines[MAX_HEADER_LINES][BUF_SIZE]; /* HACK, hard limits */
- int current_line = -1;
- int end = 0;
-
- memset(header_lines,0,sizeof(header_lines));
- memset(header,0,sizeof(struct sspm_header));
-
- /* Set up default header */
- header->def = 1;
- header->major = SSPM_TEXT_MAJOR_TYPE;
- header->minor = SSPM_PLAIN_MINOR_TYPE;
- header->error = SSPM_NO_ERROR;
- header->error_text = 0;
-
- /* Read all of the lines into memory */
- while(end==0&& (buf=sspm_get_next_line(impl)) != 0){
-
- enum line_type line_type = get_line_type(buf);
-
- switch(line_type){
- case BLANK: {
- end = 1;
- impl->state = END_OF_HEADER;
- break;
- }
-
- case MAIL_HEADER:
- case MIME_HEADER: {
- impl->state = IN_HEADER;
- current_line++;
-
- assert(strlen(buf) < BUF_SIZE);
-
- strncpy(header_lines[current_line],buf,BUF_SIZE-1);
- header_lines[current_line][BUF_SIZE-1] = '\0';
-
- break;
- }
-
- case HEADER_CONTINUATION: {
- char* last_line, *end;
- char *buf_start;
-
- if(current_line < 0){
- /* This is not really a continuation line, since
- we have not see any header line yet */
- sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf);
- return;
- }
-
- last_line = header_lines[current_line];
- end = (char*) ( (size_t)strlen(last_line)+
- (size_t)last_line);
-
- impl->state = IN_HEADER;
-
-
- /* skip over the spaces in buf start, and remove the new
- line at the end of the lat line */
- if (last_line[strlen(last_line)-1] == '\n'){
- last_line[strlen(last_line)-1] = '\0';
- }
- buf_start = buf;
- while(*buf_start == ' ' ||*buf_start == '\t' ){
- buf_start++;
- }
-
- assert( strlen(buf_start) + strlen(last_line) < BUF_SIZE);
-
- strncat(last_line,buf_start,BUF_SIZE-strlen(last_line)-1);
-
- break;
- }
-
- default: {
- sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf);
- return;
- }
- }
- }
-
-
- for(current_line = 0;
- current_line < MAX_HEADER_LINES && header_lines[current_line][0] != 0;
- current_line++){
-
- sspm_build_header(header,header_lines[current_line]);
- }
-
-
-}
-
-/* Root routine for parsing mime entries*/
-int sspm_parse_mime(struct sspm_part *parts,
- size_t max_parts,
- struct sspm_action_map *actions,
- char* (*get_string)(char *s, size_t size, void* data),
- void *get_string_data,
- struct sspm_header *first_header
- )
-{
- struct mime_impl impl;
- struct sspm_header header;
- void *part;
- int i;
-
- /* Initialize all of the data */
- memset(&impl,0,sizeof(struct mime_impl));
- memset(&header,0,sizeof(struct sspm_header));
-
- for(i = 0; i<(int)max_parts; i++){
- parts[i].header.major = SSPM_NO_MAJOR_TYPE;
- parts[i].header.minor = SSPM_NO_MINOR_TYPE;
- }
-
- impl.parts = parts;
- impl.max_parts = max_parts;
- impl.part_no = 0;
- impl.actions = actions;
- impl.get_string = get_string;
- impl.get_string_data = get_string_data;
-
- /* Read the header of the message. This will be the email header,
- unless first_header is specified. But ( HACK) that var is not
- currently being used */
- sspm_read_header(&impl,&header);
-
- if(header.major == SSPM_MULTIPART_MAJOR_TYPE){
- struct sspm_header *child_header;
- child_header = &(impl.parts[impl.part_no].header);
-
- sspm_store_part(&impl,header,impl.level,0,0);
-
- part = sspm_make_multipart_part(&impl,child_header);
-
- } else {
- void *part;
- size_t size;
- sspm_make_part(&impl, &header, 0,&part,&size);
-
- memset(&(impl.parts[impl.part_no]), 0, sizeof(struct sspm_part));
-
- sspm_store_part(&impl,header,impl.level,part,size);
- }
-
- return 0;
-}
-
-void sspm_free_parts(struct sspm_part *parts, size_t max_parts)
-{
- int i;
-
- for(i = 0; i<(int)max_parts && parts[i].header.major != SSPM_NO_MAJOR_TYPE;
- i++){
- sspm_free_header(&(parts[i].header));
- }
-}
-
-void sspm_free_header(struct sspm_header *header)
-{
- if(header->boundary!=0){
- free(header->boundary);
- }
- if(header->minor_text!=0){
- free(header->minor_text);
- }
- if(header->charset!=0){
- free(header->charset);
- }
- if(header->filename!=0){
- free(header->filename);
- }
- if(header->content_id!=0){
- free(header->content_id);
- }
- if(header->error_text!=0){
- free(header->error_text);
- }
-}
-
-/***********************************************************************
-The remaining code is beased on code from the mimelite distribution,
-which has the following notice:
-
-| Authorship:
-| Copyright (c) 1994 Gisle Hannemyr.
-| Permission is granted to hack, make and distribute copies of this
-| program as long as this copyright notice is not removed.
-| Flames, bug reports, comments and improvements to:
-| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway
-| email: Inet: gisle@oslonett.no
-
-The code is heavily modified by Eric Busboom.
-
-***********************************************************************/
-
-char *decode_quoted_printable(char *dest,
- char *src,
- size_t *size)
-{
- int cc;
- size_t i=0;
-
- while (*src != 0 && i < *size) {
- if (*src == '=') {
-
- src++;
- if (!*src) {
- break;
- }
-
- /* remove soft line breaks*/
- if ((*src == '\n') || (*src == '\r')){
- src++;
- if ((*src == '\n') || (*src == '\r')){
- src++;
- }
- continue;
- }
-
- cc = isdigit(*src) ? (*src - '0') : (*src - 55);
- cc *= 0x10;
- src++;
- if (!*src) {
- break;
- }
- cc += isdigit(*src) ? (*src - '0') : (*src - 55);
-
- *dest = cc;
-
- } else {
- *dest = *src;
- }
-
- dest++;
- src++;
- i++;
- }
-
- *dest = '\0';
-
- *size = i;
- return(dest);
-}
-
-char *decode_base64(char *dest,
- char *src,
- size_t *size)
-{
- int cc = 0;
- char buf[4] = {0,0,0,0};
- int p = 0;
- int valid_data = 0;
- size_t size_out=0;
-
- while (*src && p<(int)*size && (cc!= -1)) {
-
- /* convert a character into the Base64 alphabet */
- cc = *src++;
-
- if ((cc >= 'A') && (cc <= 'Z')) cc = cc - 'A';
- else if ((cc >= 'a') && (cc <= 'z')) cc = cc - 'a' + 26;
- else if ((cc >= '0') && (cc <= '9')) cc = cc - '0' + 52;
- else if (cc == '/') cc = 63;
- else if (cc == '+') cc = 62;
- else cc = -1;
-
- assert(cc<64);
-
- /* If we've reached the end, fill the remaining slots in
- the bucket and do a final conversion */
- if(cc== -1){
- if(valid_data == 0){
- return 0;
- }
-
- while(p%4!=3){
- p++;
- buf[p%4] = 0;
- }
- } else {
- buf[p%4] = cc;
- size_out++;
- valid_data = 1;
- }
-
-
- /* When we have 4 base64 letters, convert them into three
- bytes */
- if (p%4 == 3) {
- *dest++ =(buf[0]<< 2)|((buf[1] & 0x30) >> 4);
- *dest++ =((buf[1] & 0x0F) << 4)|((buf[2] & 0x3C) >> 2);
- *dest++ =((buf[2] & 0x03) << 6)|(buf[3] & 0x3F);
-
- memset(buf,0,4);
- }
-
- p++;
-
- }
- /* Calculate the size of the converted data*/
- *size = ((int)(size_out/4))*3;
- if(size_out%4 == 2) *size+=1;
- if(size_out%4 == 3) *size+=2;
-
- return(dest);
-}
-
-
-/***********************************************************************
-
- Routines to output MIME
-
-**********************************************************************/
-
-
-struct sspm_buffer {
- char* buffer;
- char* pos;
- size_t buf_size;
- int line_pos;
-};
-
-void sspm_append_string(struct sspm_buffer* buf, char* string);
-void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part, int *part_num);
-
-void sspm_append_hex(struct sspm_buffer* buf, char ch)
-{
- char tmp[3];
-
- sprintf(tmp,"=%02X",ch);
-
- sspm_append_string(buf,tmp);
-}
-
-/* a copy of icalmemory_append_char */
-void sspm_append_char(struct sspm_buffer* buf, char ch)
-{
- char *new_buf;
- char *new_pos;
-
- size_t data_length, final_length;
-
- data_length = (size_t)buf->pos - (size_t)buf->buffer;
-
- final_length = data_length + 2;
-
- if ( final_length > (size_t) buf->buf_size ) {
-
- buf->buf_size = (buf->buf_size) * 2 + final_length +1;
-
- new_buf = realloc(buf->buffer,buf->buf_size);
-
- new_pos = (void*)((size_t)new_buf + data_length);
-
- buf->pos = new_pos;
- buf->buffer = new_buf;
- }
-
- *(buf->pos) = ch;
- buf->pos += 1;
- *(buf->pos) = 0;
-}
-/* A copy of icalmemory_append_string */
-void sspm_append_string(struct sspm_buffer* buf, char* string)
-{
- char *new_buf;
- char *new_pos;
-
- size_t data_length, final_length, string_length;
-
- string_length = strlen(string);
- data_length = (size_t)buf->pos - (size_t)buf->buffer;
- final_length = data_length + string_length;
-
- if ( final_length >= (size_t) buf->buf_size) {
-
-
- buf->buf_size = (buf->buf_size) * 2 + final_length;
-
- new_buf = realloc(buf->buffer,buf->buf_size);
-
- new_pos = (void*)((size_t)new_buf + data_length);
-
- buf->pos = new_pos;
- buf->buffer = new_buf;
- }
-
- strcpy(buf->pos, string);
-
- buf->pos += string_length;
-}
-
-
-
-static int sspm_is_printable(char c)
-{
- return (c >= 33) && (c <= 126) && (c != '=');
-
-}
-
-
-void sspm_encode_quoted_printable(struct sspm_buffer *buf, char* data)
-{
- char *p;
- int lpos = 0;
-
- for(p = data; *p != 0; p++){
-
- if(sspm_is_printable(*p)){
- /* plain characters can represent themselves */
- /* RFC2045 Rule #2 */
- sspm_append_char(buf,*p);
- lpos++;
- } else if ( *p == '\t' || *p == ' ' ) {
-
- /* For tabs and spaces, only encode if they appear at the
- end of the line */
- /* RFC2045 Rule #3 */
-
- char n = *(p+1);
-
- if( n == '\n' || n == '\r'){
- sspm_append_hex(buf,*p);
- lpos += 3;
- } else {
- sspm_append_char(buf,*p);
- lpos++;
- }
-
- } else if( *p == '\n' || *p == '\r'){
- sspm_append_char(buf,*p);
-
- lpos=0;
-
- } else {
- /* All others need to be encoded */
- sspm_append_hex(buf,*p);
- lpos+=3;
- }
-
-
- /* Add line breaks */
- if (lpos > 72){
- lpos = 0;
- sspm_append_string(buf,"=\n");
- }
- }
-}
-
-static char BaseTable[64] = {
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
-};
-
-void sspm_write_base64(struct sspm_buffer *buf, char* inbuf,int size )
-{
-
- char outbuf[4];
- int i;
-
- outbuf[0] = outbuf[1] = outbuf[2] = outbuf[3] = 65;
-
- switch(size){
-
- case 4:
- outbuf[3] = inbuf[2] & 0x3F;
-
- case 3:
- outbuf[2] = ((inbuf[1] & 0x0F) << 2) | ((inbuf[2] & 0xC0) >> 6);
-
- case 2:
- outbuf[0] = (inbuf[0] & 0xFC) >> 2;
- outbuf[1] = ((inbuf[0] & 0x03) << 4) | ((inbuf[1] & 0xF0) >> 4);
- break;
-
- default:
- assert(0);
- }
-
- for(i = 0; i < 4; i++){
-
- if(outbuf[i] == 65){
- sspm_append_char(buf,'=');
- } else {
- sspm_append_char(buf,BaseTable[(int)outbuf[i]]);
- }
- }
-}
-
-void sspm_encode_base64(struct sspm_buffer *buf, char* data, size_t size)
-{
-
- char *p;
- char inbuf[3];
- int i = 0;
- int first = 1;
- int lpos = 0;
-
- inbuf[0] = inbuf[1] = inbuf[2] = 0;
-
- for (p = data; *p !=0; p++){
-
- if (i%3 == 0 && first == 0){
-
- sspm_write_base64(buf, inbuf, 4);
- lpos+=4;
-
- inbuf[0] = inbuf[1] = inbuf[2] = 0;
- }
-
- assert(lpos%4 == 0);
-
- if (lpos == 72){
- sspm_append_string(buf,"\n");
- lpos = 0;
- }
-
- inbuf[i%3] = *p;
-
- i++;
- first = 0;
-
- }
-
-
- /* If the inbuf was not exactly filled on the last byte, we need
- to spit out the odd bytes that did get in -- either one or
- two. This will result in an output of two bytes and '==' or
- three bytes and '=', respectively */
-
- if (i%3 == 1 && first == 0){
- sspm_write_base64(buf, inbuf, 2);
- } else if (i%3 == 2 && first == 0){
- sspm_write_base64(buf, inbuf, 3);
- }
-
-}
-
-void sspm_write_header(struct sspm_buffer *buf,struct sspm_header *header)
-{
-
- int i;
- char temp[TMP_BUF_SIZE];
- char* major;
- char* minor;
-
- /* Content-type */
-
- major = sspm_major_type_string(header->major);
- minor = sspm_minor_type_string(header->minor);
-
- if(header->minor == SSPM_UNKNOWN_MINOR_TYPE ){
- assert(header->minor_text !=0);
- minor = header->minor_text;
- }
-
- sprintf(temp,"Content-Type: %s/%s",major,minor);
-
- sspm_append_string(buf,temp);
-
- if(header->boundary != 0){
- sprintf(temp,";boundary=\"%s\"",header->boundary);
- sspm_append_string(buf,temp);
- }
-
- /* Append any content type parameters */
- if(header->content_type_params != 0){
- for(i=0; *(header->content_type_params[i])!= 0;i++){
- sprintf(temp,header->content_type_params[i]);
- sspm_append_char(buf,';');
- sspm_append_string(buf,temp);
- }
- }
-
- sspm_append_char(buf,'\n');
-
- /*Content-Transfer-Encoding */
-
- if(header->encoding != SSPM_UNKNOWN_ENCODING &&
- header->encoding != SSPM_NO_ENCODING){
- sprintf(temp,"Content-Transfer-Encoding: %s\n",
- sspm_encoding_string(header->encoding));
- }
-
- sspm_append_char(buf,'\n');
-
-}
-
-void sspm_write_multipart_part(struct sspm_buffer *buf,
- struct sspm_part *parts,
- int* part_num)
-{
-
- int parent_level, level;
- struct sspm_header *header = &(parts[*part_num].header);
- /* Write the header for the multipart part */
- sspm_write_header(buf,header);
-
- parent_level = parts[*part_num].level;
-
- (*part_num)++;
-
- level = parts[*part_num].level;
-
- while(parts[*part_num].header.major != SSPM_NO_MAJOR_TYPE &&
- level == parent_level+1){
-
- assert(header->boundary);
- sspm_append_string(buf,header->boundary);
- sspm_append_char(buf,'\n');
-
- if (parts[*part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){
- sspm_write_multipart_part(buf,parts,part_num);
- } else {
- sspm_write_part(buf, &(parts[*part_num]), part_num);
- }
-
- (*part_num)++;
- level = parts[*part_num].level;
- }
-
- sspm_append_string(buf,"\n\n--");
- sspm_append_string(buf,header->boundary);
- sspm_append_string(buf,"\n");
-
- (*part_num)--; /* undo last, spurious, increment */
-}
-
-void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part,int *part_num)
-{
-
- /* Write header */
- sspm_write_header(buf,&(part->header));
-
- /* Write part data */
-
- if(part->data == 0){
- return;
- }
-
- if(part->header.encoding == SSPM_BASE64_ENCODING) {
- assert(part->data_size != 0);
- sspm_encode_base64(buf,part->data,part->data_size);
- } else if(part->header.encoding == SSPM_QUOTED_PRINTABLE_ENCODING) {
- sspm_encode_quoted_printable(buf,part->data);
- } else {
- sspm_append_string(buf,part->data);
- }
-
- sspm_append_string(buf,"\n\n");
-}
-
-int sspm_write_mime(struct sspm_part *parts,size_t num_parts,
- char **output_string, char* header)
-{
- struct sspm_buffer buf;
- int part_num =0;
-
- buf.buffer = malloc(4096);
- buf.pos = buf.buffer;
- buf.buf_size = 10;
- buf.line_pos = 0;
-
- /* write caller's header */
- if(header != 0){
- sspm_append_string(&buf,header);
- }
-
- if(buf.buffer[strlen(buf.buffer)-1] != '\n'){
- sspm_append_char(&buf,'\n');
- }
-
- /* write mime-version header */
- sspm_append_string(&buf,"Mime-Version: 1.0\n");
-
- /* End of header */
-
- /* Write body parts */
- while(parts[part_num].header.major != SSPM_NO_MAJOR_TYPE){
- if (parts[part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){
- sspm_write_multipart_part(&buf,parts,&part_num);
- } else {
- sspm_write_part(&buf, &(parts[part_num]), &part_num);
- }
-
- part_num++;
- }
-
-
- *output_string = buf.buffer;
-
- return 0;
-}
-
diff --git a/libical/src/libical/sspm.h b/libical/src/libical/sspm.h
deleted file mode 100644
index 864a23a36f..0000000000
--- a/libical/src/libical/sspm.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: sspm.h Mime Parser
- CREATOR: eric 25 June 2000
-
- $Id$
- $Locker$
-
- 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.
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Initial Developer of the Original Code is Eric Busboom
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-
-#ifndef SSPM_H
-#define SSPM_H
-
-enum sspm_major_type {
- SSPM_NO_MAJOR_TYPE,
- SSPM_TEXT_MAJOR_TYPE,
- SSPM_IMAGE_MAJOR_TYPE,
- SSPM_AUDIO_MAJOR_TYPE,
- SSPM_VIDEO_MAJOR_TYPE,
- SSPM_APPLICATION_MAJOR_TYPE,
- SSPM_MULTIPART_MAJOR_TYPE,
- SSPM_MESSAGE_MAJOR_TYPE,
- SSPM_UNKNOWN_MAJOR_TYPE
-};
-
-enum sspm_minor_type {
- SSPM_NO_MINOR_TYPE,
- SSPM_ANY_MINOR_TYPE,
- SSPM_PLAIN_MINOR_TYPE,
- SSPM_RFC822_MINOR_TYPE,
- SSPM_DIGEST_MINOR_TYPE,
- SSPM_CALENDAR_MINOR_TYPE,
- SSPM_MIXED_MINOR_TYPE,
- SSPM_RELATED_MINOR_TYPE,
- SSPM_ALTERNATIVE_MINOR_TYPE,
- SSPM_PARALLEL_MINOR_TYPE,
- SSPM_UNKNOWN_MINOR_TYPE
-};
-
-enum sspm_encoding {
- SSPM_NO_ENCODING,
- SSPM_QUOTED_PRINTABLE_ENCODING,
- SSPM_8BIT_ENCODING,
- SSPM_7BIT_ENCODING,
- SSPM_BINARY_ENCODING,
- SSPM_BASE64_ENCODING,
- SSPM_UNKNOWN_ENCODING
-};
-
-enum sspm_error{
- SSPM_NO_ERROR,
- SSPM_UNEXPECTED_BOUNDARY_ERROR,
- SSPM_WRONG_BOUNDARY_ERROR,
- SSPM_NO_BOUNDARY_ERROR,
- SSPM_NO_HEADER_ERROR,
- SSPM_MALFORMED_HEADER_ERROR
-};
-
-
-struct sspm_header
-{
- int def;
- char* boundary;
- enum sspm_major_type major;
- enum sspm_minor_type minor;
- char *minor_text;
- char ** content_type_params;
- char* charset;
- enum sspm_encoding encoding;
- char* filename;
- char* content_id;
- enum sspm_error error;
- char* error_text;
-};
-
-struct sspm_part {
- struct sspm_header header;
- int level;
- size_t data_size;
- void *data;
-};
-
-struct sspm_action_map {
- enum sspm_major_type major;
- enum sspm_minor_type minor;
- void* (*new_part)();
- void (*add_line)(void *part, struct sspm_header *header,
- char* line, size_t size);
- void* (*end_part)(void* part);
- void (*free_part)(void *part);
-};
-
-char* sspm_major_type_string(enum sspm_major_type type);
-char* sspm_minor_type_string(enum sspm_minor_type type);
-char* sspm_encoding_string(enum sspm_encoding type);
-
-int sspm_parse_mime(struct sspm_part *parts,
- size_t max_parts,
- struct sspm_action_map *actions,
- char* (*get_string)(char *s, size_t size, void* data),
- void *get_string_data,
- struct sspm_header *first_header
- );
-
-void sspm_free_parts(struct sspm_part *parts, size_t max_parts);
-
-char *decode_quoted_printable(char *dest,
- char *src,
- size_t *size);
-char *decode_base64(char *dest,
- char *src,
- size_t *size);
-
-
-int sspm_write_mime(struct sspm_part *parts,size_t num_parts,
- char **output_string, char* header);
-
-#endif /*SSPM_H*/
diff --git a/libical/src/libical/vcomponent.cpp b/libical/src/libical/vcomponent.cpp
deleted file mode 100644
index 27ea61a7f8..0000000000
--- a/libical/src/libical/vcomponent.cpp
+++ /dev/null
@@ -1,817 +0,0 @@
-/**
- * @file vcomponent.cpp
- * @author fnguyen (12/10/01)
- * @brief Implemenation of C++ Wrapper for icalcomponent.c
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-#ifndef VCOMPONENT_H
-#include "vcomponent.h"
-#endif
-
-#ifndef ICALVALUE_CXX_H
-#include "icalvalue_cxx.h"
-#endif
-
-#ifndef ICALPROPERTY_CXX_H
-#include "icalproperty_cxx.h"
-#endif
-
-#ifndef ICALPARAMETER_CXX_H
-#include "icalparameter_cxx.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include <exception>
-
-VComponent::VComponent() throw(icalerrorenum) : imp(icalcomponent_new(ICAL_ANY_COMPONENT)) {
-}
-VComponent::VComponent(const VComponent& v) throw(icalerrorenum) {
- imp = icalcomponent_new_clone(v.imp);
- if (!imp) throw icalerrno;
-}
-
-VComponent& VComponent::operator=(const VComponent& v) throw(icalerrorenum) {
- if (this == &v) return *this;
-
- if (imp != NULL)
- {
- icalcomponent_free(imp);
- imp = icalcomponent_new_clone(v.imp);
- if (!imp) throw icalerrno;
- }
-
- return *this;
-}
-
-VComponent::~VComponent(){
- if (imp)
- icalcomponent_free(imp);
-}
-
-VComponent::VComponent(icalcomponent* v) throw (icalerrorenum) : imp(v){
-}
-
-/* char* returned is in the ring buffer. caller doesn't have to free it */
-char* VComponent::quote_ical_string(char *str){
- const char* p;
- size_t buf_sz;
- buf_sz = strlen(str) * 2; /* assume worse case scenarios. otherwise, we have to parse the string and count \ */
- char* out = (char*)icalmemory_new_buffer(buf_sz); /* memory is from the ring buffer */
- char* pout;
-
- if (out == 0){
- return 0;
- }
-
- pout = out;
-
- for (p = str; *p!=0; p++){
-
- if( *p == '\\'){
- *pout++ = '\\';
- }
- *pout++ = *p;
-
- }
- *pout++ = '\0';
-
- return out;
-}
-
-/**
- * @brief Constructor
- *
- * Create a new VComponent from a string.
- *
- * @exception ICAL_MALFORMEDDATA_ERROR
- * Catch this error if you
- *
- */
-VComponent::VComponent(string str) throw (icalerrorenum) {
- // Fix for BUG #15647, but breaks fix for BUG #15596. Attempting a UI fix for cal-4.0.
- //char* quoted_str = quote_ical_string((char *)str);
- //imp = icalcomponent_new_from_string(quoted_str);
- imp = icalcomponent_new_from_string(str);
-
- if (!imp) throw icalerrno;
-}
-
-VComponent::VComponent(icalcomponent_kind kind) throw(icalerrorenum) {
- imp = icalcomponent_new(kind);
-
- if (!imp) throw icalerrno;
-}
-
-
-string VComponent::as_ical_string() throw(icalerrorenum) {
- char *str = icalcomponent_as_ical_string(imp);
-
- if (!str) throw icalerrno;
-
- return(str);
-}
-
-
-bool VComponent::is_valid(){
- if (imp == NULL) return false;
- return (icalcomponent_is_valid(imp) ? true : false);
-}
-
-icalcomponent_kind VComponent::isa(){
- return icalcomponent_isa(imp);
-}
-
-int VComponent::isa_component(void* component){
- return icalcomponent_isa_component(component);
-}
-
-void VComponent::new_from_string(string str){
- if (imp != NULL) icalcomponent_free(imp);
- imp = icalcomponent_new_from_string(str);
-}
-
-/* Working with properties */
-void VComponent::add_property(ICalProperty* property){
- icalcomponent_add_property(imp, *property);
-}
-void VComponent::remove_property(ICalProperty* property){
- icalcomponent_remove_property(imp, *property);
- icalproperty_free(*property);
- property->detach(); // set imp to null, it's free already.
-}
-int VComponent::count_properties(icalproperty_kind kind){
- return icalcomponent_count_properties(imp, kind);
-}
-
-/* Iterate through the properties */
-ICalProperty* VComponent::get_current_property(){
- icalproperty* t = icalcomponent_get_current_property(imp);
- return ((t != NULL) ? new ICalProperty(t) : NULL);
-}
-
-ICalProperty* VComponent::get_first_property(icalproperty_kind kind){
- icalproperty* t = icalcomponent_get_first_property(imp, kind);
- return ((t != NULL) ? new ICalProperty(t) : NULL);
-}
-
-ICalProperty* VComponent::get_next_property(icalproperty_kind kind){
- icalproperty* t = icalcomponent_get_next_property(imp, kind);
- return ((t != NULL) ? new ICalProperty(t) : NULL);
-}
-
-/* Working with components */
-/* Return the first VEVENT, VTODO or VJOURNAL sub-component if it is one of those types */
-VComponent* VComponent::get_inner(){
- return new VComponent(icalcomponent_get_inner(imp));
-}
-
-void VComponent::add_component(VComponent* child){
- icalcomponent_add_component(imp, *child);
-}
-void VComponent::remove_component(VComponent* child){
- icalcomponent_remove_component(imp, *child);
-}
-int VComponent::count_components(icalcomponent_kind kind){
- return icalcomponent_count_components(imp, kind);
-}
-
-/* Iteration Routines. There are two forms of iterators, internal and
- external. The internal ones came first, and are almost completely
- sufficient, but they fail badly when you want to construct a loop that
- removes components from the container.
-*/
-
-/* Iterate through components */
-VComponent* VComponent::get_current_component(){
- icalcomponent* t = icalcomponent_get_current_component(imp);
- return ((t != NULL) ? new VComponent(t) : NULL);
-}
-VComponent* VComponent::get_first_component(icalcomponent_kind kind){
- VComponent* result = NULL;
- icalcomponent* t = icalcomponent_get_first_component(imp, kind);
- if (t != NULL) {
- switch (kind) {
- case ICAL_VALARM_COMPONENT:
- result = new VAlarm(t);
- break;
- case ICAL_VCALENDAR_COMPONENT:
- result = new VCalendar(t);
- break;
- case ICAL_VEVENT_COMPONENT:
- result = new VEvent(t);
- break;
- case ICAL_VQUERY_COMPONENT:
- result = new VQuery(t);
- break;
- case ICAL_VTODO_COMPONENT:
- result = new VToDo(t);
- break;
- case ICAL_VAGENDA_COMPONENT:
- result = new VAgenda(t);
- break;
- default:
- result = new VComponent(t);
- }
- }
-
- return (result);
-}
-VComponent* VComponent::get_next_component(icalcomponent_kind kind){
- VComponent* result = NULL;
- icalcomponent* t = icalcomponent_get_next_component(imp, kind);
- if (t != NULL) {
- switch (kind) {
- case ICAL_VALARM_COMPONENT:
- result = new VAlarm(t);
- break;
- case ICAL_VCALENDAR_COMPONENT:
- result = new VCalendar(t);
- break;
- case ICAL_VEVENT_COMPONENT:
- result = new VEvent(t);
- break;
- case ICAL_VQUERY_COMPONENT:
- result = new VQuery(t);
- break;
- case ICAL_VTODO_COMPONENT:
- result = new VToDo(t);
- break;
- case ICAL_VAGENDA_COMPONENT:
- result = new VAgenda(t);
- break;
- default:
- result = new VComponent(t);
- }
- }
-
- return (result);
-}
-
-/* Using external iterators */
-icalcompiter VComponent::begin_component(icalcomponent_kind kind){
- return icalcomponent_begin_component(imp, kind);
-}
-icalcompiter VComponent::end_component(icalcomponent_kind kind){
- return icalcomponent_end_component(imp, kind);
-}
-VComponent* VComponent::next(icalcompiter* i){
- return (VComponent*)icalcompiter_next(i);
-}
-VComponent* VComponent::prev(icalcompiter* i){
- return (VComponent*)icalcompiter_prior(i);
-}
-VComponent* VComponent::current(icalcompiter* i){
- return (VComponent*)icalcompiter_deref(i);
-}
-
-/* Working with embedded error properties */
-int VComponent::count_errors(){
- return icalcomponent_count_errors(imp);
-}
-
-/* Remove all X-LIC-ERROR properties*/
-void VComponent::strip_errors(){
- icalcomponent_strip_errors(imp);
-}
-
-/* Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/
-void VComponent::convert_errors(){
- icalcomponent_convert_errors(imp);
-}
-
-/* Kind conversion routines */
-icalcomponent_kind VComponent::string_to_kind(string str){
- return icalcomponent_string_to_kind(str);
-}
-string VComponent::kind_to_string(icalcomponent_kind kind){
- return (string)icalcomponent_kind_to_string(kind);
-}
-
-struct icaltimetype VComponent::get_dtstart(){
- return icalcomponent_get_dtstart(imp);
-}
-void VComponent::set_dtstart(struct icaltimetype v){
- icalcomponent_set_dtstart(imp, v);
-}
-
-/* For the icalcomponent routines only, dtend and duration are tied
- together. If you call the set routine for one and the other exists,
- the routine will calculate the change to the other. That is, if
- there is a DTEND and you call set_duration, the routine will modify
- DTEND to be the sum of DTSTART and the duration. If you call a get
- routine for one and the other exists, the routine will calculate
- the return value. If you call a set routine and neither exists, the
- routine will create the apcompriate comperty.
-*/
-
-struct icaltimetype VComponent::get_dtend(){
- return icalcomponent_get_dtend(imp);
-}
-
-void VComponent::set_dtend(struct icaltimetype v){
- icalcomponent_set_dtend(imp, v);
-}
-
-struct icaltimetype VComponent::get_due(){
- return icalcomponent_get_due(imp);
-}
-void VComponent::set_due(struct icaltimetype v){
- icalcomponent_set_due(imp, v);
-}
-
-struct icaldurationtype VComponent::get_duration(){
- return icalcomponent_get_duration(imp);
-}
-void VComponent::set_duration(struct icaldurationtype v){
- icalcomponent_set_duration(imp, v);
-}
-
-icalproperty_method VComponent::get_method(){
- return icalcomponent_get_method(imp);
-}
-void VComponent::set_method(icalproperty_method method){
- icalcomponent_set_method(imp, method);
-}
-
-struct icaltimetype VComponent::get_dtstamp(){
- return icalcomponent_get_dtstamp(imp);
-}
-void VComponent::set_dtstamp(struct icaltimetype v){
- icalcomponent_set_dtstamp(imp, v);
-}
-
-string VComponent::get_summary(){
- return (string)icalcomponent_get_summary(imp);
-}
-void VComponent::set_summary(string v){
- icalcomponent_set_summary(imp, v);
-}
-
-string VComponent::get_location(){
- return (string)icalcomponent_get_location(imp);
-}
-void VComponent::set_location(string v){
- icalcomponent_set_location(imp, v);
-}
-
-
-string VComponent::get_description(){
- return (string)icalcomponent_get_description(imp);
-}
-void VComponent::set_description(string v){
- icalcomponent_set_description(imp, v);
-}
-string VComponent::get_comment(){
- return (string)icalcomponent_get_comment(imp);
-}
-void VComponent::set_comment(string v){
- icalcomponent_set_comment(imp, v);
-}
-
-string VComponent::get_uid(){
- return (string)icalcomponent_get_uid(imp);
-}
-void VComponent::set_uid(string v){
- icalcomponent_set_uid(imp, v);
-}
-
-string VComponent::get_relcalid(){
- return (string)icalcomponent_get_relcalid(imp);
-}
-void VComponent::set_relcalid(string v){
- icalcomponent_set_relcalid(imp, v);
-}
-
-struct icaltimetype VComponent::get_recurrenceid(){
- return icalcomponent_get_recurrenceid(imp);
-}
-void VComponent::set_recurrenceid(struct icaltimetype v){
- icalcomponent_set_recurrenceid(imp, v);
-}
-
-int VComponent::get_sequence(){
- return (int)icalcomponent_get_sequence(imp);
-}
-void VComponent::set_sequence(int v){
- icalcomponent_set_sequence(imp, v);
-}
-
-int VComponent::get_status(){
- return (int)icalcomponent_get_status(imp);
-}
-void VComponent::set_status(int v){
- icalcomponent_set_status(imp, v);
-}
-
-/* For VCOMPONENT: Return a reference to the first VEVENT, VTODO, or VJOURNAL */
-VComponent* VComponent::get_first_real_component(){
- return (VComponent*)icalcomponent_get_first_real_component(imp);
-}
-
-/* For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end
- times of an event in UTC */
-struct icaltime_span VComponent::get_span(){
- return icalcomponent_get_span(imp);
-}
-
-int VComponent::recurrence_is_excluded( struct icaltimetype *dtstart,
- struct icaltimetype *recurtime){
- return icalproperty_recurrence_is_excluded(imp, dtstart, recurtime);
-}
-
-
-/* Internal operations. They are private, and you should not be using them. */
-VComponent* VComponent::get_parent() {
- return new VComponent(icalcomponent_get_parent(imp));
-}
-void VComponent::set_parent(VComponent *parent){
- icalcomponent_set_parent(imp, *parent);
-}
-
-/* ignoreValue means remove properties even if the data doesn't match */
-bool VComponent::remove(VComponent& fromVC, bool ignoreValue){
-
- /* the two components must be the same kind */
- if (this->isa() != fromVC.isa()) return false;
-
- /* properties first */
- ICalPropertyTmpPtr propToBeRemoved;
- for (propToBeRemoved=fromVC.get_first_property(ICAL_ANY_PROPERTY); propToBeRemoved != NULL;
- propToBeRemoved=fromVC.get_next_property(ICAL_ANY_PROPERTY)) {
-
- /* loop through properties from this component */
- ICalPropertyTmpPtr next;
- ICalPropertyTmpPtr p;
- for (p=this->get_first_property(propToBeRemoved->isa()); p != NULL; p=next) {
- next = this->get_next_property(propToBeRemoved->isa());
- if (ignoreValue)
- this->remove_property(p);
- else {
- if (*p == *propToBeRemoved) {
- this->remove_property(p);
- break;
- }
- }
- }
- }
-
- /* components next - should remove by UID */
- VComponentTmpPtr comp;
- for (comp=fromVC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL;
- comp=fromVC.get_next_component(ICAL_ANY_COMPONENT)) {
- const char* fromCompUid = comp->get_uid();
- VComponentTmpPtr c;
- for (c=this->get_first_component(comp->isa()); c != NULL;
- c=this->get_next_component(comp->isa())) {
- const char* thisCompUid = c->get_uid();
- if (strcmp(fromCompUid, thisCompUid) == 0) {
- // recursively go down the components
- c->remove(*comp, ignoreValue);
- // if all properties are removed and there is no sub-components, then
- // remove this compoent
- if ((c->count_properties(ICAL_ANY_PROPERTY) == 0) &&
- (c->count_components(ICAL_ANY_COMPONENT) == 0)) {
- this->remove_component(c);
- }
- break;
- }
- }
- }
-
- return true;
-}
-/* removeMissing == true: remove properties that are missing from fromC */
-/* todo: only change the first occurence of the property */
-/* todo: removeMissing is not implemented */
-bool VComponent::update(VComponent& fromC, bool removeMissing){
-
- /* make sure they are the same kind */
- if (this->isa() != fromC.isa()) return false;
-
- /* property first */
- ICalPropertyTmpPtr prop;
- for (prop=fromC.get_first_property(ICAL_ANY_PROPERTY); prop != NULL;
- prop=fromC.get_next_property(ICAL_ANY_PROPERTY)) {
- ICalPropertyTmpPtr thisProp;
- thisProp = this->get_first_property(prop->isa());
- if (thisProp == NULL) {
- thisProp = new ICalProperty(prop->isa());
- this->add_property(thisProp);
- }
- ICalValue *value = new ICalValue(*(prop->get_value())); // clone the value
- thisProp->set_value(*value);
- }
-
- /* recursively updating sub-components */
- VComponentTmpPtr comp;
- for (comp=fromC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL;
- comp=fromC.get_next_component(ICAL_ANY_COMPONENT)) {
- VComponentTmpPtr thisComp;
- thisComp = this->get_first_component(comp->isa());
- if (thisComp == NULL) {
- thisComp = new VComponent(comp->isa());
- this->add_component(thisComp);
- }
- bool err = thisComp->update(*comp, removeMissing);
- if (!err) return false;
- }
- return true;
-}
-/* add components and property. recursively goes down child components */
-bool VComponent::add(VComponent& fromC){
- /* make sure the kind are the same */
- if (this->isa() != fromC.isa()) return false;
-
- /* properties first */
- ICalPropertyTmpPtr prop;
- for (prop=fromC.get_first_property(ICAL_ANY_PROPERTY); prop != NULL;
- prop=fromC.get_next_property(ICAL_ANY_PROPERTY)) {
- /* clone another property */
- ICalProperty *p = new ICalProperty(*prop);
- add_property(p);
- }
-
- /* sub-components next */
- bool err = false;
- VComponentTmpPtr comp;
- for (comp=fromC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL;
- comp=fromC.get_next_component(ICAL_ANY_COMPONENT)) {
- VComponent *c = new VComponent(comp->isa());
- err = c->add(*comp);
- add_component(c);
- }
-
- return true;
-}
-
-VCalendar::VCalendar() : VComponent(icalcomponent_new_vcalendar()){
-}
-VCalendar::VCalendar(const VCalendar& v) : VComponent(v) {}
-VCalendar& VCalendar::operator=(const VCalendar& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VCalendar::~VCalendar(){}
-
-VCalendar::VCalendar(icalcomponent* v) : VComponent(v){}
-VCalendar::VCalendar(string str) : VComponent(str){}
-
-
-/* VEvent */
-
-VEvent::VEvent() : VComponent(icalcomponent_new_vevent()){}
-VEvent::VEvent(const VEvent& v) : VComponent(v) {}
-VEvent& VEvent::operator=(const VEvent& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VEvent::~VEvent(){}
-
-VEvent::VEvent(icalcomponent* v) : VComponent(v){}
-VEvent::VEvent(string str) : VComponent(str){}
-
-
-/* VTodo */
-
-VToDo::VToDo() : VComponent(icalcomponent_new_vtodo()){}
-VToDo::VToDo(const VToDo& v) : VComponent(v) {}
-VToDo& VToDo::operator=(const VToDo& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VToDo::~VToDo(){}
-
-VToDo::VToDo(icalcomponent* v) : VComponent(v){}
-VToDo::VToDo(string str) : VComponent(str){}
-
-
-/* VAgenda */
-
-VAgenda::VAgenda() : VComponent(icalcomponent_new_vagenda()){}
-VAgenda::VAgenda(const VAgenda& v) : VComponent(v) {}
-VAgenda& VAgenda::operator=(const VAgenda& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VAgenda::~VAgenda(){}
-
-VAgenda::VAgenda(icalcomponent* v) : VComponent(v){}
-VAgenda::VAgenda(string str) : VComponent(str){}
-
-
-/* VQuery */
-
-VQuery::VQuery() : VComponent(icalcomponent_new_vquery()){}
-VQuery::VQuery(const VQuery& v) : VComponent(v) {}
-VQuery& VQuery::operator=(const VQuery& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VQuery::~VQuery(){}
-
-VQuery::VQuery(icalcomponent* v) : VComponent(v){}
-VQuery::VQuery(string str) : VComponent(str){}
-
-
-/* VJournal */
-
-VJournal::VJournal() : VComponent(icalcomponent_new_vjournal()){}
-VJournal::VJournal(const VJournal& v) : VComponent(v) {}
-VJournal& VJournal::operator=(const VJournal& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VJournal::~VJournal(){}
-
-VJournal::VJournal(icalcomponent* v) : VComponent(v){}
-VJournal::VJournal(string str) : VComponent(str){}
-
-
-/* VAlarm */
-
-VAlarm::VAlarm() : VComponent(icalcomponent_new_valarm()){}
-VAlarm::VAlarm(const VAlarm& v) : VComponent(v) {}
-VAlarm& VAlarm::operator=(const VAlarm& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VAlarm::~VAlarm(){}
-
-VAlarm::VAlarm(icalcomponent* v) : VComponent(v){}
-VAlarm::VAlarm(string str) : VComponent(str){}
-
-icalrequeststatus
-VAlarm::getTriggerTime(VComponent &c, struct icaltriggertype *tr)
-{
- struct icaltimetype tt;
- ICalParameter *related_param;
-
- ICalPropertyTmpPtr trigger_prop = this->get_first_property(ICAL_TRIGGER_PROPERTY);
-
- // all VALARMs must have a TRIGGER
- if (trigger_prop == NULL)
- return ICAL_3_1_INVPROPVAL_STATUS;
-
- *tr = trigger_prop->get_trigger();
-
- tt = icaltime_null_time();
-
- if (icaltime_is_null_time(tr->time)) {
-
- // relative time trigger
-
- // TRIGGER;RELATED=END:P5M 5 minutes after END
- // TRIGGER;RELATED=START:-P15M 15 minutes before START
- // get RELATED parameter
-
- related_param = trigger_prop->get_first_parameter(ICAL_RELATED_PARAMETER);
-
- if (related_param && related_param->is_valid()) {
-
- // get RELATED parameter value
- icalparameter_related related = related_param->get_related();
-
- if(related) {
- switch(related) {
- case ICAL_RELATED_END:
- if (c.isa() == ICAL_VEVENT_COMPONENT) {
- tt = c.get_dtend();
-
- // If a recurrenceid exists, use that to calculate the
- // dtend from the dtstart.
- struct icaltimetype recur_time = c.get_recurrenceid();
- if (!(icaltime_is_null_time(recur_time))) {
- struct icaldurationtype dur = icaltime_subtract(c.get_dtstart(), tt);
- tt = icaltime_add(recur_time, dur);
- }
- }
- else if (c.isa() == ICAL_VTODO_COMPONENT) {
- tt = c.get_due();
- struct icaltimetype recur_time = c.get_recurrenceid();
- if (!(icaltime_is_null_time(recur_time))) {
- tt = recur_time;
- }
- }
- // @@@ TODO: if not DTEND or DUE, then DTSTART and DURATION must be present
- break;
- case ICAL_RELATED_START:
- case ICAL_RELATED_X:
- case ICAL_RELATED_NONE:
- default:
- tt = c.get_dtstart();
- struct icaltimetype recur_time = c.get_recurrenceid();
- if (!(icaltime_is_null_time(recur_time))) {
- tt = recur_time;
- }
- break;
- }
-
- }
- }
- else { // no RELATED explicity specified, the default is
- // relative to the start of an event or to-do, rfc2445
- // if no RELATED, we are forced to use dtstart for VEVENT,
- // due for VTODO to calculate trigger time.
- // If a recur time exists, use that. Recur time trumps dtstart or due.
- struct icaltimetype recur_time = c.get_recurrenceid();
- if (!(icaltime_is_null_time(recur_time))) {
- tt = recur_time;
- }
- else if (c.isa() == ICAL_VEVENT_COMPONENT)
- tt = c.get_dtstart();
- else if (c.isa() == ICAL_VTODO_COMPONENT)
- tt = c.get_due();
- }
-
- // malformed? encapsulating VEVENT or VTODO MUST have DTSTART/DTEND
- if(icaltime_is_null_time(tt))
- return ICAL_3_1_INVPROPVAL_STATUS;;
-
- // now offset using tr.duration
- tr->time = icaltime_add(tt, tr->duration);
- }
- // else absolute time trigger
-
- return ICAL_2_0_SUCCESS_STATUS;
-}
-
-
-/* VFreeBusy */
-
-VFreeBusy::VFreeBusy() : VComponent(icalcomponent_new_vfreebusy()){}
-VFreeBusy::VFreeBusy(const VFreeBusy& v) : VComponent(v) {}
-VFreeBusy& VFreeBusy::operator=(const VFreeBusy& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VFreeBusy::~VFreeBusy(){}
-
-VFreeBusy::VFreeBusy(icalcomponent* v) : VComponent(v){}
-VFreeBusy::VFreeBusy(string str) : VComponent(str){}
-
-
-/* VTimezone */
-
-VTimezone::VTimezone() : VComponent(icalcomponent_new_vtimezone()){}
-VTimezone::VTimezone(const VTimezone& v) : VComponent(v) {}
-VTimezone& VTimezone::operator=(const VTimezone& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-VTimezone::~VTimezone(){}
-
-VTimezone::VTimezone(icalcomponent* v) : VComponent(v){}
-VTimezone::VTimezone(string str) : VComponent(str){}
-
-
-/* XStandard */
-
-XStandard::XStandard() : VComponent(icalcomponent_new_xstandard()){}
-XStandard::XStandard(const XStandard& v) : VComponent(v) {}
-XStandard& XStandard::operator=(const XStandard& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-XStandard::~XStandard(){}
-
-XStandard::XStandard(icalcomponent* v) : VComponent(v){}
-XStandard::XStandard(string str) : VComponent(str){}
-
-
-/* XDaylight */
-
-XDaylight::XDaylight() : VComponent(icalcomponent_new_xdaylight()){}
-XDaylight::XDaylight(const XDaylight& v) : VComponent(v) {}
-XDaylight& XDaylight::operator=(const XDaylight& v){
- if (this == &v) return *this;
- VComponent::operator=(v);
-
- return *this;
-}
-XDaylight::~XDaylight(){}
-
-XDaylight::XDaylight(icalcomponent* v) : VComponent(v){}
-XDaylight::XDaylight(string str) : VComponent(str){}
diff --git a/libical/src/libical/vcomponent.h b/libical/src/libical/vcomponent.h
deleted file mode 100644
index fb128adc1c..0000000000
--- a/libical/src/libical/vcomponent.h
+++ /dev/null
@@ -1,340 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file vcomponent.h
- * @author fnguyen (12/10/01)
- * @brief C++ classes for the icalcomponent wrapper (VToDo VEvent, etc..).
- *
- * (C) COPYRIGHT 2001, Critical Path
- */
-
-#ifndef VCOMPONENT_H
-#define VCOMPONENT_H
-
-#include "ical.h"
-#include "icptrholder.h"
-
-typedef char* string; // Will use the string library from STL
-
-class ICalProperty;
-
-/**
- * @class VComponent
- * @brief A class wrapping the libical icalcomponent functions
- *
- * @exception icalerrorenum Any errors generated in libical are
- * propogated via this exception type.
- */
-
-class VComponent {
-public:
- VComponent() throw (icalerrorenum);
- VComponent(const VComponent&) throw (icalerrorenum);
- VComponent& operator=(const VComponent&) throw (icalerrorenum);
- virtual ~VComponent();
-
- VComponent(icalcomponent* v) throw (icalerrorenum);
- VComponent(string str) throw (icalerrorenum);
- VComponent(icalcomponent_kind kind) throw (icalerrorenum);;
-
- operator icalcomponent* () { return imp; }
-
- void new_from_string(string str);
-
- // detach imp to this object. use with caution. it would cause
- // memory leak if you are not careful.
- void detach() {
- imp = NULL;
- }
-
-public:
- string as_ical_string() throw (icalerrorenum);
- bool is_valid();
- icalcomponent_kind isa();
- int isa_component(void* component);
-
- /// Working with properties
- void add_property(ICalProperty* property);
- void remove_property(ICalProperty* property);
- int count_properties(icalproperty_kind kind);
-
- // Iterate through the properties
- ICalProperty* get_current_property();
- ICalProperty* get_first_property(icalproperty_kind kind);
- ICalProperty* get_next_property(icalproperty_kind kind);
-
- // Working with components
-
- /**
- * Return the first VEVENT, VTODO or VJOURNAL sub-component if
- * it is one of those types
- */
-
- VComponent* get_inner();
-
- void add_component(VComponent* child);
- void remove_component(VComponent* child);
- int count_components(icalcomponent_kind kind);
-
- /**
- * Iteration Routines. There are two forms of iterators,
- * internal and external. The internal ones came first, and
- * are almost completely sufficient, but they fail badly when
- * you want to construct a loop that removes components from
- * the container.
- */
-
- /// Iterate through components
- VComponent* get_current_component();
- VComponent* get_first_component(icalcomponent_kind kind);
- VComponent* get_next_component(icalcomponent_kind kind);
-
- /// Using external iterators
- icalcompiter begin_component(icalcomponent_kind kind);
- icalcompiter end_component(icalcomponent_kind kind);
- VComponent* next(icalcompiter* i);
- VComponent* prev(icalcompiter* i);
- VComponent* current(icalcompiter* i);
-
- /// Working with embedded error properties
- int count_errors();
-
- /// Remove all X-LIC-ERROR properties
- void strip_errors();
-
- /// Convert some X-LIC-ERROR properties into RETURN-STATUS properties
- void convert_errors();
-
- /// Kind conversion routines
- static icalcomponent_kind string_to_kind(string str);
- static string kind_to_string(icalcomponent_kind kind);
-
-public:
- struct icaltimetype get_dtstart();
- void set_dtstart(struct icaltimetype v);
-
- /** For the icalcomponent routines only, dtend and duration
- * are tied together. If you call the set routine for one and
- * the other exists, the routine will calculate the change to
- * the other. That is, if there is a DTEND and you call
- * set_duration, the routine will modify DTEND to be the sum
- * of DTSTART and the duration. If you call a get routine for
- * one and the other exists, the routine will calculate the
- * return value. If you call a set routine and neither
- * exists, the routine will create the apropriate property
- */
-
- struct icaltimetype get_dtend();
- void set_dtend(struct icaltimetype v);
-
- struct icaltimetype get_due();
- void set_due(struct icaltimetype v);
-
- struct icaldurationtype get_duration();
- void set_duration(struct icaldurationtype v);
-
- icalproperty_method get_method();
- void set_method(icalproperty_method method);
-
- struct icaltimetype get_dtstamp();
- void set_dtstamp(struct icaltimetype v);
-
- string get_summary();
- void set_summary(string v);
-
- string get_location();
- void set_location(string v);
-
- string get_description();
- void set_description(string v);
-
- string get_comment();
- void set_comment(string v);
-
- string get_uid();
- void set_uid(string v);
-
- string get_relcalid();
- void set_relcalid(string v);
-
- struct icaltimetype get_recurrenceid();
- void set_recurrenceid(struct icaltimetype v);
-
- int get_sequence();
- void set_sequence(int v);
-
- int get_status();
- void set_status(int v);
-
-
-public:
- /**
- * For VCOMPONENT: Return a reference to the first VEVENT,
- * VTODO, or VJOURNAL
- */
- VComponent* get_first_real_component();
-
- /**
- * For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the
- * start and end times of an event in UTC
- */
- virtual struct icaltime_span get_span();
-
- int recurrence_is_excluded(struct icaltimetype *dtstart,
- struct icaltimetype *recurtime);
-
-
-public:
- /**
- helper functions for adding/removing/updating property and
- sub-components */
-
- /// Note: the VComponent kind have to be the same
-
- bool remove(VComponent&, bool ignoreValue);
- bool update(VComponent&, bool removeMissing);
- bool add(VComponent&);
-
-private:
- /* Internal operations. They are private, and you should not be using them. */
- VComponent* get_parent();
- void set_parent(VComponent *parent);
-
- char* quote_ical_string(char* str);
-
-private:
- icalcomponent* imp;
-};
-
-class VCalendar : public VComponent {
-public:
- VCalendar();
- VCalendar(const VCalendar&);
- VCalendar& operator=(const VCalendar&);
- ~VCalendar();
-
- VCalendar(icalcomponent* v);
- VCalendar(string str);
-};
-
-
-class VEvent : public VComponent {
-public:
- VEvent();
- VEvent(const VEvent&);
- VEvent& operator=(const VEvent&);
- ~VEvent();
-
- VEvent(icalcomponent* v);
- VEvent(string str);
-};
-
-class VToDo : public VComponent {
-public:
- VToDo();
- VToDo(const VToDo&);
- VToDo& operator=(const VToDo&);
- ~VToDo();
-
- VToDo(icalcomponent* v);
- VToDo(string str);
-};
-
-class VAgenda : public VComponent {
-public:
- VAgenda();
- VAgenda(const VAgenda&);
- VAgenda& operator=(const VAgenda&);
- ~VAgenda();
-
- VAgenda(icalcomponent* v);
- VAgenda(string str);
-};
-
-class VQuery : public VComponent {
-public:
- VQuery();
- VQuery(const VQuery&);
- VQuery& operator=(const VQuery&);
- ~VQuery();
-
- VQuery(icalcomponent* v);
- VQuery(string str);
-};
-
-class VJournal : public VComponent {
-public:
- VJournal();
- VJournal(const VJournal&);
- VJournal& operator=(const VJournal&);
- ~VJournal();
-
- VJournal(icalcomponent* v);
- VJournal(string str);
-};
-
-class VAlarm : public VComponent {
-public:
- VAlarm();
- VAlarm(const VAlarm&);
- VAlarm& operator=(const VAlarm&);
- ~VAlarm();
-
- VAlarm(icalcomponent* v);
- VAlarm(string str);
-
- /**
- * compute the absolute trigger time for this alarm. trigger
- * may be related to the containing component c. the result
- * is populated in tr->time
- */
- icalrequeststatus getTriggerTime(VComponent &c, struct icaltriggertype *tr);
-};
-
-class VFreeBusy : public VComponent {
-public:
- VFreeBusy();
- VFreeBusy(const VFreeBusy&);
- VFreeBusy& operator=(const VFreeBusy&);
- ~VFreeBusy();
-
- VFreeBusy(icalcomponent* v);
- VFreeBusy(string str);
-};
-
-class VTimezone : public VComponent {
-public:
- VTimezone();
- VTimezone(const VTimezone&);
- VTimezone& operator=(const VTimezone&);
- ~VTimezone();
-
- VTimezone(icalcomponent* v);
- VTimezone(string str);
-};
-
-class XStandard : public VComponent {
-public:
- XStandard();
- XStandard(const XStandard&);
- XStandard& operator=(const XStandard&);
- ~XStandard();
-
- XStandard(icalcomponent* v);
- XStandard(string str);
-};
-
-class XDaylight : public VComponent {
-public:
- XDaylight();
- XDaylight(const XDaylight&);
- XDaylight& operator=(const XDaylight&);
- ~XDaylight();
-
- XDaylight(icalcomponent* v);
- XDaylight(string str);
-};
-
-typedef ICPointerHolder<VComponent> VComponentTmpPtr; /* see icptrholder.h for comments */
-
-#endif /* VComponent_H */
diff --git a/libical/src/libical/vsnprintf.c b/libical/src/libical/vsnprintf.c
deleted file mode 100644
index 982920b21c..0000000000
--- a/libical/src/libical/vsnprintf.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#ifndef WIN32
-#include "config.h"
-#endif
-#ifndef HAVE_SNPRINTF
-/*
- * Revision 12: http://theos.com/~deraadt/snprintf.c
- *
- * Copyright (c) 1997 Theo de Raadt
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WIN32
-#include <sys/param.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#if __STDC__
-#include <stdarg.h>
-#include <stdlib.h>
-#else
-#include <varargs.h>
-#endif
-#include <setjmp.h>
-
-#ifndef roundup
-#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-#endif
-
-static int pgsize;
-static char *curobj;
-static sigjmp_buf bail;
-
-#define EXTRABYTES 2 /* XXX: why 2? you don't want to know */
-
-static char *
-msetup(str, n)
- char *str;
- size_t n;
-{
- char *e;
-
- if (n == 0)
- return NULL;
- if (pgsize == 0)
- pgsize = getpagesize();
- curobj = (char *)malloc(n + EXTRABYTES + pgsize * 2);
- if (curobj == NULL)
- return NULL;
- e = curobj + n + EXTRABYTES;
- e = (char *)roundup((unsigned long)e, pgsize);
- if (mprotect(e, pgsize, PROT_NONE) == -1) {
- free(curobj);
- curobj = NULL;
- return NULL;
- }
- e = e - n - EXTRABYTES;
- *e = '\0';
- return (e);
-}
-
-static void
-mcatch(int i)
-{
- siglongjmp(bail, 1);
-}
-
-static void
-mcleanup(str, n, p)
- char *str;
- size_t n;
- char *p;
-{
- strncpy(str, p, n-1);
- str[n-1] = '\0';
- if (mprotect((caddr_t)(p + n + EXTRABYTES), pgsize,
- PROT_READ|PROT_WRITE|PROT_EXEC) == -1)
- mprotect((caddr_t)(p + n + EXTRABYTES), pgsize,
- PROT_READ|PROT_WRITE);
- free(curobj);
-}
-
-int
-#if __STDC__
-vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
-#else
-vsnprintf(str, n, fmt, ap)
- char *str;
- size_t n;
- char *fmt;
- char *ap;
-#endif
-{
- struct sigaction osa, nsa;
- char *p;
- int ret = n + 1; /* if we bail, indicated we overflowed */
-
- memset(&nsa, 0, sizeof nsa);
- nsa.sa_handler = mcatch;
- sigemptyset(&nsa.sa_mask);
-
- p = msetup(str, n);
- if (p == NULL) {
- *str = '\0';
- return 0;
- }
- if (sigsetjmp(bail, 1) == 0) {
- if (sigaction(SIGSEGV, &nsa, &osa) == -1) {
- mcleanup(str, n, p);
- return (0);
- }
- ret = vsprintf(p, fmt, ap);
- }
- mcleanup(str, n, p);
- (void) sigaction(SIGSEGV, &osa, NULL);
- return (ret);
-}
-
-int
-#if __STDC__
-snprintf(char *str, size_t n, char const *fmt, ...)
-#else
-snprintf(str, n, fmt, va_alist)
- char *str;
- size_t n;
- char *fmt;
- va_dcl
-#endif
-{
- va_list ap;
-#if __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
-
- return (vsnprintf(str, n, fmt, ap));
- va_end(ap);
-}
-
-
-#else
-
-/* ANSI C forbids an empty source file... */
-
-static void vsnprintf_dummy_func() {
- vsnprintf_dummy_func();
-}
-
-#endif
diff --git a/libical/src/libicalcap/.cvsignore b/libical/src/libicalcap/.cvsignore
deleted file mode 100644
index 282522db03..0000000000
--- a/libical/src/libicalcap/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/libical/src/libicalcap/Makefile.am b/libical/src/libicalcap/Makefile.am
deleted file mode 100644
index f6112b7c05..0000000000
--- a/libical/src/libicalcap/Makefile.am
+++ /dev/null
@@ -1,73 +0,0 @@
-#======================================================================
-# FILE: Makefile.am
-# CREATOR: acampi
-#
-# $Id: Makefile.am,v 1.5 2003/10/21 18:28:26 ettore Exp $
-#
-#
-# (C) COPYRIGHT 2003, Andrea Campi, mailto:a.campi@inet.it
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#
-#
-#
-#======================================================================
-
-
-lib_LTLIBRARIES = libicalcap-evolution.la
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src \
- -I$(top_srcdir)/src/libical \
- -I$(top_builddir)/libical \
- -I$(srcdir) \
- -DWITH_RR $(RRCAP_CFLAGS)
-
-libicalcap_evolution_la_LDFLAGS = $(RRCAP_LIBS) -version-info 0:0:0
-
-
-libicalcap_evolution_la_SOURCES = \
- icalcap.c \
- icalcap.h \
- icalcap_impl.h \
- icalcap_message.c \
- icalcap_message_impl.h \
- icalcap_rr.c \
- icalcap_server.c \
- icalcap_server.h \
- icalcap_server_impl.h \
- icalcap_session.c \
- icalcap_session.h \
- icalcap_session_impl.h \
- icalcap_utils.c
-
-libicalcap_evolutionincludedir = $(includedir)
-
-libicalcap_evolutioninclude_HEADERS = \
- icalcap.h \
- icalcap_impl.h \
- icalcap_message_impl.h \
- icalcap_server.h \
- icalcap_server_impl.h \
- icalcap_session.h \
- icalcap_session_impl.h
-
-
-noinst_PROGRAMS = client
-
-LDADD = ../libicalss/libicalss-evolution.la ../libicalvcal/libicalvcal-evolution.la ../libical/libical-evolution.la libicalcap-evolution.la $(RRCAP_LIBS)
-
-
-client_SOURCES = client.c
-
diff --git a/libical/src/libicalcap/client.c b/libical/src/libicalcap/client.c
deleted file mode 100644
index 399568ac79..0000000000
--- a/libical/src/libicalcap/client.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*-
- * $Id$
- *
- * See the file LICENSE for redistribution information.
- * If you have not received a copy of the license, please contact CodeFactory
- * by email at info@codefactory.se, or on the web at http://www.codefactory.se/
- * You may also write to: CodeFactory AB, SE-903 47, Umeå, Sweden.
- *
- * Copyright (c) 2002 Jonas Borgström <jonas@codefactory.se>
- * Copyright (c) 2002 Daniel Lundin <daniel@codefactory.se>
- * Copyright (c) 2002 CodeFactory AB. All rights reserved.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <librr/rr.h>
-
-#include "icalcap.h"
-#include "icalcap_session.h"
-
-#define CLIENT_CAPABILITY \
-"Content-Type: text/html\n\n\
-BEGIN:VCALENDAR\n\
-VERSION:2.0\n\
-PRODIR:rrcap-client\n\
-CMD:REPLY\n\
-BEGIN:VREPLY\n\
-CAP-VERSION:1.0\n\
-PRODID:rrcap-client\n\
-QUERY-LEVEL:CAL-QL-NONE\n\
-CAR-LEVEL:CAR-FULL-NONE\n\
-DATE-MAX:99991231T235959Z\n\
-DATE-MIN:00000101T000000Z\n\
-MAX-COMPONENT-SIZE:0\n\
-COMPONENTS:VCALENDAR,VTODO,VJOURNAL,VEVENT,VCAR,\n\
- VALARM,VFREEBUSY,VTIMEZONE,STANDARD,DAYLIGHT,VREPLY\n\
-ITIP-VERSION:2447\n\
-RECUR-ACCEPTED:TRUE\n\
-RECUR-EXPAND:TRUE\n\
-RECUR-LIMIT:0\n\
-STORES-EXPANDED:FALSE\n\
-END:VREPLY\n\
-END:VCALENDAR\n"
-
-
-icalcomponent *
-icalcap_send_cmd(const icalcap *cap, const gchar *cmd, const gchar *id, int timeout) {
-
- icalcap_message*capmsg;
- icalcomponent *comp, *ret = NULL;
- icalproperty *prop;
-
- prop = icalproperty_vanew_cmd(
- icalproperty_string_to_enum(cmd),
- icalparameter_new_id(id),
- 0);
-
- if (timeout > 0) {
- char buf[16];
-
- snprintf(buf, 16, "%d", timeout);
- icalproperty_add_parameter(prop,
- icalparameter_new_latency(buf));
-
- icalproperty_add_parameter(prop,
- icalparameter_new_actionparam(ICAL_ACTIONPARAM_ABORT));
- }
-
- comp = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"),
- prop,
- 0);
-
- capmsg = icalcap_message_new(cap, comp);
- ret = icalcap_message_sync_send(capmsg, timeout);
- icalcap_message_free(capmsg);
- icalcomponent_free(comp);
-
- return ret;
-}
-
-icalcomponent *
-icalcap_new_reply_component(const char *id, const icalcomponent *comp) {
-
- if (comp == NULL)
- return NULL;
-
- return icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"),
- icalproperty_vanew_cmd(
- ICAL_CMD_REPLY,
-/* icalparameter_new_id(id), */
- 0),
- comp,
- 0);
-}
-
-
-static int
-msg_handler(const icalcap_message *capmsg) {
-
- icalcomponent *reply;
-
- g_message("Got: %s", icalcomponent_as_ical_string(capmsg->comp));
-
- /* FIXME Check it's a GET-CAPABILITY */
-
- reply = icalcap_new_reply_component(NULL, capmsg->comp);
- if (reply == NULL) {
- return FALSE;
- }
-
- icalcomponent_add_property(reply,
- icalproperty_new_prodid("client"));
-
- icalcomponent_free(reply);
- return TRUE;
-}
-
-int
-main (gint argc, gchar **argv)
-{
- icalcap_session*conn;
- icalcap *cap;
- icalcomponent *comp;
-
- int i, n;
- int verbose = 0;
-
- if ((conn = icalcap_session_new()) == NULL) {
- fprintf(stderr, "Init failed\n");
- exit(0);
- }
-
- if (!icalcap_session_connect(conn, "gundam.inet.it", 0)) {
- fprintf(stderr, "Connect failed\n");
- exit(0);
- }
-
- if (!icalcap_session_login(conn, "user@example.com", "user@example.com", "password")) {
- fprintf(stderr, "Login failed\n");
- exit(0);
- }
-
- if ((cap = icalcap_session_start(conn, msg_handler)) == NULL) {
- fprintf(stderr, "Start failed\n");
- exit(0);
- }
-
- if (argc > 1 && *argv[1] == '1')
- n = 100;
- else
- n = 1;
-
- for (i=0; i<n; i++) {
- g_print("Test 1: %d\n", i);
-
- if ((comp = icalcap_send_cmd(cap, "GET-CAPABILITY", "zero",15))
- == NULL) {
- fprintf(stderr, "Send failed\n");
- exit(0);
- }
-
- if (verbose)
- g_print("Got %s\n", icalcomponent_as_ical_string(comp));
-
- if (comp)
- icalcomponent_free(comp);
- }
-
- if (!icalcap_stop(cap)) {
- fprintf(stderr, "Stop failed\n");
- exit(0);
- }
-
- if (!icalcap_session_disconnect(conn)) {
- fprintf(stderr, "Disconnect failed\n");
- exit(0);
- }
-
- return 0;
-}
diff --git a/libical/src/libicalcap/icalcap.c b/libical/src/libicalcap/icalcap.c
deleted file mode 100644
index 8d404f0ad4..0000000000
--- a/libical/src/libicalcap/icalcap.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "config.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "icalcap.h"
-#include "icalcap_impl.h"
-#include "icalcap_session_impl.h" /* FIXME */
-
-
-void
-icalcap_free(icalcap *cap) {
-
-#ifdef WITH_RR
- icalcap_free_rr(cap);
-#endif
-}
-
-int
-icalcap_stop(icalcap *cap) {
-
-#ifdef WITH_RR
- return icalcap_stop_rr(cap);
-#else
- return 0;
-#endif
-}
-
-const char *
-icalcap_get_username(const icalcap *cap) {
-
-#ifdef WITH_RR
- if (cap == NULL || cap->username == NULL)
- return NULL;
-
- return cap->username;
-#else
- return NULL;
-#endif
-}
diff --git a/libical/src/libicalcap/icalcap.h b/libical/src/libicalcap/icalcap.h
deleted file mode 100644
index 5e61bf9c8e..0000000000
--- a/libical/src/libicalcap/icalcap.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __ICALCAP_H__
-#define __ICALCAP_H__
-
-#include <ical.h>
-
-/*
- * Opaque objects
- */
-typedef struct _icalcap icalcap;
-typedef struct _icalerror icalerror;
-typedef struct _icalcap_message icalcap_message;
-
-/*
- * Callback
- */
-typedef int (*icalcap_msg_handler)(const icalcap_message *msg);
-
-/*
- * icalcap member functions
- */
-void icalcap_free(icalcap *cap);
-int icalcap_stop(icalcap *cap);
-const char *icalcap_get_username(const icalcap *cap);
-
-/*
- * icalcap_message member functions
- */
-
-struct _icalcap_message {
- icalcap *cap;
- int type;
-
- icalcomponent *comp;
-};
-
-icalcap_message*icalcap_message_new(const icalcap *cap, const icalcomponent *comp);
-icalcap_message*icalcap_message_new_reply(const icalcap_message *capmsg, const icalcomponent *comp);
-void icalcap_message_free(icalcap_message *capmsg);
-
-int icalcap_message_reply_error(const icalcap_message *orig, enum icalrequeststatus status,
- const char *msg, const char *debug);
-int icalcap_message_reply_component(const icalcap_message *orig, icalcomponent *comp);
-
-int icalcap_message_send(icalcap_message *capmsg);
-icalcomponent *icalcap_message_sync_send(icalcap_message *capmsg, int timeout);
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_impl.h b/libical/src/libicalcap/icalcap_impl.h
deleted file mode 100644
index 19f8c1db06..0000000000
--- a/libical/src/libicalcap/icalcap_impl.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __ICALCAP_IMPL_H__
-#define __ICALCAP_IMPL_H__
-
-#include "icalcap_session.h"
-
-#ifdef WITH_RR
-
-#include <librr/rr.h>
-#include <librrsasl/rr-sasl.h>
-#include <librrtls/rr-tls.h>
-#include <librrcap/rr-cap.h>
-
-struct _icalcap {
- RRCAP *chan;
- const char *username,
- *authname;
-};
-
-struct _icalerror {
- GError *err;
-};
-
-
-void icalcap_free_rr(icalcap *cap);
-
-int icalcap_stop_rr(icalcap *cap);
-
-icalcomponent *icalcap_send_component_rr(const icalcap *cap, const icalcomponent *comp, int timeout);
-
-#else
-#error "No implementation of icalcap found!"
-#endif
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_message.c b/libical/src/libicalcap/icalcap_message.c
deleted file mode 100644
index 32abbf0a73..0000000000
--- a/libical/src/libicalcap/icalcap_message.c
+++ /dev/null
@@ -1,225 +0,0 @@
-#include "config.h"
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "ical.h"
-#include "icalcap.h"
-#include "icalcap_message_impl.h"
-
-
-/**
- * constructor
- *
- * Create a new icalcap_message from a component. This represents a command.
- */
-icalcap_message *
-icalcap_message_new(const icalcap *cap, const icalcomponent *comp) {
-
- icalcap_message *ret = NULL;
-
-#ifdef WITH_RR
- ret = icalcap_message_new_rr(cap, comp);
-#else
- ret = NULL;
-#endif
- return ret;
-}
-
-/**
- * constructor
- *
- * Create a new icalcap_message from a component. This represents a reply.
- */
-icalcap_message *
-icalcap_message_new_reply(const icalcap_message *capmsg, const icalcomponent *comp) {
-
-#ifdef WITH_RR
- return icalcap_message_new_reply_rr(capmsg, comp);
-#else
- return NULL;
-#endif
-}
-
-/**
- * destructor
- *
- * Delete icalcap_message
- */
-void
-icalcap_message_free(icalcap_message *capmsg) {
-
-#ifdef WITH_RR
- icalcap_message_free_rr(capmsg);
-#else
-#endif
-}
-
-/**
- * Send the icalcap_message and wait for an answer.
- * The icalcap_message will be invalid after this call, and only valid call will be
- * icalcap_message_free().
- */
-icalcomponent *
-icalcap_message_sync_send(icalcap_message *capmsg, int timeout) {
-
- g_return_val_if_fail(capmsg, NULL);
-
-#ifdef WITH_RR
- return icalcap_message_sync_send_rr(capmsg, timeout);
-#else
- return NULL;
-#endif
-}
-
-/**
- * Send the icalcap_message.
- * The icalcap_message will be invalid after this call, and only valid call will be
- * icalcap_message_free().
- */
-int
-icalcap_message_send(icalcap_message *capmsg) {
-
- int rc = FALSE;
- char *str;
-
- g_return_val_if_fail(capmsg, FALSE);
-
-#ifdef WITH_RR
- rc = icalcap_message_send_reply_rr(capmsg);
-#else
- rc = FALSE;
-#endif
-
- return rc;
-}
-
-/**
- * Convenience method to send a component in reply to the given icalcap_message.
- * The icalcomponent is not modified in any way.
- *
- * FIXME should be const icalcomponent *
- */
-int
-icalcap_message_reply_component(const icalcap_message *orig, icalcomponent *in) {
-
- icalcap_message*reply;
- int rc;
-
- reply = icalcap_message_new_reply(orig, in);
- if (reply == NULL)
- return FALSE;
-
- rc = icalcap_message_send(reply);
- icalcap_message_free(reply);
-
- return rc;
-}
-
-/* Only used by icalcap_message_reply_error */
-static icalcomponent *new_reply_component(const icalcap_message *capmsg, const icalcomponent *comp);
-
-/**
- * Convenience method to send an error in reply to the given icalcap_message.
- */
-int
-icalcap_message_reply_error(const icalcap_message *orig, enum icalrequeststatus status,
- const char *msg, const char *debug) {
-
- struct icalreqstattype stat;
- icalcomponent *comp, *vreply;
- int rc;
-
- /* Prepare the REQUEST-STATUS */
- stat = icalreqstattype_from_string(
- icalenum_reqstat_code(status));
-
- if (msg != NULL) {
- /* FIXME we used to do
- stat.desc = strdup(msg);
- but this created a memory leak. Maybe the destructor for reqstat? */
- stat.desc = msg;
- } else {
- stat.desc = icalenum_reqstat_desc(status);
- }
-
- if (debug != NULL)
- stat.debug = debug;
-
- /* Prepare a VREPLY component */
- vreply = icalcomponent_vanew(
- ICAL_VREPLY_COMPONENT,
- icalproperty_new_requeststatus(stat),
- 0);
- if (vreply == NULL) {
- /* FIXME */
- return FALSE;
- }
-
- comp = new_reply_component(orig, vreply);
-
- rc = icalcap_message_reply_component(orig, comp);
-
- icalcomponent_free(comp);
- icalcomponent_free(vreply);
-
- return rc;
-}
-
-
-/* internal use */
-
-/* only used by new_reply_component */
-static const char *
-get_id(icalcomponent *comp) {
-
- icalproperty *prop;
- icalparameter *param;
-
- prop = icalcomponent_get_first_property(comp, ICAL_CMD_PROPERTY);
- if (prop == NULL)
- return NULL;
-
- param = icalproperty_get_first_parameter(prop, ICAL_ID_PARAMETER);
- if (param == NULL)
- return NULL;
-
- return icalparameter_get_id(param);
-}
-
-/* only used by icalcap_message_reply_error */
-static icalcomponent *
-new_reply_component(const icalcap_message *capmsg, const icalcomponent *comp) {
-
- icalcomponent *clone, *cal, *root;
- icalproperty *cmd;
- const char *id;
-
- cmd = icalproperty_new_cmd(ICAL_CMD_REPLY);
-
- if (capmsg->comp != NULL) {
- id = get_id(capmsg->comp);
-
- if (id != NULL)
- icalproperty_add_parameter(cmd, icalparameter_new_id(id));
- }
-
- cal = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"),
- cmd,
- 0);
-
- if (comp != NULL) {
- clone = icalcomponent_new_clone(comp);
- icalcomponent_add_component(cal, clone);
- }
-
- root = icalcomponent_vanew(
- ICAL_XROOT_COMPONENT,
- cal,
- 0);
- return root;
-}
diff --git a/libical/src/libicalcap/icalcap_message_impl.h b/libical/src/libicalcap/icalcap_message_impl.h
deleted file mode 100644
index ae234d2efa..0000000000
--- a/libical/src/libicalcap/icalcap_message_impl.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __ICALCAP_MESSAGE_IMPL_H__
-#define __ICALCAP_MESSAGE_IMPL_H__
-
-#ifdef WITH_RR
-
-#include <ical.h>
-#include <librr/rr.h>
-
-#define ICALCAP_MESSAGE_CMD 1
-#define ICALCAP_MESSAGE_REPLY 1
-
-struct _icalcap_message_rr {
- const icalcap *cap;
- int type;
-
- icalcomponent *comp;
-
- RRFrame *frame;
- RRMessage *msg;
-};
-
-icalcap_message*icalcap_message_new_rr(const icalcap *cap, const icalcomponent *comp);
-icalcap_message*icalcap_message_new_reply_rr(const icalcap_message *capmsg, const icalcomponent *comp);
-void icalcap_message_free_rr(icalcap_message *capmsg);
-
-int icalcap_message_send_reply_rr(icalcap_message *capmsg);
-icalcomponent *icalcap_message_sync_send_rr(icalcap_message *capmsg, int timeout);
-
-#else
-#error "No implementation of icalcap found!"
-#endif
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_rr.c b/libical/src/libicalcap/icalcap_rr.c
deleted file mode 100644
index 7e464ee155..0000000000
--- a/libical/src/libicalcap/icalcap_rr.c
+++ /dev/null
@@ -1,545 +0,0 @@
-#include "config.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "icalcap.h"
-#include "icalcap_session.h"
-#include "icalcap_server.h"
-
-#include "icalcap_impl.h"
-#include "icalcap_message_impl.h"
-#include "icalcap_session_impl.h"
-#include "icalcap_server_impl.h"
-
-icalcomponent *icalcap_component_new_from_string(const char *data);
-
-static int default_msg_handler(RRCAP *cap, RRFrame *frame, GError **error);
-static void client_final_handler(RRCAP *cap);
-
-/**
- * Implementation of functions in icalcap
- */
-void
-icalcap_free_rr(icalcap *cap) {
-
- g_return_if_fail(cap);
-
- if (cap->username)
- free(cap->username);
-
- if (cap->authname)
- free(cap->authname);
-
- g_free(cap);
-}
-
-/**
- * Implementation of functions in icalcap_session
- */
-icalcap_session *
-icalcap_session_new_rr(void) {
-
- icalcap_session *sess;
- GError *error = NULL;
-
- /* Initialize roadrunner */
- if (!rr_init(0, NULL, &error))
- return 0;
-
- if ((sess = g_new0(icalcap_session, 1)) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- sess->cfg = rr_cap_config_new();
-
- /* Tell roadrunner which profiles we want to support */
- sess->profreg = rr_profile_registry_new();
- rr_profile_registry_add_profile(sess->profreg, RR_TYPE_CAP, NULL);
- rr_profile_registry_add_profile(sess->profreg, RR_TYPE_TLS, NULL);
- rr_profile_registry_add_profile(sess->profreg, RR_TYPE_SASL_DIGEST_MD5, NULL);
-
- return sess;
-}
-
-int
-icalcap_session_connect_rr(icalcap_session *sess, const char *hostname, const int port) {
-
- GError *error = NULL;
-
- if (sess == NULL) {
- /* FIXME return the error */
- return FALSE;
- }
-
- /* Create a connection object */
- sess->connection = rr_tcp_connection_new(sess->profreg, hostname, port, &error);
- if (sess->connection == NULL) {
- /* FIXME return the error */
- return FALSE;
- }
-
- return TRUE;
-}
-
-int
-icalcap_session_login_rr(icalcap_session *sess, const char *username, const char *authname,
- const char *password) {
-
- /* assert cap != NULL */
- GError *error = NULL;
-
- rr_sasl_set_username(sess->connection, username);
- rr_sasl_set_authname(sess->connection, authname);
- rr_sasl_set_password(sess->connection, password);
-
- /* FIXME */
- if (!rr_sasl_login(sess->connection, RR_TYPE_SASL_DIGEST_MD5,
- "foo.example.com", NULL, &error)) {
- /* FIXME return the error */
- return 0;
- }
-
- return 1;
-}
-
-icalcap *
-icalcap_session_start_rr(const icalcap_session *sess, icalcap_msg_handler handler) {
-
- /* assert sess != NULL */
- icalcap *cap;
- RRCAP *channel;
- GError *error = NULL;
-
- if ((cap = g_new0(icalcap, 1)) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- if (handler != NULL) {
- rr_cap_config_set_msg_handler(sess->cfg, default_msg_handler, (void *)handler);
- /* FIXME rr_cap_config_set_final_handler(cfg, client_final_handler); */
- }
-
- if ((channel = rr_cap_client_start(sess->connection, sess->cfg, &error)) == NULL) {
- /* FIXME return the error */
- goto FAILED;
- }
-
- cap->chan = channel;
- channel->hl = cap;
-
- return cap;
-
-FAILED:
- g_free(cap);
- return NULL;
-}
-
-int
-icalcap_stop_rr(icalcap *cap) {
-
- /* assert cap != NULL */
- GError *error = NULL;
-
- if (!rr_cap_close(cap->chan, &error)) {
- /* FIXME return the error */
- return 0;
- }
-
- cap->chan = NULL;
- g_free(cap);
-
- return 1;
-}
-
-int
-icalcap_session_disconnect_rr(icalcap_session *sess) {
-
- /* assert cap != NULL */
- GError *error = NULL;
-
- if (!rr_connection_disconnect(sess->connection, &error)) {
- /* FIXME return the error */
- return 0;
- }
-
- sess->connection = NULL;
- g_free(sess);
-
- if (!rr_exit(&error)) {
- /* FIXME return the error */
- return 0;
- }
-
- return 1;
-}
-
-/**
- * Implementation of functions in icalcap_server
- */
-
-/**
- * If the user properly authenticated (via SASL), initialize the channel
- * credentials. Otherwise, refuse to open the channel.
- */
-static int
-server_init_handler(RRCAP *chan, const gchar *piggyback, GError **error) {
-
- icalcap *cap;
- RRConnection *connection;
-
- icalcap_auth_handler func;
- const gchar *username, *authname;
- int rc;
-
- g_return_val_if_fail(chan, FALSE);
- g_return_val_if_fail(chan->cfg, FALSE);
- g_return_val_if_fail(chan->cfg->server_init_data, FALSE);
-
- connection = rr_channel_get_connection(RR_CHANNEL(chan));
- if ((username = rr_sasl_get_username(connection)) == NULL)
- return FALSE;
- if ((authname = rr_sasl_get_authname(connection)) == NULL)
- return FALSE;
-
- if ((cap = g_new0(icalcap, 1)) == NULL) {
- return FALSE;
- }
-
- cap->chan = chan;
- chan->hl = cap;
-
- cap->username = strdup(username);
- cap->authname = strdup(authname);
-
- func = (icalcap_auth_handler)chan->cfg->server_init_data;
- return func(cap, piggyback);
-}
-
-static void
-server_confirmation_handler(RRCAP *chan) {
-
- icalcap_chanup_handler func;
-
- g_return_if_fail(chan);
- g_return_if_fail(chan->cfg);
- g_return_if_fail(chan->cfg->server_confirmation_data);
-
- func = (icalcap_chanup_handler)chan->cfg->server_confirmation_data;
-
- func(chan->hl);
-}
-
-static gboolean
-server_frame_handler(RRCAP *cap, RRFrame *frame, GError **error)
-{
- if (frame->type == RR_FRAME_TYPE_MSG)
- /* FIXME */
- return default_msg_handler(cap, frame, error);
- else
- return FALSE;
-}
-
-static void
-server_final_handler(RRCAP *cap)
-{
- g_return_if_fail(cap);
- g_return_if_fail(RR_CAP(cap));
-
- if (cap->hl != NULL) {
- icalcap_free(cap->hl);
- cap->hl = NULL;
- }
-}
-
-/*
- * FIXME Do we want to pass argc and argv in?
- */
-icalcap_server *
-icalcap_server_new_rr(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb,
- icalcap_msg_handler msg_cb) {
-
- icalcap_server *serv;
- GError *error = NULL;
-
- /* Initialize roadrunner */
- if (!rr_init(0, NULL, &error))
- return 0;
-
- if ((serv = g_new0(icalcap_server, 1)) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
- serv->handler = msg_cb;
-
- /* This is somewhat hackish */
- serv->cfg = rr_cap_config_new();
- rr_cap_config_set_msg_handler(serv->cfg, NULL, (void *)msg_cb);
- rr_cap_config_set_frame_handler(serv->cfg, server_frame_handler);
- rr_cap_config_set_final_handler(serv->cfg, server_final_handler);
- rr_cap_config_set_server_init_handler(serv->cfg, server_init_handler, (void *)auth_cb);
- rr_cap_config_set_server_confirmation_handler(serv->cfg,
- server_confirmation_handler, (void *)chanup_cb);
-
- /* Tell roadrunner which profiles we want to support */
- serv->profreg = rr_profile_registry_new();
- rr_profile_registry_add_profile(serv->profreg, RR_TYPE_CAP, serv->cfg);
- rr_profile_registry_add_profile(serv->profreg, RR_TYPE_TLS, NULL);
- rr_profile_registry_add_profile(serv->profreg, RR_TYPE_SASL_DIGEST_MD5, NULL);
-
- return serv;
-}
-
-int
-icalcap_server_listen_rr(icalcap_server *serv, const char *hostname, const int port) {
-
- GError *error = NULL;
- g_return_val_if_fail(serv, FALSE);
-
- /* Create a listener object */
- serv->listener = rr_tcp_listener_new(serv->profreg, hostname, port, &error);
- if (serv->listener == NULL) {
- /* FIXME return the error */
- return FALSE;
- }
-
- return TRUE;
-}
-
-int
-icalcap_server_run_rr(const icalcap_server *serv) {
-
- /* assert cap != NULL */
- GError *error = NULL;
-
- if (!rr_wait_until_done(&error)) {
- /* FIXME return the error */
- return FALSE;
- }
-
- return TRUE;
-}
-
-int
-icalcap_server_shutdown_rr(icalcap_server *serv) {
-
- /* assert cap != NULL */
- GError *error = NULL;
-
- if (!rr_listener_shutdown(serv->listener, &error)) {
- /* FIXME return the error */
- return 0;
- }
-
- serv->listener = NULL;
- g_free(serv);
-
- return 1;
-}
-
-/*
- * icalcap_message.c
- */
-
-/*
- * Internal constructor
- */
-static struct _icalcap_message_rr *
-_icalcap_message_new_from_component_rr(const icalcap *cap, int type, icalcomponent *comp) {
-
- struct _icalcap_message_rr *ret;
-
- if ((ret = g_new0(struct _icalcap_message_rr, 1)) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- ret->cap = cap;
- ret->type = type;
-
- ret->comp = comp;
-
- return ret;
-}
-
-static icalcap_message *
-_icalcap_message_new_from_frame_rr(const icalcap *cap, int type, RRFrame *frame) {
-
- struct _icalcap_message_rr *ret;
-
- if ((ret = g_new0(struct _icalcap_message_rr, 1)) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- ret->cap = cap;
- ret->type = type;
- ret->frame = frame;
-
- ret->comp = icalcap_component_new_from_string(ret->frame->payload);
-
- return (icalcap_message *)ret;
-}
-
-icalcap_message *
-icalcap_message_new_rr(const icalcap *cap, const icalcomponent *comp) {
-
- struct _icalcap_message_rr *ret;
- gchar *str;
-
- if (comp == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- ret = _icalcap_message_new_from_component_rr(cap, ICALCAP_MESSAGE_CMD, NULL);
-
- str = g_strdup_printf("%s\n\n%s",
- "Content-Type: text/calendar",
- icalcomponent_as_ical_string(comp));
-
- ret->msg = rr_message_static_new(RR_FRAME_TYPE_MSG, str, strlen(str), TRUE);
-
- return (icalcap_message *)ret;
-}
-
-/*
- * This method and its implementation are critical. It has the responsibility for
- * serializing the component. The tricky part is that we have a options for encoding XROOT.
- */
-icalcap_message *
-icalcap_message_new_reply_rr(const icalcap_message *orig, const icalcomponent *comp) {
-
- struct _icalcap_message_rr *in, *ret;
- icalcomponent *cc;
- GString *str;
-
- if ((in = (struct _icalcap_message_rr *)orig) == NULL) {
- /* FIXME return an error */
- return NULL;
- }
-
- ret = _icalcap_message_new_from_component_rr(in->cap, ICALCAP_MESSAGE_REPLY, NULL);
-
- /* FIXME */
- if (icalcomponent_isa(comp) != ICAL_XROOT_COMPONENT)
- return NULL;
-
- /* FIXME don't hardcode */
- str = g_string_new("Content-Type: text/calendar\n\n");
-
- for (cc = icalcomponent_get_first_component(comp,
- ICAL_VCALENDAR_COMPONENT);
- cc != NULL;
- cc = icalcomponent_get_next_component(comp,
- ICAL_VCALENDAR_COMPONENT)) {
- g_string_append(str, icalcomponent_as_ical_string(cc));
- }
-
- ret->msg = rr_message_static_new(RR_FRAME_TYPE_RPY, str->str, strlen(str->str), TRUE);
- /* FIXME this should now be ok but if change the API we need to change */
- ret->msg->msgno = in->frame->msgno;
-
- return (icalcap_message *)ret;
-}
-
-void
-icalcap_message_free_rr(icalcap_message *in) {
-
- struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in;
- g_return_if_fail(capmsg);
-
- if (capmsg->comp != NULL) {
- icalcomponent_free(capmsg->comp);
- capmsg->comp = NULL;
- }
-
- if (capmsg->msg != NULL) {
- g_free(capmsg->msg);
- }
-
- g_free(capmsg);
-}
-
-int
-icalcap_message_send_reply_rr(icalcap_message *in) {
-
- struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in;
- GError *error = NULL;
- int rc;
-
- if ((rc = rr_channel_send_message(RR_CHANNEL(capmsg->cap->chan), capmsg->msg, &error)) == 0)
- g_message("error = %s", error->message);
- /* FIXME handle error */
-
- capmsg->msg = NULL;
-
- return rc;
-}
-
-icalcomponent *
-icalcap_message_sync_send_rr(icalcap_message *in, int timeout) {
-
- struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in;
- icalcomponent *comp, *ret;
-
- gchar *str2;
- GError *error = NULL;
- int rc;
-
- /* FIXME */
- rc = rr_cap_cmd(capmsg->cap->chan, capmsg->msg, 3 * timeout, &str2, &error);
- capmsg->msg = NULL;
- if (rc == 0) {
- g_message("error = %s", error->message);
- /* FIXME handle error */
- return 0;
- }
-
- comp = icalcap_component_new_from_string(str2);
- g_free(str2);
- if (ret == NULL)
- return NULL;
-
- return comp;
-}
-
-/*
- *
- */
-
-/*
- * FIXME We assume we can safely create an icalcap_message derived object
- * without calls to the base object
- */
-int
-default_msg_handler(RRCAP *cap, RRFrame *frame, GError **error) {
-
- icalcap_msg_handler func;
- icalcap_message *msg;
- int ret;
-
- g_return_val_if_fail(cap, FALSE);
- g_return_val_if_fail(cap->cfg, FALSE);
- g_return_val_if_fail(cap->cfg->msg_handler_data, FALSE);
-
- func = (icalcap_msg_handler)cap->cfg->msg_handler_data;
-
- msg = _icalcap_message_new_from_frame_rr(cap->hl, ICALCAP_MESSAGE_CMD, frame);
- if (msg == NULL) {
- /* FIXME */
- g_message("error");
- return FALSE;
- }
-
- ret = func(msg);
- icalcap_message_free(msg);
-
- return ret;
-}
diff --git a/libical/src/libicalcap/icalcap_server.c b/libical/src/libicalcap/icalcap_server.c
deleted file mode 100644
index 77b8484554..0000000000
--- a/libical/src/libicalcap/icalcap_server.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "config.h"
-
-#include "icalcap.h"
-#include "icalcap_server.h"
-#include "icalcap_server_impl.h"
-
-
-icalcap_server *
-icalcap_server_new(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb,
- icalcap_msg_handler msg_cb) {
-
-#ifdef WITH_RR
- return icalcap_server_new_rr(auth_cb, chanup_cb, msg_cb);
-#else
- return NULL;
-#endif
-}
-
-int
-icalcap_server_listen(icalcap_server *cap, const char *hostname, const int _port) {
-
- int port = _port;
-
- if (port <= 0)
- port = 1026;
-
-#ifdef WITH_RR
- return icalcap_server_listen_rr(cap, hostname, port);
-#else
- return 0;
-#endif
-}
-
-int
-icalcap_server_run(const icalcap_server *cap) {
-
-#ifdef WITH_RR
- return icalcap_server_run_rr(cap);
-#else
- return 0;
-#endif
-}
-
-int
-icalcap_server_shutdown(icalcap_server *cap) {
-
-#ifdef WITH_RR
- return icalcap_server_shutdown_rr(cap);
-#else
- return 0;
-#endif
-}
diff --git a/libical/src/libicalcap/icalcap_server.h b/libical/src/libicalcap/icalcap_server.h
deleted file mode 100644
index 53c73d3bab..0000000000
--- a/libical/src/libicalcap/icalcap_server.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __ICALCAP_SERVER_H__
-#define __ICALCAP_SERVER_H__
-
-#include "icalcap.h"
-
-typedef struct _icalcap_server icalcap_server;
-
-typedef int (*icalcap_auth_handler)(const icalcap *cap, const char *piggyback);
-typedef void (*icalcap_chanup_handler)(const icalcap *cap);
-
-icalcap_server*icalcap_server_new(icalcap_auth_handler auth_cb,
- icalcap_chanup_handler chanup_cb,
- icalcap_msg_handler msg_cb);
-
-int icalcap_server_listen(icalcap_server *cap, const char *hostname, const int port);
-int icalcap_server_run(const icalcap_server *cap);
-int icalcap_server_shutdown(icalcap_server *cap);
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_server_impl.h b/libical/src/libicalcap/icalcap_server_impl.h
deleted file mode 100644
index c5d527d266..0000000000
--- a/libical/src/libicalcap/icalcap_server_impl.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef __ICALCAP_SERVER_IMPL_H__
-#define __ICALCAP_SERVER_IMPL_H__
-
-#ifdef WITH_RR
-
-#include <librr/rr.h>
-#include <librrsasl/rr-sasl.h>
-#include <librrtls/rr-tls.h>
-#include <librrcap/rr-cap.h>
-
-struct _icalcap_server {
- RRProfileRegistry *profreg;
- RRListener *listener;
- RRCAPConfig *cfg;
- icalcap_msg_handler handler;
-};
-
-icalcap_server *icalcap_server_new_rr(icalcap_auth_handler auth_cb,
- icalcap_chanup_handler chanup_cb,
- icalcap_msg_handler msg_cb);
-int icalcap_server_listen_rr(icalcap_server *cap,
- const char *hostname,
- const int port);
-int icalcap_server_run_rr(const icalcap_server *cap);
-int icalcap_server_shutdown_rr(icalcap_server *cap);
-
-#else
-#error "No implementation of icalcap found!"
-#endif
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_session.c b/libical/src/libicalcap/icalcap_session.c
deleted file mode 100644
index 2f8fb2a701..0000000000
--- a/libical/src/libicalcap/icalcap_session.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "config.h"
-
-#include "icalcap.h"
-#include "icalcap_session.h"
-#include "icalcap_session_impl.h"
-
-
-icalcap_session *
-icalcap_session_new(void) {
-
-#ifdef WITH_RR
- return icalcap_session_new_rr();
-#else
- return NULL;
-#endif
-}
-
-int
-icalcap_session_connect(icalcap_session *sess, const char *hostname, const int _port) {
-
- int port = _port;
-
- if (port <= 0)
- port = 1026;
-
-#ifdef WITH_RR
- return icalcap_session_connect_rr(sess, hostname, port);
-#else
- return 0;
-#endif
-}
-
-int
-icalcap_session_login(icalcap_session *sess, const char *username, const char *authname,
- const char *password) {
-
-#ifdef WITH_RR
- return icalcap_session_login_rr(sess, username, authname, password);
-#else
- return 0;
-#endif
-}
-
-icalcap *
-icalcap_session_start(const icalcap_session *sess, icalcap_msg_handler handler) {
-
-#ifdef WITH_RR
- return icalcap_session_start_rr(sess, handler);
-#else
- return 0;
-#endif
-}
-
-int
-icalcap_session_disconnect(icalcap_session *sess) {
-
-#ifdef WITH_RR
- return icalcap_session_disconnect_rr(sess);
-#else
- return 0;
-#endif
-}
diff --git a/libical/src/libicalcap/icalcap_session.h b/libical/src/libicalcap/icalcap_session.h
deleted file mode 100644
index c12d434b8c..0000000000
--- a/libical/src/libicalcap/icalcap_session.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef __ICALCAP_SESSION_H__
-#define __ICALCAP_SESSION_H__
-
-#include "icalcap.h"
-
-typedef struct _icalcap_session icalcap_session;
-
-icalcap_session*icalcap_session_new(void);
-int icalcap_session_connect(icalcap_session *cap, const char *hostname, const int port);
-int icalcap_session_login(icalcap_session *cap, const char *username, const char *authname,
- const char *password);
-icalcap*icalcap_session_start(const icalcap_session *cap, icalcap_msg_handler handler);
-int icalcap_session_disconnect(icalcap_session *cap);
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_session_impl.h b/libical/src/libicalcap/icalcap_session_impl.h
deleted file mode 100644
index 26bb7d107d..0000000000
--- a/libical/src/libicalcap/icalcap_session_impl.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef __ICALCAP_SESSION_IMPL_H__
-#define __ICALCAP_SESSION_IMPL_H__
-
-#ifdef WITH_RR
-
-#include <librr/rr.h>
-#include <librrsasl/rr-sasl.h>
-#include <librrtls/rr-tls.h>
-#include <librrcap/rr-cap.h>
-
-struct _icalcap_session {
- RRProfileRegistry *profreg;
- RRConnection *connection;
- RRCAPConfig *cfg;
- icalcap_msg_handler handler;
-
- char *username;
-};
-
-icalcap_session*icalcap_session_new_rr(void);
-int icalcap_session_connect_rr(icalcap_session *cap,
- const char *hostname,
- const int port);
-int icalcap_session_login_rr(icalcap_session *cap,
- const char *username,
- const char *authname,
- const char *password);
-icalcap *icalcap_session_start_rr(const icalcap_session *cap,
- icalcap_msg_handler handler);
-int icalcap_session_disconnect_rr(icalcap_session *cap);
-
-#else
-#error "No implementation of icalcap found!"
-#endif
-
-#endif
diff --git a/libical/src/libicalcap/icalcap_utils.c b/libical/src/libicalcap/icalcap_utils.c
deleted file mode 100644
index b676f6272d..0000000000
--- a/libical/src/libicalcap/icalcap_utils.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*-
- * $Id$
- *
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 2002 Andrea Campi <a.campi@inet.it>
- */
-
-#include "config.h"
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "icalcap.h"
-
-#define CONTENT_TYPE "Content-Type: text/calendar"
-
-
-icalcomponent *
-icalcap_component_new_from_string(const char *data) {
-
- icalcomponent *ret = NULL;
- char *mtype;
-
- /* FIXME split the check */
- if (strncmp(data, CONTENT_TYPE, strlen(CONTENT_TYPE))) {
- return NULL;
- }
-
- mtype = (char *)data+strlen(CONTENT_TYPE);
-
- ret = icalcomponent_new_from_string(mtype);
- if (ret == NULL) {
- return NULL;
- }
-
-#ifdef DEBUG
- g_message("icalcap_component_new_from_string icalcomponent_new_from_string = %p", ret);
-#endif
-
- /* FIXME
- * Validate here: should check at least the version
- */
- if (icalcomponent_isa(ret) != ICAL_VCALENDAR_COMPONENT &&
- icalcomponent_isa(ret) != ICAL_XROOT_COMPONENT) {
- icalcomponent_free(ret);
-
- return NULL;
- }
-
- return ret;
-}
-
-#if 0
-RRCAPCmdArgs *
-msg_parse(RRCAP *cap, icalcomponent *comp) {
-
- icalproperty *prop;
- icalparameter *param;
- icalvalue *value;
- RRCAPCmdArgs *ret = g_new0(RRCAPCmdArgs, 1);
-
- ret->comp = comp;
-
- /* Find the command */
- if ((prop = icalcomponent_get_first_property(comp, ICAL_CMD_PROPERTY)) == NULL) {
- rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND,
- "No CMD sent", NULL);
- goto FAILED;
- }
- if ((value = icalproperty_get_value(prop)) == NULL) {
- rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND,
- "CMD has no value", icalproperty_as_ical_string(prop));
- goto FAILED;
- }
- ret->cmd = icalvalue_get_cmd(value);
-
- /* Look for params */
-
- /* ID */
- if ((param = icalproperty_get_first_parameter(prop,
- ICAL_ID_PARAMETER)) != NULL) {
- if ((ret->id = icalparameter_get_id(param)) == NULL) {
- rr_cap_send_error(cap, NULL,
- ICAL_9_0_UNRECOGNIZED_COMMAND,
- "ID param is garbled",
- icalproperty_as_ical_string(prop));
- goto FAILED;
- }
- }
-
- /* LATENCY */
- if ((param = icalproperty_get_first_parameter(prop,
- ICAL_LATENCY_PARAMETER)) != NULL) {
- const char *tmp;
- if ((tmp = icalparameter_get_latency(param)) == NULL) {
- rr_cap_send_error(cap, NULL,
- ICAL_9_0_UNRECOGNIZED_COMMAND,
- "LATENCY is garbled",
- icalproperty_as_ical_string(prop));
- goto FAILED;
- }
-
- ret->latency = atoi(tmp);
- }
-
- /* ACTION */
- if ((param = icalproperty_get_first_parameter(prop,
- ICAL_ACTIONPARAM_PARAMETER)) != NULL) {
- if ((ret->action = icalparameter_get_actionparam(param))
- == NULL) {
- rr_cap_send_error(cap, NULL,
- ICAL_9_0_UNRECOGNIZED_COMMAND,
- "ACTION is garbled",
- icalproperty_as_ical_string(prop));
- goto FAILED;
- }
- }
-
- if ((ret->latency >= 0) ^ (ret->action != ICAL_ACTIONPARAM_NONE)) {
- rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND,
- "LATENCY and ACTION must be both present",
- icalproperty_as_ical_string(prop));
- goto FAILED;
- }
-
- return ret;
-
-FAILED:
- g_free(ret);
- return NULL;
-}
-#endif
diff --git a/libical/src/libicalss/.cvsignore b/libical/src/libicalss/.cvsignore
deleted file mode 100644
index 1fe9dcf1e9..0000000000
--- a/libical/src/libicalss/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
-icalss.h
diff --git a/libical/src/libicalss/Makefile.am b/libical/src/libicalss/Makefile.am
deleted file mode 100644
index 9fd810b653..0000000000
--- a/libical/src/libicalss/Makefile.am
+++ /dev/null
@@ -1,123 +0,0 @@
-#======================================================================
-# FILE: Makefile.am
-# CREATOR: eric
-#
-# $Id: Makefile.am,v 1.24 2003/11/05 22:47:35 jpr Exp $
-#
-#
-# (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#
-#
-#
-#======================================================================
-
-
-AM_YFLAGS =-d -v -p ss
-AM_LFLAGS = -Pss
-LEX_OUTPUT_ROOT = lex.ss
-
-# just to get it built
-$(srcdir)/icalgauge.c: icalssyacc.h
-$(srcdir)/icalsslexer.c: icalssyacc.h
-
-
-if WITH_BDB4
-BDB_INCLUDE=-I@BDB_DIR_INCLUDE@ -DWITH_BDB4
-BDB_SOURCEFILES=icalbdbset.c icalbdbset.h icalbdbsetimpl.h
-BDB_HEADERFILES=$(srcdir)/icalbdbset.h
-libicalssinclude_BDBHEADERS=icalbdbset.h icalbdbsetimpl.h
-BDB_LIBFILES=@BDB_DIR_LIB@/@BDB_LIB@
-else
-BDB_INCLUDE=
-BDB_SOURCEFILES=
-BDB_HEADERFILES=
-endif
-
-if WITH_CXX_BINDINGS
-cxx_lib=libicalss-evolution_cxx.la
-cxx_headers=icalspanlist_cxx.h
-else
-cxx_lib=
-cxx_headers=
-endif
-
-noinst_LTLIBRARIES = libicalss-evolution.la $(cxx_lib)
-
-INCLUDES = \
- -I$(top_srcdir)/src \
- $(BDB_INCLUDE)
-
-libicalss_evolution_la_LDFLAGS = -version-info 0:0:0
-libicalss_evolution_la_LIBADD = $(BDB_LIBFILES)
-
-if DEV
-libicalss_evolution_la_DEVSOURCES = icalsslexer.l icalssyacc.y
-else
-libicalss_evolution_la_DEVSOURCES = icalsslexer.c icalssyacc.c
-endif
-
-libicalss_evolution_la_SOURCES = \
- icalcalendar.c \
- icalcalendar.h \
- icalclassify.c \
- icalclassify.h \
- icalcluster.c \
- icalcluster.h \
- icalclusterimpl.h \
- icalgauge.c \
- icalgauge.h \
- icalgaugeimpl.h \
- icaldirset.c \
- icaldirset.h \
- icaldirsetimpl.h \
- icalfileset.c \
- icalfileset.h \
- icalfilesetimpl.h \
- icalset.c \
- icalset.h \
- icalssyacc.h \
- icalspanlist.c \
- icalspanlist.h \
- icalmessage.c \
- icalmessage.h \
- $(BDB_SOURCEFILES) \
- $(libicalss_evolution_la_DEVSOURCES)
-
-libicalssincludedir = $(privincludedir)/libical
-
-COMBINEDHEADERS = \
- $(srcdir)/icalgauge.h \
- $(srcdir)/icalset.h \
- $(srcdir)/icalcluster.h \
- $(srcdir)/icalfileset.h \
- $(srcdir)/icaldirset.h \
- $(BDB_HEADERFILES) \
- $(srcdir)/icalcalendar.h \
- $(srcdir)/icalclassify.h \
- $(srcdir)/icalspanlist.h \
- $(srcdir)/icalmessage.h
-
-if WITH_CXX_BINDINGS
-libicalss_evolution_cxx_la_SOURCES = \
- $(libicalss_evolution_la_SOURCES) \
- icalspanlist_cxx.h \
- icalspanlist_cxx.cpp
-
-endif
-
-
-libicalssinclude_HEADERS = icalss.h icalcalendar.h icalclassify.h icalcluster.h icaldirset.h icaldirsetimpl.h icalfileset.h icalfilesetimpl.h icalgauge.h icalgaugeimpl.h icalmessage.h icalset.h icalspanlist.h icalssyacc.h $(libicalssinclude_BDBHEADERS) $(cxx_headers)
-
-CONFIG_CLEAN_FILES = y.output
-
diff --git a/libical/src/libicalss/icalbdbset.c b/libical/src/libicalss/icalbdbset.c
deleted file mode 100644
index 6b11e46741..0000000000
--- a/libical/src/libicalss/icalbdbset.c
+++ /dev/null
@@ -1,1598 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalbdbset.c
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalbdbset.h"
-#include "icalgauge.h"
-#include <errno.h>
-#include <sys/stat.h> /* for stat */
-#include <stdio.h>
-
-#ifndef WIN32
-#include <unistd.h> /* for stat, getpid, unlink */
-#include <fcntl.h> /* for fcntl */
-#include <unistd.h> /* for fcntl */
-#else
-#define S_IRUSR S_IREAD /* R for owner */
-#define S_IWUSR S_IWRITE /* W for owner */
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include "icalbdbsetimpl.h"
-
-#define STRBUF_LEN 255
-#define MAX_RETRY 5
-
-extern int errno;
-
-
-
-/* these are just stub functions */
-icalerrorenum icalbdbset_read_database(icalbdbset* bset, char *(*pfunc)(const DBT *dbt));
-icalerrorenum icalbdbset_create_cluster(const char *path);
-int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method);
-
-static int _compare_keys(DB *dbp, const DBT *a, const DBT *b);
-
-
-/** Default options used when NULL is passed to icalset_new() **/
-icalbdbset_options icalbdbset_options_default = {ICALBDB_EVENTS, DB_BTREE, 0644, 0, NULL, NULL};
-
-
-static DB_ENV *ICAL_DB_ENV = 0;
-
-/** Initialize the db environment */
-
-int icalbdbset_init_dbenv(char *db_env_dir, void (*logDbFunc)(const char*, char*)) {
- int ret;
- int flags;
-
- if (db_env_dir) {
- struct stat env_dir_sb;
-
- if (stat(db_env_dir, &env_dir_sb)) {
- fprintf(stderr, "The directory '%s' is missing, please create it.\n", db_env_dir);
- return EINVAL;
- }
- }
-
- ret = db_env_create(&ICAL_DB_ENV, 0);
-
- if (ret) {
- /* some kind of error... */
- return ret;
- }
-
- /* Do deadlock detection internally */
- if ((ret = ICAL_DB_ENV->set_lk_detect(ICAL_DB_ENV, DB_LOCK_DEFAULT)) != 0) {
- char * foo = db_strerror(ret);
- fprintf(stderr, "Could not initialize the database locking environment\n");
- return ret;
- }
-
- flags = DB_INIT_LOCK | DB_INIT_TXN | DB_CREATE | DB_THREAD | \
- DB_RECOVER | DB_INIT_LOG | DB_INIT_MPOOL;
- ret = ICAL_DB_ENV->open(ICAL_DB_ENV, db_env_dir, flags, S_IRUSR|S_IWUSR);
-
- if (ret) {
- char * foo = db_strerror(ret);
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "dbenv->open");
- return ret;
- }
-
- /* display additional error messages */
- if (logDbFunc != NULL) {
- ICAL_DB_ENV->set_errcall(ICAL_DB_ENV, logDbFunc);
- }
-
- return ret;
-}
-
-void icalbdbset_checkpoint(void)
-{
- int ret;
- char *err;
-
- switch (ret = ICAL_DB_ENV->txn_checkpoint(ICAL_DB_ENV, 0,0,0)) {
- case 0:
- case DB_INCOMPLETE:
- break;
- default:
- err = db_strerror(ret);
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "checkpoint failed");
- abort();
- }
-}
-
-void icalbdbset_rmdbLog(void)
-{
- int ret = 0;
- char** listp;
-
- /* remove log files that are archivable (ie. no longer needed) */
- if (ICAL_DB_ENV->log_archive(ICAL_DB_ENV, &listp, DB_ARCH_ABS) == 0) {
- if (listp != NULL) {
- int ii = 0;
- while (listp[ii] != NULL) {
- ret = unlink(listp[ii]);
- ii++;
- }
- free(listp);
- }
- }
-}
-
-int icalbdbset_cleanup(void)
-{
- int ret = 0;
-
- /* one last checkpoint.. */
- icalbdbset_checkpoint();
-
- /* remove logs that are not needed anymore */
- icalbdbset_rmdbLog();
-
- if (ICAL_DB_ENV)
- ret = ICAL_DB_ENV->close(ICAL_DB_ENV, 0);
-
- return ret;
-}
-
-DB_ENV *icalbdbset_get_env(void) {
- return ICAL_DB_ENV;
-}
-
-
-/** Initialize an icalbdbset. Also attempts to populate from the
- * database (primary if only dbp is given, secondary if sdbp is
- * given) and creates an empty object if retrieval is unsuccessful.
- * pfunc is used to unpack data from the database. If not given, we
- * assume data is a string.
- */
-
-icalset* icalbdbset_init(icalset* set, const char* dsn, void* options_in)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalbdbset_options *options = options_in;
- int ret;
- DB *cal_db;
- char *subdb_name;
-
- if (options == NULL)
- *options = icalbdbset_options_default;
-
- switch (options->subdb) {
- case ICALBDB_CALENDARS:
- subdb_name = "calendars";
- break;
- case ICALBDB_EVENTS:
- subdb_name = "events";
- break;
- case ICALBDB_TODOS:
- subdb_name = "todos";
- break;
- case ICALBDB_REMINDERS:
- subdb_name = "reminders";
- break;
- }
-
- cal_db = icalbdbset_bdb_open(set->dsn,
- subdb_name,
- options->dbtype,
- options->mode,
- options->flag);
- if (cal_db == NULL)
- return NULL;
-
- bset->dbp = cal_db;
- bset->sdbp = NULL;
- bset->gauge = 0;
- bset->cluster = 0;
-
- if ((ret = icalbdbset_read_database(bset, options->pfunc)) != ICAL_NO_ERROR) {
- return NULL;
- }
-
- return (icalset *)bset;
-}
-
-
-/** open a database and return a reference to it. Used only for
- opening the primary index.
- flag = set_flag() DUP | DUP_SORT
- */
-
-icalset* icalbdbset_new(const char* database_filename,
- icalbdbset_subdb_type subdb_type,
- int dbtype, int flag)
-{
- icalbdbset_options options = icalbdbset_options_default;
-
- options.subdb = subdb_type;
- options.dbtype = dbtype;
- options.flag = flag;
-
- /* this will in turn call icalbdbset_init */
- return icalset_new(ICAL_BDB_SET, database_filename, &options);
-}
-
-/**
- * Open a secondary database, used for accessing secondary indices.
- * The callback function tells icalbdbset how to associate secondary
- * key information with primary data. See the BerkeleyDB reference
- * guide for more information.
- */
-
-DB * icalbdbset_bdb_open_secondary(DB *dbp,
- const char *database,
- const char *sub_database,
- int (*callback) (DB *db,
- const DBT *dbt1,
- const DBT *dbt2,
- DBT *dbt3),
- int type)
-{
- int ret;
- int flags;
- DB *sdbp = NULL;
-
- if (!sub_database)
- return NULL;
-
- if (!ICAL_DB_ENV)
- icalbdbset_init_dbenv(NULL, NULL);
-
- /* Open/create secondary */
- if((ret = db_create(&sdbp, ICAL_DB_ENV, 0)) != 0) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "secondary index: %s", sub_database);
- return NULL;
- }
-
- if ((ret = sdbp->set_flags(sdbp, DB_DUP | DB_DUPSORT)) != 0) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "set_flags error for secondary index: %s", sub_database);
- return NULL;
- }
-
- flags = DB_CREATE | DB_THREAD;
- if ((ret = sdbp->open(sdbp, database, sub_database, type, (u_int32_t) flags, 0644)) != 0) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "failed to open secondary index: %s", sub_database);
- if (ret == DB_RUNRECOVERY)
- abort();
- else
- return NULL;
- }
-
- /* Associate the primary index with a secondary */
- if((ret = dbp->associate(dbp, sdbp, callback, 0)) != 0) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "failed to associate secondary index: %s", sub_database);
- return NULL;
- }
-
- return sdbp;
-}
-
-DB* icalbdbset_bdb_open(const char* path,
- const char *subdb,
- int dbtype,
- mode_t mode,
- int flag)
-{
- DB *dbp = NULL;
- int ret;
- int flags;
-
- /* Initialize the correct set of db subsystems (see capdb.c) */
- flags = DB_CREATE | DB_THREAD;
-
- /* should just abort here instead of opening an env in the current dir.. */
- if (!ICAL_DB_ENV)
- icalbdbset_init_dbenv(NULL, NULL);
-
- /* Create and initialize database object, open the database. */
- if ((ret = db_create(&dbp, ICAL_DB_ENV, 0)) != 0) {
- return (NULL);
- }
-
- /* set comparison function, if BTREE */
- if (dbtype == DB_BTREE)
- dbp->set_bt_compare(dbp, _compare_keys);
-
- /* set DUP, DUPSORT */
- if (flag != 0)
- dbp->set_flags(dbp, flag);
-
- if ((ret = dbp->open(dbp, path, subdb, dbtype, flags, mode)) != 0) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "%s (database: %s): open failed.", path, subdb);
- if (ret == DB_RUNRECOVERY)
- abort();
- else
- return NULL;
- }
-
- return (dbp);
-}
-
-
-/* icalbdbset_parse_data -- parses using pfunc to unpack data. */
-char *icalbdbset_parse_data(DBT *dbt, char *(*pfunc)(const DBT *dbt))
-{
- char *ret;
-
- if(pfunc) {
- ret = (char *)pfunc(dbt);
- } else {
- ret = (char *) dbt->data;
- }
-
- return (ret);
-}
-
-/* This populates a cluster with the entire contents of a database */
-icalerrorenum icalbdbset_read_database(icalbdbset* bset, char *(*pfunc)(const DBT *dbt))
-{
-
- DB *dbp;
- DBC *dbcp;
- DBT key, data;
- char *str, *szpstr;
- int ret;
- char keystore[256];
- char datastore[1024];
- char *more_mem = NULL;
- DB_TXN *tid;
-
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- if (bset->sdbp) { dbp = bset->sdbp; }
- else { dbp = bset->dbp; }
-
- if(!dbp) { goto err1; }
-
- bset->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT);
-
- if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) {
- char *foo = db_strerror(ret);
- abort();
- }
-
- /* acquire a cursor for the database */
- if ((ret = dbp->cursor(dbp, tid, &dbcp, 0)) != 0) {
- dbp->err(dbp, ret, "primary index");
- goto err1;
- }
-
- key.flags = DB_DBT_USERMEM;
- key.data = keystore;
- key.ulen = sizeof(keystore);
-
- data.flags= DB_DBT_USERMEM;
- data.data = datastore;
- data.ulen = sizeof(datastore);
-
-
- /* fetch the key/data pair */
- while (1) {
- ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT);
- if (ret == DB_NOTFOUND) {
- break;
- } else if (ret == ENOMEM) {
- if (more_mem) free (more_mem);
- more_mem = malloc(data.ulen+1024);
- data.data = more_mem;
- data.ulen = data.ulen+1024;
- } else if (ret == DB_LOCK_DEADLOCK) {
- char *foo = db_strerror(ret);
- abort(); /* should retry in case of DB_LOCK_DEADLOCK */
- } else if (ret) {
- char *foo = db_strerror(ret);
- /* some other weird-ass error */
- dbp->err(dbp, ret, "cursor");
- abort();
- } else {
- icalcomponent *cl;
-
- /* this prevents an array read bounds error */
- if((str = (char *)calloc(data.size + 1, sizeof(char)))==NULL)
- goto err2;
- memcpy(str, (char *)data.data, data.size);
-
- cl = icalparser_parse_string(str);
-
- icalcomponent_add_component(bset->cluster, cl);
- free(str);
- }
- }
- if(ret != DB_NOTFOUND) {
- goto err2;
- }
-
-
- if (more_mem) {
- free(more_mem);
- more_mem = NULL;
- }
-
- if ((ret = dbcp->c_close(dbcp)) != 0) {
- char * foo = db_strerror(ret);
- abort(); /* should retry in case of DB_LOCK_DEADLOCK */
- }
-
- if ((ret = tid->commit(tid, 0)) != 0) {
- char * foo = db_strerror(ret);
- abort();
- }
-
- return ICAL_NO_ERROR;
-
- err2:
- if (more_mem) free(more_mem);
- dbcp->c_close(dbcp);
- abort(); /* should retry in case of DB_LOCK_DEADLOCK */
- return ICAL_INTERNAL_ERROR;
-
- err1:
- dbp->err(dbp, ret, "cursor index");
- abort();
- return (ICAL_FILE_ERROR);
-}
-
-
-/* XXX add more to this */
-void icalbdbset_free(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- int ret;
-
- icalerror_check_arg_rv((bset!=0),"bset");
-
- if (bset->cluster != 0){
- icalbdbset_commit(set);
- icalcomponent_free(bset->cluster);
- bset->cluster=0;
- }
-
- if(bset->gauge !=0){
- icalgauge_free(bset->gauge);
- }
-
- if(bset->path != 0){
- free((char *)bset->path);
- bset->path = 0;
- }
-
- if(bset->sindex != 0) {
- free((char *)bset->sindex);
- bset->sindex = 0;
- }
-
- if (bset->dbp &&
- ((ret = bset->dbp->close(bset->dbp, 0)) != 0)) {
- }
- bset->dbp = NULL;
-}
-
-/* return cursor is in rdbcp */
-int icalbdbset_acquire_cursor(DB *dbp, DB_TXN *tid, DBC **rdbcp) {
- int ret=0;
-
- if((ret = dbp->cursor(dbp, tid, rdbcp, 0)) != 0) {
- dbp->err(dbp, ret, "couldn't open cursor");
- goto err1;
- }
-
- return ICAL_NO_ERROR;
-
- err1:
- return ICAL_FILE_ERROR;
-
-}
-
-/* returns key/data in arguments */
-int icalbdbset_get_first(DBC *dbcp, DBT *key, DBT *data) {
- return icalbdbset_cget(dbcp, key, data, DB_FIRST);
-}
-
-int icalbdbset_get_next(DBC *dbcp, DBT *key, DBT *data) {
- return icalbdbset_cget(dbcp, key, data, DB_NEXT);
-}
-
-int icalbdbset_get_last(DBC *dbcp, DBT *key, DBT *data) {
- return icalbdbset_cget(dbcp, key, data, DB_LAST);
-}
-
-int icalbdbset_get_key(DBC *dbcp, DBT *key, DBT *data) {
- return icalbdbset_cget(dbcp, key, data, DB_SET);
-}
-
-int icalbdbset_delete(DB *dbp, DBT *key) {
- DB_TXN *tid;
- int ret;
- int done = 0;
- int retry = 0;
-
- while ((retry < MAX_RETRY) && !done) {
-
- if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else {
- char *foo = db_strerror(ret);
- abort();
- }
- }
-
- if ((ret = dbp->del(dbp, tid, key, 0)) != 0) {
- if (ret == DB_NOTFOUND) {
- /* do nothing - not an error condition */
- }
- else if (ret == DB_LOCK_DEADLOCK) {
- tid->abort(tid);
- retry++;
- continue;
- }
- else {
- char *strError = db_strerror(ret);
- icalerror_warn("icalbdbset_delete faild: ");
- icalerror_warn(strError);
- tid->abort(tid);
- return ICAL_FILE_ERROR;
- }
- }
-
- if ((ret = tid->commit(tid, 0)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- tid->abort(tid);
- retry++;
- continue;
- }
- else {
- char * foo = db_strerror(ret);
- abort();
- }
- }
-
- done = 1; /* all is well */
- }
-
- if (!done) {
- if (tid != NULL) tid->abort(tid);
- }
-
- return ret;
-}
-
-int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method) {
- int ret=0;
-
- key->flags |= DB_DBT_MALLOC; /* change these to DB_DBT_USERMEM */
- data->flags |= DB_DBT_MALLOC;
-
- /* fetch the key/data pair */
- if((ret = dbcp->c_get(dbcp, key, data, access_method)) != 0) {
- goto err1;
- }
-
- return ICAL_NO_ERROR;
-
- err1:
- return ICAL_FILE_ERROR;
-}
-
-
-int icalbdbset_cput(DBC *dbcp, DBT *key, DBT *data, int access_method) {
- int ret=0;
-
- key->flags |= DB_DBT_MALLOC; /* change these to DB_DBT_USERMEM */
- data->flags |= DB_DBT_MALLOC;
-
- /* fetch the key/data pair */
- if((ret = dbcp->c_put(dbcp, key, data, 0)) != 0) {
- goto err1;
- }
-
- return ICAL_NO_ERROR;
-
- err1:
- return ICAL_FILE_ERROR;
-}
-
-
-int icalbdbset_put(DB *dbp, DBT *key, DBT *data, int access_method)
-{
- int ret = 0;
- DB_TXN *tid = NULL;
- int retry = 0;
- int done = 0;
-
- while ((retry < MAX_RETRY) && !done) {
-
- if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else {
- char *foo = db_strerror(ret);
- abort();
- }
- }
-
- if ((ret = dbp->put(dbp, tid, key, data, access_method)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- tid->abort(tid);
- retry++;
- continue;
- }
- else {
- char *strError = db_strerror(ret);
- icalerror_warn("icalbdbset_put faild: ");
- icalerror_warn(strError);
- tid->abort(tid);
- return ICAL_FILE_ERROR;
- }
- }
-
- if ((ret = tid->commit(tid, 0)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- tid->abort(tid);
- retry++;
- continue;
- }
- else {
- char * foo = db_strerror(ret);
- abort();
- }
- }
-
- done = 1; /* all is well */
- }
-
- if (!done) {
- if (tid != NULL) tid->abort(tid);
- return ICAL_FILE_ERROR;
- }
- else
- return ICAL_NO_ERROR;
-}
-
-int icalbdbset_get(DB *dbp, DB_TXN *tid, DBT *key, DBT *data, int flags)
-{
- return (dbp->get(dbp, tid, key, data, flags));
-}
-
-/** Return the path of the database file **/
-
-const char* icalbdbset_path(icalset* set)
-{
- icalerror_check_arg_rz((set!=0),"set");
-
- return set->dsn;
-}
-
-const char* icalbdbset_subdb(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- return bset->subdb;
-}
-
-
-/** Write changes out to the database file.
- */
-
-icalerrorenum icalbdbset_commit(icalset *set) {
- DB *dbp;
- DBC *dbcp;
- DBT key, data;
- icalcomponent *c;
- char *str;
- int ret=0;
- int reterr = ICAL_NO_ERROR;
- char keystore[256];
- char uidbuf[256];
- char datastore[1024];
- char *more_mem = NULL;
- DB_TXN *tid = NULL;
- icalbdbset *bset = (icalbdbset*)set;
- int bad_uid_counter = 0;
- int retry = 0, done = 0, completed = 0, deadlocked = 0;
-
- icalerror_check_arg_re((bset!=0),"bset",ICAL_BADARG_ERROR);
-
- dbp = bset->dbp;
- icalerror_check_arg_re((dbp!=0),"dbp is invalid",ICAL_BADARG_ERROR);
-
- if (bset->changed == 0)
- return ICAL_NO_ERROR;
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
- key.flags = DB_DBT_USERMEM;
- key.data = keystore;
- key.ulen = sizeof(keystore);
-
- data.flags = DB_DBT_USERMEM;
- data.data = datastore;
- data.ulen = sizeof(datastore);
-
- if (!ICAL_DB_ENV)
- icalbdbset_init_dbenv(NULL, NULL);
-
- while ((retry < MAX_RETRY) && !done) {
-
- if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else if (ret == DB_RUNRECOVERY) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "icalbdbset_commit: txn_begin failed");
- abort();
- }
- else {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "icalbdbset_commit");
- return ICAL_INTERNAL_ERROR;
- }
- }
-
- /* first delete everything in the database, because there could be removed components */
- if ((ret = dbp->cursor(dbp, tid, &dbcp, DB_DIRTY_READ)) != 0) {
- tid->abort(tid);
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else if (ret == DB_RUNRECOVERY) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "curor failed");
- abort();
- }
- else {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "curor failed");
- /* leave bset->changed set to true */
- return ICAL_INTERNAL_ERROR;
- }
- }
-
- /* fetch the key/data pair, then delete it */
- completed = 0;
- while (!completed && !deadlocked) {
- ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT);
- if (ret == DB_NOTFOUND) {
- completed = 1;
- } else if (ret == ENOMEM) {
- if (more_mem) free(more_mem);
- more_mem = malloc(data.ulen+1024);
- data.data = more_mem;
- data.ulen = data.ulen+1024;
- } else if (ret == DB_LOCK_DEADLOCK) {
- deadlocked = 1;
- } else if (ret == DB_RUNRECOVERY) {
- tid->abort(tid);
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_get failed.");
- abort();
- } else if (ret == 0) {
- if ((ret = dbcp->c_del(dbcp,0))!=0) {
- dbp->err(dbp, ret, "cursor");
- if (ret == DB_KEYEMPTY) {
- /* never actually created, continue onward.. */
- /* do nothing - break; */
- } else if (ret == DB_LOCK_DEADLOCK) {
- deadlocked = 1;
- } else {
- char *foo = db_strerror(ret);
- abort();
- }
- }
- } else { /* some other non-fatal error */
- dbcp->c_close(dbcp);
- tid->abort(tid);
- if (more_mem) {
- free(more_mem);
- more_mem = NULL;
- }
- return ICAL_INTERNAL_ERROR;
- }
- }
-
- if (more_mem) {
- free(more_mem);
- more_mem = NULL;
- }
-
- if (deadlocked) {
- dbcp->c_close(dbcp);
- tid->abort(tid);
- retry++;
- continue; /* next retry */
- }
-
- deadlocked = 0;
- for (c = icalcomponent_get_first_component(bset->cluster,ICAL_ANY_COMPONENT);
- c != 0 && !deadlocked;
- c = icalcomponent_get_next_component(bset->cluster,ICAL_ANY_COMPONENT)) {
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
- /* Note that we're always inserting into a primary index. */
- if (icalcomponent_isa(c) != ICAL_VAGENDA_COMPONENT) {
- char *uidstr = (char *)icalcomponent_get_uid(c);
- if (!uidstr) { /* this shouldn't happen */
- /* no uid string, we need to add one */
- snprintf(uidbuf, 256, "baduid%d-%d", getpid(), bad_uid_counter++);
- key.data = uidbuf;
- } else {
- key.data = uidstr;
- }
- } else {
- char *relcalid = NULL;
- relcalid = (char*)icalcomponent_get_relcalid(c);
- if (relcalid == NULL) {
- snprintf(uidbuf, 256, "baduid%d-%d", getpid(), bad_uid_counter++);
- key.data = uidbuf;
- } else {
- key.data = relcalid;
- }
- }
- key.size = strlen(key.data);
-
- str = icalcomponent_as_ical_string(c);
- data.data = str;
- data.size = strlen(str);
-
- if ((ret = dbcp->c_put(dbcp, &key, &data, DB_KEYLAST)) != 0) {
- if (ret == DB_LOCK_DEADLOCK) {
- deadlocked = 1;
- }
- else if (ret == DB_RUNRECOVERY) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_put failed.");
- abort();
- }
- else {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_put failed %s.", str);
- /* continue to try to put as many icalcomponent as possible */
- reterr = ICAL_INTERNAL_ERROR;
- }
- }
- }
-
- if (deadlocked) {
- dbcp->c_close(dbcp);
- tid->abort(tid);
- retry++;
- continue;
- }
-
- if ((ret = dbcp->c_close(dbcp)) != 0) {
- tid->abort(tid);
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else if (ret == DB_RUNRECOVERY) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_closed failed.");
- abort();
- }
- else {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_closed failed.");
- reterr = ICAL_INTERNAL_ERROR;
- }
- }
-
- if ((ret = tid->commit(tid, 0)) != 0) {
- tid->abort(tid);
- if (ret == DB_LOCK_DEADLOCK) {
- retry++;
- continue;
- }
- else if (ret == DB_RUNRECOVERY) {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "commit failed.");
- abort();
- }
- else {
- ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "commit failed.");
- reterr = ICAL_INTERNAL_ERROR;
- }
- }
-
- done = 1;
- }
-
- bset->changed = 0;
- return reterr;
-}
-
-
-void icalbdbset_mark(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rv((bset!=0),"bset");
-
- bset->changed = 1;
-}
-
-
-icalcomponent* icalbdbset_get_component(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- return bset->cluster;
-}
-
-
-/* manipulate the components in the cluster */
-
-icalerrorenum icalbdbset_add_component(icalset *set,
- icalcomponent* child)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_add_component(bset->cluster,child);
-
- icalbdbset_mark(set);
-
- return ICAL_NO_ERROR;
-}
-
-
-icalerrorenum icalbdbset_remove_component(icalset *set,
- icalcomponent* child)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_remove_component(bset->cluster,child);
-
- icalbdbset_mark(set);
-
- return ICAL_NO_ERROR;
-}
-
-
-int icalbdbset_count_components(icalset *set,
- icalcomponent_kind kind)
-{
- icalbdbset *bset = (icalbdbset*)set;
-
- if(set == 0){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return -1;
- }
-
- return icalcomponent_count_components(bset->cluster,kind);
-}
-
-
-/** Set the gauge **/
-
-icalerrorenum icalbdbset_select(icalset* set, icalgauge* gauge)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR);
- icalerror_check_arg_re(gauge!=0,"gauge",ICAL_BADARG_ERROR);
-
- bset->gauge = gauge;
-
- return ICAL_NO_ERROR;
-}
-
-
-/** Clear the gauge **/
-
-void icalbdbset_clear(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rv((bset!=0),"bset");
-
- bset->gauge = 0;
-}
-
-
-icalcomponent* icalbdbset_fetch(icalset* set, icalcomponent_kind kind, const char* uid)
-{
- icalcompiter i;
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- for(i = icalcomponent_begin_component(bset->cluster, kind);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *this = icalcompiter_deref(&i);
- icalproperty *p = NULL;
- const char *this_uid = NULL;
-
- if (this != 0){
- if (kind == ICAL_VAGENDA_COMPONENT) {
- p = icalcomponent_get_first_property(this,ICAL_RELCALID_PROPERTY);
- if (p != NULL) this_uid = icalproperty_get_relcalid(p);
- } else {
- p = icalcomponent_get_first_property(this,ICAL_UID_PROPERTY);
- if (p != NULL) this_uid = icalproperty_get_uid(p);
- }
-
- if(this_uid==NULL){
- icalerror_warn("icalbdbset_fetch found a component with no UID");
- continue;
- }
-
- if (strcmp(uid,this_uid)==0){
- return this;
- }
- }
- }
-
- return 0;
-}
-
-
-int icalbdbset_has_uid(icalset* store,const char* uid)
-{
- assert(0); /* HACK, not implemented */
- return 0;
-}
-
-
-/******* support routines for icalbdbset_fetch_match *********/
-
-struct icalbdbset_id {
- char* uid;
- char* recurrence_id;
- int sequence;
-};
-
-void icalbdbset_id_free(struct icalbdbset_id *id)
-{
- if(id->recurrence_id != 0){
- free(id->recurrence_id);
- }
-
- if(id->uid != 0){
- free(id->uid);
- }
-
-}
-
-struct icalbdbset_id icalbdbset_get_id(icalcomponent* comp)
-{
-
- icalcomponent *inner;
- struct icalbdbset_id id;
- icalproperty *p;
-
- inner = icalcomponent_get_first_real_component(comp);
-
- p = icalcomponent_get_first_property(inner, ICAL_UID_PROPERTY);
-
- assert(p!= 0);
-
- id.uid = strdup(icalproperty_get_uid(p));
-
- p = icalcomponent_get_first_property(inner, ICAL_SEQUENCE_PROPERTY);
-
- if(p == 0) {
- id.sequence = 0;
- } else {
- id.sequence = icalproperty_get_sequence(p);
- }
-
- p = icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY);
-
- if (p == 0){
- id.recurrence_id = 0;
- } else {
- icalvalue *v;
- v = icalproperty_get_value(p);
- id.recurrence_id = strdup(icalvalue_as_ical_string(v));
-
- assert(id.recurrence_id != 0);
- }
-
- return id;
-}
-
-/* Find the component that is related to the given
- component. Currently, it just matches based on UID and
- RECURRENCE-ID */
-
-icalcomponent* icalbdbset_fetch_match(icalset* set, icalcomponent *comp)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalcompiter i;
- struct icalbdbset_id comp_id, match_id;
-
- icalerror_check_arg_rz((bset!=0),"bset");
- comp_id = icalbdbset_get_id(comp);
-
- for(i = icalcomponent_begin_component(bset->cluster,ICAL_ANY_COMPONENT);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *match = icalcompiter_deref(&i);
-
- match_id = icalbdbset_get_id(match);
-
- if(strcmp(comp_id.uid, match_id.uid) == 0 &&
- ( comp_id.recurrence_id ==0 ||
- strcmp(comp_id.recurrence_id, match_id.recurrence_id) ==0 )){
-
- /* HACK. What to do with SEQUENCE? */
-
- icalbdbset_id_free(&match_id);
- icalbdbset_id_free(&comp_id);
- return match;
-
- }
-
- icalbdbset_id_free(&match_id);
- }
-
- icalbdbset_id_free(&comp_id);
- return 0;
-
-}
-
-
-icalerrorenum icalbdbset_modify(icalset* set, icalcomponent *old,
- icalcomponent *newc)
-{
- assert(0); /* HACK, not implemented */
- return ICAL_NO_ERROR;
-}
-
-/* caller is responsible to cal icalbdbset_free_cluster first */
-icalerrorenum icalbdbset_set_cluster(icalset* set, icalcomponent* cluster)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- bset->cluster = cluster;
-}
-
-icalerrorenum icalbdbset_free_cluster(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- if (bset->cluster != NULL) icalcomponent_free(bset->cluster);
-}
-
-icalcomponent* icalbdbset_get_cluster(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalerror_check_arg_rz((bset!=0),"bset");
-
- return (bset->cluster);
-}
-
-
-/** Iterate through components. */
-icalcomponent* icalbdbset_get_current_component (icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
-
- icalerror_check_arg_rz((bset!=0),"bset");
-
- return icalcomponent_get_current_component(bset->cluster);
-}
-
-
-icalcomponent* icalbdbset_get_first_component(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalcomponent *c=0;
-
- icalerror_check_arg_rz((bset!=0),"bset");
-
- do {
- if (c == 0)
- c = icalcomponent_get_first_component(bset->cluster,
- ICAL_ANY_COMPONENT);
- else
- c = icalcomponent_get_next_component(bset->cluster,
- ICAL_ANY_COMPONENT);
-
- if(c != 0 && (bset->gauge == 0 ||
- icalgauge_compare(bset->gauge,c) == 1)){
- return c;
- }
-
- } while (c!=0);
-
- return 0;
-}
-
-
-icalsetiter icalbdbset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge, const char* tzid)
-{
- icalsetiter itr = icalsetiter_null;
- icalcomponent* comp = NULL;
- icalcompiter citr;
- icalbdbset *bset = (icalbdbset*) set;
- struct icaltimetype start, next, end;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- icaltimezone *u_zone;
- int g = 0;
- int orig_time_was_utc = 0;
-
- icalerror_check_arg_re((set!=0), "set", icalsetiter_null);
-
- itr.gauge = gauge;
- itr.tzid = tzid;
-
- citr = icalcomponent_begin_component(bset->cluster, kind);
- comp = icalcompiter_deref(&citr);
-
- if (gauge == 0) {
- itr.iter = citr;
- return itr;
- }
-
- /* if there is a gauge, the first matched component is returned */
- while (comp != 0) {
-
- /* check if it is a recurring component and with guage expand, if so
- * we need to add recurrence-id property to the given component */
- rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY);
- g = icalgauge_get_expand(gauge);
-
- if (rrule != 0
- && g == 1) {
-
- /* it is a recurring event */
-
- u_zone = icaltimezone_get_builtin_timezone(itr.tzid);
-
- /* use UTC, if that's all we have. */
- if (!u_zone)
- u_zone = icaltimezone_get_utc_timezone();
-
-
- recur = icalproperty_get_rrule(rrule);
-
- if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- /* Convert to the user's timezone in order to be able to compare
- * the results from the rrule iterator. */
- if (icaltime_is_utc(start)) {
- start = icaltime_convert_to_zone(start, u_zone);
- orig_time_was_utc = 1;
- }
-
- if (itr.last_component == NULL) {
- itr.ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(itr.ritr);
- itr.last_component = comp;
- }
- else {
- next = icalrecur_iterator_next(itr.ritr);
- if (icaltime_is_null_time(next)){
- itr.last_component = NULL;
- icalrecur_iterator_free(itr.ritr);
- itr.ritr = NULL;
- /* no matched occurence */
- goto getNextComp;
- } else {
- itr.last_component = comp;
- }
- }
-
- /* if it is excluded, do next one */
- if (icalproperty_recurrence_is_excluded(comp, &start, &next)) {
- icalrecur_iterator_decrement_count(itr.ritr);
- continue;
- }
-
- /* add recurrence-id value to the property if the property already exist;
- * add the recurrence id property and the value if the property does not exist */
- prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY);
- if (prop == 0)
- icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next));
- else
- icalproperty_set_recurrenceid(prop, next);
-
- /* convert the next recurrence time into the user's timezone */
- if (orig_time_was_utc)
- next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone());
-
- } /* end of a recurring event */
-
- if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) {
- /* find a matched and return it */
- itr.iter = citr;
- return itr;
- }
-
- /* if it is a recurring but no matched occurrence has been found OR
- * it is not a recurring and no matched component has been found,
- * read the next component to find out */
-getNextComp:
- if ((rrule != NULL && itr.last_component == NULL) ||
- (rrule == NULL)) {
- comp = icalcompiter_next(&citr);
- comp = icalcompiter_deref(&citr);
- }
- } /* while */
-
- /* no matched component has found */
- return icalsetiter_null;
-}
-
-icalcomponent* icalbdbset_form_a_matched_recurrence_component(icalsetiter* itr)
-{
- icalcomponent* comp = NULL;
- struct icaltimetype start, next, end;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- icaltimezone *u_zone;
- int g = 0;
- int orig_time_was_utc = 0;
-
- comp = itr->last_component;
-
- if (comp == NULL || itr->gauge == NULL) {
- return NULL;
- }
-
-
- rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY);
- /* if there is no RRULE, simply return to the caller */
- if (rrule == NULL)
- return NULL;
-
- u_zone = icaltimezone_get_builtin_timezone(itr->tzid);
-
- /* use UTC, if that's all we have. */
- if (!u_zone)
- u_zone = icaltimezone_get_utc_timezone();
-
- recur = icalproperty_get_rrule(rrule);
-
- if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- /* Convert to the user's timezone in order to be able to compare the results
- * from the rrule iterator. */
- if (icaltime_is_utc(start)) {
- start = icaltime_convert_to_zone(start, u_zone);
- orig_time_was_utc = 1;
- }
-
- if (itr->ritr == NULL) {
- itr->ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(itr->ritr);
- itr->last_component = comp;
- } else {
- next = icalrecur_iterator_next(itr->ritr);
- if (icaltime_is_null_time(next)){
- /* no more recurrence, returns */
- itr->last_component = NULL;
- icalrecur_iterator_free(itr->ritr);
- itr->ritr = NULL;
- /* no more pending matched occurence,
- * all the pending matched occurences have been returned */
- return NULL;
- } else {
- itr->last_component = comp;
- }
- }
-
- /* if it is excluded, return NULL to the caller */
- if (icalproperty_recurrence_is_excluded(comp, &start, &next)) {
- icalrecur_iterator_decrement_count(itr->ritr);
- return NULL;
- }
-
- /* set recurrence-id value to the property if the property already exist;
- * add the recurrence id property and the value if the property does not exist */
- prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY);
- if (prop == 0)
- icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next));
- else
- icalproperty_set_recurrenceid(prop, next);
-
- if (orig_time_was_utc) {
- next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone());
- }
-
-
- if (itr->gauge == 0 || icalgauge_compare(itr->gauge, comp) == 1) {
- /* find a matched and return it */
- return comp;
- }
-
- /* not matched */
- return NULL;
-
-}
-
-icalcomponent* icalbdbsetiter_to_next(icalset *set, icalsetiter* i)
-{
-
- icalcomponent* comp = NULL;
- icalbdbset *bset = (icalbdbset*) set;
- struct icaltimetype start, next, end;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- icaltimezone *u_zone;
- int g = 0;
- int orig_time_was_utc = 0;
-
- do {
-
- /* no pending occurence, read the next component */
- if (i->last_component == NULL) {
- comp = icalcompiter_next(&(i->iter));
- }
- else {
- comp = i->last_component;
- }
-
- /* no next component, simply return */
- if (comp == 0) return NULL;
- if (i->gauge == 0) return comp;
-
- /* finding the next matched component and return it to the caller */
-
- rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY);
- g = icalgauge_get_expand(i->gauge);
-
- /* a recurring component with expand query */
- if (rrule != 0
- && g == 1) {
-
- u_zone = icaltimezone_get_builtin_timezone(i->tzid);
-
- /* use UTC, if that's all we have. */
- if (!u_zone)
- u_zone = icaltimezone_get_utc_timezone();
-
- recur = icalproperty_get_rrule(rrule);
-
- if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- /* Convert to the user's timezone in order to be able to compare
- * the results from the rrule iterator. */
- if (icaltime_is_utc(start)) {
- start = icaltime_convert_to_zone(start, u_zone);
- orig_time_was_utc = 1;
- }
-
- if (i->ritr == NULL) {
- i->ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(i->ritr);
- i->last_component = comp;
- } else {
- next = icalrecur_iterator_next(i->ritr);
- if (icaltime_is_null_time(next)) {
- i->last_component = NULL;
- icalrecur_iterator_free(i->ritr);
- i->ritr = NULL;
- /* no more occurence, should go to get next component */
- continue;
- } else {
- i->last_component = comp;
- }
- }
-
- /* if it is excluded, do next one */
- if (icalproperty_recurrence_is_excluded(comp, &start, &next)) {
- icalrecur_iterator_decrement_count(i->ritr);
- continue;
- }
-
- /* set recurrence-id value to the property if the property already exist;
- * add the recurrence id property and the value if the property does not exist */
- prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY);
- if (prop == 0)
- icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next));
- else
- icalproperty_set_recurrenceid(prop, next);
-
- if (orig_time_was_utc) {
- next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone());
- }
-
- } /* end of recurring event with expand query */
-
- if(comp != 0 && (i->gauge == 0 ||
- icalgauge_compare(i->gauge, comp) == 1)){
- /* found a matched, return it */
- return comp;
- }
- } while (comp != 0);
-
- return 0;
-
-}
-
-icalcomponent* icalbdbset_get_next_component(icalset* set)
-{
- icalbdbset *bset = (icalbdbset*)set;
- icalcomponent *c=0;
-
- struct icaltimetype start, next;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- int g = 0;
-
- icalerror_check_arg_rz((bset!=0),"bset");
-
- do {
- c = icalcomponent_get_next_component(bset->cluster,
- ICAL_ANY_COMPONENT);
- if(c != 0 && (bset->gauge == 0 ||
- icalgauge_compare(bset->gauge,c) == 1)){
- return c;
- }
-
- } while(c != 0);
-
- return 0;
-}
-
-int icalbdbset_begin_transaction(DB_TXN* parent_tid, DB_TXN** tid)
-{
- return (ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, parent_tid, tid, 0));
-}
-
-int icalbdbset_commit_transaction(DB_TXN* txnid)
-{
- return (txnid->commit(txnid, 0));
-}
-
-
-static int _compare_keys(DB *dbp, const DBT *a, const DBT *b)
-{
-/*
- * Returns:
- * < 0 if a < b
- * = 0 if a = b
- * > 0 if a > b
- */
-
- char* ac = (char*)a->data;
- char* bc = (char*)b->data;
- return (strncmp(ac, bc, a->size));
-}
-
-
-
diff --git a/libical/src/libicalss/icalbdbset.h b/libical/src/libicalss/icalbdbset.h
deleted file mode 100644
index 4c278bea31..0000000000
--- a/libical/src/libicalss/icalbdbset.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalbdbset.h
- CREATOR: dml 12 December 2001
- (C) COPYRIGHT 2001, Critical Path
-
- $Id$
- $Locker$
-======================================================================*/
-
-#ifndef ICALBDBSET_H
-#define ICALBDBSET_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-#include <libicalss/icalgauge.h>
-#include <db.h>
-
-typedef struct icalbdbset_impl icalbdbset;
-
-enum icalbdbset_subdb_type {ICALBDB_CALENDARS, ICALBDB_EVENTS, ICALBDB_TODOS, ICALBDB_REMINDERS};
-typedef enum icalbdbset_subdb_type icalbdbset_subdb_type;
-
-/** sets up the db environment, should be done in parent thread.. */
-int icalbdbset_init_dbenv(char *db_env_dir, void (*logDbFunc)(const char*, char*));
-
-icalset* icalbdbset_init(icalset* set, const char *dsn, void *options);
-int icalbdbset_cleanup(void);
-void icalbdbset_checkpoint(void);
-void icalbdbset_rmdbLog(void);
-
-/** Creates a component handle. flags allows caller to
- specify if database is internally a BTREE or HASH */
-icalset * icalbdbset_new(const char* database_filename,
- icalbdbset_subdb_type subdb_type,
- int dbtype, int flag);
-
-DB * icalbdbset_bdb_open_secondary(DB *dbp,
- const char *subdb,
- const char *sindex,
- int (*callback) (DB *db,
- const DBT *dbt1,
- const DBT *dbt2,
- DBT *dbt3),
- int type);
-
-char *icalbdbset_parse_data(DBT *dbt, char *(*pfunc)(const DBT *dbt)) ;
-
-void icalbdbset_free(icalset* set);
-
-/* cursor operations */
-int icalbdbset_acquire_cursor(DB *dbp, DB_TXN* tid, DBC **rdbcp);
-int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method);
-int icalbdbset_cput(DBC *dbcp, DBT *key, DBT *data, int access_method);
-
-int icalbdbset_get_first(DBC *dbcp, DBT *key, DBT *data);
-int icalbdbset_get_next(DBC *dbcp, DBT *key, DBT *data);
-int icalbdbset_get_last(DBC *dbcp, DBT *key, DBT *data);
-int icalbdbset_get_key(DBC *dbcp, DBT *key, DBT *data);
-int icalbdbset_delete(DB *dbp, DBT *key);
-int icalbdbset_put(DB *dbp, DBT *key, DBT *data, int access_method);
-int icalbdbset_get(DB *dbp, DB_TXN *tid, DBT *key, DBT *data, int flags);
-
-const char* icalbdbset_path(icalset* set);
-const char* icalbdbset_subdb(icalset* set);
-
-/* Mark the set as changed, so it will be written to disk when it
- is freed. Commit writes to disk immediately. */
-void icalbdbset_mark(icalset* set);
-icalerrorenum icalbdbset_commit(icalset *set);
-
-icalerrorenum icalbdbset_add_component(icalset* set,
- icalcomponent* child);
-
-icalerrorenum icalbdbset_remove_component(icalset* set,
- icalcomponent* child);
-
-int icalbdbset_count_components(icalset* set,
- icalcomponent_kind kind);
-
-/* Restrict the component returned by icalbdbset_first, _next to those
- that pass the gauge. _clear removes the gauge */
-icalerrorenum icalbdbset_select(icalset* store, icalgauge* gauge);
-void icalbdbset_clear(icalset* store);
-
-/* Get and search for a component by uid */
-icalcomponent* icalbdbset_fetch(icalset* set, icalcomponent_kind kind, const char* uid);
-int icalbdbset_has_uid(icalset* set, const char* uid);
-icalcomponent* icalbdbset_fetch_match(icalset* set, icalcomponent *c);
-
-
-icalerrorenum icalbdbset_modify(icalset* set, icalcomponent *old,
- icalcomponent *newc);
-
-/* cluster management functions */
-icalerrorenum icalbdbset_set_cluster(icalset* set, icalcomponent* cluster);
-icalerrorenum icalbdbset_free_cluster(icalset* set);
-icalcomponent* icalbdbset_get_cluster(icalset* set);
-
-/* Iterate through components. If a gauge has been defined, these
- will skip over components that do not pass the gauge */
-
-icalcomponent* icalbdbset_get_current_component (icalset* set);
-icalcomponent* icalbdbset_get_first_component(icalset* set);
-icalcomponent* icalbdbset_get_next_component(icalset* set);
-
-/* External iterator for thread safety */
-icalsetiter icalbdbset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge, const char* tzid);
-
-icalcomponent* icalbdbset_form_a_matched_recurrence_component(icalsetiter* itr);
-
-icalcomponent* icalbdbsetiter_to_next(icalset* set, icalsetiter* i);
-icalcomponent* icalbdbsetiter_to_prior(icalset* set, icalsetiter* i);
-
-/* Return a reference to the internal component. You probably should
- not be using this. */
-
-icalcomponent* icalbdbset_get_component(icalset* set);
-
-DB_ENV *icalbdbset_get_env(void);
-
-
-int icalbdbset_begin_transaction(DB_TXN* parent_id, DB_TXN** txnid);
-int icalbdbset_commit_transaction(DB_TXN* txnid);
-
-DB* icalbdbset_bdb_open(const char* path,
- const char *subdb,
- int type,
- mode_t mode, int flag);
-
-
-typedef struct icalbdbset_options {
- icalbdbset_subdb_type subdb; /**< the subdatabase to open */
- int dbtype; /**< db_open type: DB_HASH | DB_BTREE */
- mode_t mode; /**< file mode */
- u_int32_t flag; /**< DB->set_flags(): DB_DUP | DB_DUPSORT */
- char *(*pfunc)(const DBT *dbt); /**< parsing function */
- int (*callback) (DB *db, /**< callback for secondary db open */
- const DBT *dbt1,
- const DBT *dbt2,
- DBT *dbt3);
-} icalbdbset_options;
-
-#endif /* !ICALBDBSET_H */
-
-
-
diff --git a/libical/src/libicalss/icalbdbset_cxx.h b/libical/src/libicalss/icalbdbset_cxx.h
deleted file mode 100644
index a80e195139..0000000000
--- a/libical/src/libicalss/icalbdbset_cxx.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalbdbset_cxx.h
- CREATOR: dml 12/12/01
- (C) COPYRIGHT 2001, Critical Path
-======================================================================*/
-
-#ifndef ICALBDBSET_CXX_H
-#define ICALBDBSET_CXX_H
-
-
-extern "C" {
-#include <libical/ical.h>
-#include <libicalss/icalgauge.h>
-}
-
-#include "vcomponent.h"
-#include <db_cxx.h>
-
-typedef char* string; // Will use the string library from STL
-
-class ICalBDBSet {
-public:
-
- ICalBDBSet();
- ICalBDBSet(const ICalBDBSet&);
- ICalBDBSet operator=(const ICalBDBSet &);
- ~ICalBDBSet();
-
- ICalBDBSet(const string& path, int flags);
-
-public:
-
- void free();
- string path();
-
- icalerrorenum add_component(VComponent* child);
- icalerrorenum remove_component(VComponent* child);
- int count_components(icalcomponent_kind kind);
-
- // Restrict the component returned by icalbdbset_first, _next to those
- // that pass the gauge. _clear removes the gauge
- icalerrorenum select(icalgauge *gauge);
- void clear();
-
- // Get and search for a component by uid
- VComponent* fetch(string &uid);
- VComponent* fetch_match(icalcomponent *c);
- int has_uid(string &uid);
-
- // Iterate through components. If a guage has been defined, these
- // will skip over components that do not pass the gauge
- VComponent* get_current_component();
- VComponent* get_first_component();
- VComponent* get_next_component();
-
- VComponent* get_component();
-
-};
-
-#endif
diff --git a/libical/src/libicalss/icalbdbsetimpl.h b/libical/src/libicalss/icalbdbsetimpl.h
deleted file mode 100644
index 9cde41b36b..0000000000
--- a/libical/src/libicalss/icalbdbsetimpl.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalbdbsetimpl.h
- CREATOR: dml 12 December 2001
- (C) COPYRIGHT 2001, Critical Path
-
- $Id$
- $Locker$
- ======================================================================*/
-
-#ifndef ICALBDBSETIMPL_H
-#define ICALBDBSETIMPL_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libicalss/icalgauge.h>
-#include <db.h>
-
-/* This definition is in its own file so it can be kept out of the
- main header file, but used by "friend classes" like icaldirset*/
-
-struct icalbdbset_impl {
- icalset super; /**< parent class */
- const char *path;
- const char *subdb;
- const char *sindex;
- const char *key;
- void *data;
- int datasize;
- int changed;
- icalcomponent* cluster;
- icalgauge* gauge;
- DB_ENV *dbenv;
- DB *dbp;
- DB *sdbp;
- DBC *dbcp;
-};
-
-#endif
diff --git a/libical/src/libicalss/icalcalendar.c b/libical/src/libicalss/icalcalendar.c
deleted file mode 100644
index 1f24f88db6..0000000000
--- a/libical/src/libicalss/icalcalendar.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*======================================================================
- FILE: icalcalendar.c
- CREATOR: eric 23 December 1999
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-#include "icalcalendar.h"
-#include "icalset.h"
-#include "icalfileset.h"
-#include "icaldirset.h"
-#include <limits.h>
-#include <sys/stat.h> /* For mkdir, stat */
-#include <sys/types.h> /* For mkdir */
-#include <fcntl.h> /* For mkdir */
-
-#ifndef WIN32
-#include <unistd.h> /* For mkdir, stat */
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 512
-#endif
-
-
-#include <stdlib.h> /* for malloc */
-#include <string.h> /* for strcat */
-#include <errno.h>
-
-#define BOOKED_DIR "booked"
-#define INCOMING_FILE "incoming.ics"
-#define PROP_FILE "properties.ics"
-#define FBLIST_FILE "freebusy.ics"
-
-struct icalcalendar_impl
-{
- char* dir;
- icalset* freebusy;
- icalset* properties;
- icalset* booked;
- icalset* incoming;
-};
-
-struct icalcalendar_impl* icalcalendar_new_impl(void)
-{
- struct icalcalendar_impl* impl;
-
- if ( ( impl = (struct icalcalendar_impl*)
- malloc(sizeof(struct icalcalendar_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- return impl;
-}
-
-
-icalerrorenum icalcalendar_create(struct icalcalendar_impl* impl)
-{
- char path[PATH_MAX];
- struct stat sbuf;
- int r;
-
- icalerror_check_arg_re((impl != 0),"impl",ICAL_BADARG_ERROR);
-
- path[0] = '\0';
- strcpy(path,impl->dir);
- strcat(path,"/");
- strcat(path,BOOKED_DIR);
-
- r = stat(path,&sbuf);
-
- if( r != 0 && errno == ENOENT){
-
- if(mkdir(path,0777)!=0){
- icalerror_set_errno(ICAL_FILE_ERROR);
- return ICAL_FILE_ERROR;
- }
- }
-
- return ICAL_NO_ERROR;
-}
-
-icalcalendar* icalcalendar_new(char* dir)
-{
- struct icalcalendar_impl* impl;
-
- icalerror_check_arg_rz((dir != 0),"dir");
-
- impl = icalcalendar_new_impl();
-
- if (impl == 0){
- return 0;
- }
-
- impl->dir = (char*)strdup(dir);
- impl->freebusy = 0;
- impl->properties = 0;
- impl->booked = 0;
- impl->incoming = 0;
-
- if (icalcalendar_create(impl) != ICAL_NO_ERROR){
- free(impl);
- return 0;
- }
-
- return impl;
-}
-
-void icalcalendar_free(icalcalendar* impl)
-{
- if (impl->dir !=0){
- free(impl->dir);
- }
-
- if (impl->freebusy !=0){
- icalset_free(impl->booked);
- }
-
- if (impl->properties !=0){
- icalset_free(impl->properties);
- }
-
- if (impl->booked !=0){
- icalset_free(impl->booked);
- }
-
- if (impl->incoming !=0){
- icalset_free(impl->incoming);
- }
-
- impl->dir = 0;
- impl->freebusy = 0;
- impl->properties = 0;
- impl->booked = 0;
- impl->incoming = 0;
-
-
- free(impl);
-}
-
-
-int icalcalendar_lock(icalcalendar* impl)
-{
- icalerror_check_arg_rz((impl != 0),"impl");
- return 0;
-}
-
-int icalcalendar_unlock(icalcalendar* impl)
-{
- icalerror_check_arg_rz((impl != 0),"impl");
- return 0;
-}
-
-int icalcalendar_islocked(icalcalendar* impl)
-{
- icalerror_check_arg_rz((impl != 0),"impl");
- return 0;
-}
-
-int icalcalendar_ownlock(icalcalendar* impl)
-{
- icalerror_check_arg_rz((impl != 0),"impl");
- return 0;
-}
-
-icalset* icalcalendar_get_booked(icalcalendar* impl)
-{
- char dir[PATH_MAX];
-
- icalerror_check_arg_rz((impl != 0),"impl");
-
- dir[0] = '\0';
- strcpy(dir,impl->dir);
- strcat(dir,"/");
- strcat(dir,BOOKED_DIR);
-
- if (impl->booked == 0){
- icalerror_clear_errno();
- impl->booked = icaldirset_new(dir);
- assert(icalerrno == ICAL_NO_ERROR);
- }
-
- return impl->booked;
-
-}
-
-icalset* icalcalendar_get_incoming(icalcalendar* impl)
-{
- char path[PATH_MAX];
- icalerror_check_arg_rz((impl != 0),"impl");
-
- path[0] = '\0';
- strcpy(path,impl->dir);
- strcat(path,"/");
- strcat(path,INCOMING_FILE);
-
- if (impl->properties == 0){
- impl->properties = icalfileset_new(path);
- }
-
- return impl->properties;
-}
-
-icalset* icalcalendar_get_properties(icalcalendar* impl)
-{
- char path[PATH_MAX];
- icalerror_check_arg_rz((impl != 0),"impl");
-
- path[0] = '\0';
- strcpy(path,impl->dir);
- strcat(path,"/");
- strcat(path,PROP_FILE);
-
- if (impl->properties == 0){
- impl->properties = icalfileset_new(path);
- }
-
- return impl->properties;
-}
-
-icalset* icalcalendar_get_freebusy(icalcalendar* impl)
-{
- char path[PATH_MAX];
- icalerror_check_arg_rz((impl != 0),"impl");
-
- path[0] = '\0';
- strcpy(path,impl->dir);
- strcat(path,"/");
- strcat(path,FBLIST_FILE);
-
-
- if (impl->freebusy == 0){
- impl->freebusy = icalfileset_new(path);
- }
-
- return impl->freebusy;
-}
-
-
-
-
diff --git a/libical/src/libicalss/icalcalendar.h b/libical/src/libicalss/icalcalendar.h
deleted file mode 100644
index 62abdfa7c0..0000000000
--- a/libical/src/libicalss/icalcalendar.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcalendar.h
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALCALENDAR_H
-#define ICALCALENDAR_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-
-/* icalcalendar
- * Routines for storing calendar data in a file system. The calendar
- * has two icaldirsets, one for incoming components and one for booked
- * components. It also has interfaces to access the free/busy list
- * and a list of calendar properties */
-
-typedef struct icalcalendar_impl icalcalendar;
-
-icalcalendar* icalcalendar_new(char* dir);
-
-void icalcalendar_free(icalcalendar* calendar);
-
-int icalcalendar_lock(icalcalendar* calendar);
-
-int icalcalendar_unlock(icalcalendar* calendar);
-
-int icalcalendar_islocked(icalcalendar* calendar);
-
-int icalcalendar_ownlock(icalcalendar* calendar);
-
-icalset* icalcalendar_get_booked(icalcalendar* calendar);
-
-icalset* icalcalendar_get_incoming(icalcalendar* calendar);
-
-icalset* icalcalendar_get_properties(icalcalendar* calendar);
-
-icalset* icalcalendar_get_freebusy(icalcalendar* calendar);
-
-
-#endif /* !ICALCALENDAR_H */
-
-
-
diff --git a/libical/src/libicalss/icalcaputil.h b/libical/src/libicalss/icalcaputil.h
deleted file mode 100644
index 4f9bcb31c4..0000000000
--- a/libical/src/libicalss/icalcaputil.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalutil.h
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- =========================================================================*/
-
-
-/* Create new components that have a form suitable for the various
- iTIP trasactions */
-
-/* Scheduling commands */
-icalcomponent* icalcaputil_new_accept_reply(icalcomponent* comp, char* calid);
-icalcomponent* icalcaputil_new_decline_reply(icalcomponent* comp, char* calid);
-icalcomponent* icalcaputil_new_refresh(icalcomponent* comp, char* calid);
-icalcomponent* icalcaputil_new_cancel(icalcomponent* comp);
-icalcomponent* icalcaputil_new_counter(icalcomponent* comp);
-icalcomponent* icalcaputil_new_declinecounter(icalcomponent* comp);
-
-/* Calendaring commands */
-icalcomponent* icalcaputil_new_create();
-icalcomponent* icalcaputil_new_delete();
-icalcomponent* icalcaputil_new_modify();
-icalerrorenum* icalcaputil_modify_add_old_prop(icalcomponent* c,
- icalproperty *p);
-icalerrorenum* icalcaputil_modify_add_new_prop(icalcomponent* c,
- icalproperty *p);
-icalerrorenum* icalcaputil_add_query(icalcomponent* c, char* str);
-
-
-icalcomponent* icalcaputil_new_move();
-icalcomponent* icalcaputil_new_read();
-
-icalerrorenum icalcaputil_add_target(icalcomponent* comp,char* target);
-icalerrorenum icalcaputil_add_to_vcar(icalcomponent* comp,char* target);
-
-
-
-
-
diff --git a/libical/src/libicalss/icalclassify.c b/libical/src/libicalss/icalclassify.c
deleted file mode 100644
index e67287bc1b..0000000000
--- a/libical/src/libicalss/icalclassify.c
+++ /dev/null
@@ -1,754 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalclassify.c
- CREATOR: ebusboom 23 aug 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libical/ical.h>
-#include "icalclassify.h"
-#include <libical/icalmemory.h>
-
-#include <ctype.h> /* For tolower() */
-#include <string.h> /* for index() */
-#include <stdlib.h> /* for malloc and free */
-
-
-
-struct icalclassify_parts {
- icalcomponent *c;
- icalcomponent_kind inner_kind;
- icalproperty_method method;
- char* organizer;
- icalparameter_partstat reply_partstat;
- char* reply_attendee;
- char* uid;
- int sequence;
- struct icaltimetype dtstamp;
- struct icaltimetype recurrence_id;
-};
-
-
-char* icalclassify_lowercase(const char* str)
-{
- char* p = 0;
- char* new = icalmemory_strdup(str);
-
- if(str ==0){
- return 0;
- }
-
- for(p = new; *p!=0; p++){
- *p = tolower(*p);
- }
-
- return new;
-}
-
-/* Return a set of components that intersect in time with comp. For
-component X and Y to intersect:
- X.DTSTART < Y.DTEND && X.DTEND > Y.DTSTART
-*/
-
-
-icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp)
-{
- icalcomponent *return_set;
- icalcomponent *c;
- struct icaltime_span span,compspan;
-
- icalerror_clear_errno();
- compspan = icalcomponent_get_span(comp);
-
- if(icalerrno != ICAL_NO_ERROR){
- return 0;
- }
-
-
- return_set = icalcomponent_new(ICAL_XROOT_COMPONENT);
-
- for(c = icalset_get_first_component(set);
- c != 0;
- c = icalset_get_next_component(set)){
-
- icalerror_clear_errno();
-
- span = icalcomponent_get_span(c);
-
- if(icalerrno != ICAL_NO_ERROR){
- continue;
- }
-
- if (compspan.start < span.end &&
- compspan.end > span.start){
-
- icalcomponent *clone = icalcomponent_new_clone(c);
-
- icalcomponent_add_component(return_set,clone);
- }
- }
-
- if(icalcomponent_count_components(return_set,ICAL_ANY_COMPONENT) !=0){
- return return_set;
- } else {
- icalcomponent_free(return_set);
- return 0;
- }
-}
-
-
-
-icalproperty* icalclassify_find_attendee(icalcomponent *c,
- const char* attendee)
-{
- icalproperty *p;
- icalcomponent* inner;
- char* lattendee;
- char* upn;
-
- if(attendee == 0){
- return 0;
- }
-
- lattendee = icalclassify_lowercase(attendee);
- upn = strchr(lattendee,':');
-
- if (upn== 0){
- upn = lattendee;
- } else {
- upn++; /* skip the ";"*/
- }
-
- inner = icalcomponent_get_first_real_component(c);
-
- for(p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(inner,ICAL_ATTENDEE_PROPERTY))
- {
- char* this_attendee
- = icalclassify_lowercase(icalproperty_get_attendee(p));
- char* this_upn = strchr(this_attendee,':');
-
- if(this_upn == 0){
- continue;
- } else {
- this_upn++;
- }
-
- if(strcmp(this_upn,upn)==0){
- free(lattendee);
- free(this_attendee);
- return p;
- }
-
- free(this_attendee);
- }
- free(lattendee);
-
- return 0;
-
-}
-
-void icalssutil_free_parts(struct icalclassify_parts *parts)
-{
- if(parts == 0){
- return;
- }
-
- if(parts->organizer != 0){
- free(parts->organizer);
- }
-
- if(parts->uid != 0){
- free(parts->uid);
- }
-
- if(parts->reply_attendee){
- free(parts->reply_attendee);
- }
-}
-
-void icalssutil_get_parts(icalcomponent* c,
- struct icalclassify_parts* parts)
-{
- icalproperty *p;
- icalcomponent *inner;
-
- memset(parts,0,sizeof(struct icalclassify_parts));
-
- parts->method = ICAL_METHOD_NONE;
- parts->sequence = 0;
- parts->reply_partstat = ICAL_PARTSTAT_NONE;
-
- if(c == 0){
- return;
- }
-
- parts->c = c;
-
- p = icalcomponent_get_first_property(c,ICAL_METHOD_PROPERTY);
- if(p!=0){
- parts->method = icalproperty_get_method(p);
- }
-
- inner = icalcomponent_get_first_real_component(c);
-
- parts->inner_kind = icalcomponent_isa(inner);
-
- p = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY);
- if(p!=0){
- parts->organizer = strdup(icalproperty_get_organizer(p));
- }
-
- p = icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY);
- if(p!=0){
- parts->sequence = icalproperty_get_sequence(p);
- }
-
- p = icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY);
- if(p!=0){
- parts->uid = strdup(icalproperty_get_uid(p));
- }
-
- p = icalcomponent_get_first_property(inner,ICAL_RECURRENCEID_PROPERTY);
- if(p!=0){
- parts->recurrence_id = icalproperty_get_recurrenceid(p);
- }
-
- p = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY);
- if(p!=0){
- parts->dtstamp = icalproperty_get_dtstamp(p);
- }
-
- if(parts->method==ICAL_METHOD_REPLY){
- icalparameter *param;
- p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY);
-
- if(p!=0){
-
- param = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER);
-
- if(param != 0){
- parts->reply_partstat =
- icalparameter_get_partstat(param);
- }
-
- parts->reply_attendee = strdup(icalproperty_get_attendee(p));
- }
-
- }
-
-
-}
-
-
-int icalssutil_is_rescheduled(icalcomponent* a,icalcomponent* b)
-{
- icalproperty *p1,*p2;
- icalcomponent *i1,*i2;
- int i;
-
- icalproperty_kind kind_array[] = {
- ICAL_DTSTART_PROPERTY,
- ICAL_DTEND_PROPERTY,
- ICAL_DURATION_PROPERTY,
- ICAL_DUE_PROPERTY,
- ICAL_RRULE_PROPERTY,
- ICAL_RDATE_PROPERTY,
- ICAL_EXRULE_PROPERTY,
- ICAL_EXDATE_PROPERTY,
- ICAL_NO_PROPERTY
- };
-
- i1 = icalcomponent_get_first_real_component(a);
- i2 = icalcomponent_get_first_real_component(b);
-
- for(i =0; kind_array[i] != ICAL_NO_PROPERTY; i++){
- p1 = icalcomponent_get_first_property(i1,kind_array[i]);
- p2 = icalcomponent_get_first_property(i2,kind_array[i]);
-
- if( (p1!=0)^(p2!=0) ){
- /* Return true if the property exists in one component and not
- the other */
- return 1;
- }
-
- if(p1 && strcmp(icalproperty_as_ical_string(p1),
- icalproperty_as_ical_string(p2)) != 0){
- return 1;
- }
- }
-
- return 0;
-
-}
-
-#define icalclassify_pre \
- int rtrn =0;
-
-#define icalclassify_post \
- return rtrn;
-
-
-int icalclassify_publish_new(struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre;
-
- if(comp->method == ICAL_METHOD_PUBLISH &&
- match == 0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){
- rtrn = 1;
- }
-
- icalclassify_post;
-
-}
-
-int icalclassify_publish_update(struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre;
-
- if(comp->method == ICAL_METHOD_PUBLISH &&
- match !=0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){
- rtrn = 1;
- }
-
- icalclassify_post;
-
-}
-
-int icalclassify_publish_freebusy(struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre;
-
- if(comp->method == ICAL_METHOD_PUBLISH &&
- comp->inner_kind == ICAL_VFREEBUSY_COMPONENT){
- rtrn = 1;
- }
-
- icalclassify_post;
-
-}
-
-
-int icalclassify_request_new(struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- /* Method is REQUEST, and there is no match */
-
- icalclassify_pre
-
- if(match->c==0 && comp->method == ICAL_METHOD_REQUEST){
- rtrn = 1;
- }
-
- icalclassify_post
-
-}
-
-int icalclassify_request_update(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- /* REQUEST method, Higher SEQUENCE than match, and all
- time-related properties are unchanged */
-
- icalclassify_pre
-
- if (match != 0 &&
- comp->sequence >= match->sequence &&
- !icalssutil_is_rescheduled(comp->c,match->c)){
- rtrn = 1;
- }
-
- icalclassify_post
-
-}
-
-int icalclassify_request_reschedule(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- /* REQUEST method, Higher SEQUENCE than match, and one or more
- time-related properties are changed */
- icalclassify_pre
-
- if (match->c != 0 &&
- comp->sequence > match->sequence &&
- icalssutil_is_rescheduled(comp->c,match->c)){
- rtrn = 1;
- }
-
- icalclassify_post
-
-}
-
-int icalclassify_request_delegate(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalparameter* param;
- icalclassify_pre;
-
- attendee = icalclassify_find_attendee(comp->c,user);
-
- if(attendee == 0){
- return 0;
- }
-
- param = icalproperty_get_first_parameter(attendee,ICAL_DELEGATEDFROM_PARAMETER);
-
- if (param != 0){
- rtrn = 1;
- }
-
- icalclassify_post
-
-}
-
-int icalclassify_request_new_organizer(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- /* Organizer has changed between match and component */
- icalclassify_pre
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- icalclassify_post
-
-}
-
-int icalclassify_request_status(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- icalclassify_post
-}
-
-int icalclassify_request_forward(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- icalclassify_post
-}
-
-int icalclassify_request_freebusy(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- icalclassify_post
-}
-
-int icalclassify_reply_accept(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalclassify_pre;
-
- attendee = icalclassify_find_attendee(match->c,comp->reply_attendee);
-
- if(attendee != 0&&
- comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){
- rtrn = 1;
- }
-
- icalclassify_post
-}
-int icalclassify_reply_decline(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalclassify_pre;
-
- attendee = icalclassify_find_attendee(match->c,comp->reply_attendee);
-
-
- if( attendee != 0 &&
- comp->reply_partstat == ICAL_PARTSTAT_DECLINED){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_reply_delegate(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalclassify_pre;
-
- attendee = icalclassify_find_attendee(match->c,comp->reply_attendee);
-
- if( attendee != 0 &&
- comp->reply_partstat == ICAL_PARTSTAT_DELEGATED){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_reply_crasher_accept(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalclassify_pre;
-
- attendee= icalclassify_find_attendee(match->c,comp->reply_attendee);
-
- if(attendee == 0 &&
- comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_reply_crasher_decline(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalproperty* attendee;
- icalclassify_pre;
-
-
- attendee = icalclassify_find_attendee(match->c,comp->reply_attendee);
-
- if(attendee == 0 &&
- comp->reply_partstat == ICAL_PARTSTAT_DECLINED){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_add_instance(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_ADD){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_cancel_event(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_CANCEL){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_cancel_instance(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_CANCEL){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_cancel_all(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_CANCEL){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_refesh(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_REFRESH){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_counter(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
- if(comp->method == ICAL_METHOD_COUNTER){
- rtrn = 1;
- }
- icalclassify_post
-}
-int icalclassify_delinecounter(
- struct icalclassify_parts *comp,
- struct icalclassify_parts *match,
- const char* user)
-{
- icalclassify_pre
-
- if(comp->method == ICAL_METHOD_DECLINECOUNTER){
- rtrn = 1;
- }
-
- icalclassify_post
-}
-
-struct icalclassify_map {
- icalproperty_method method;
- int (*fn)(struct icalclassify_parts *comp,struct icalclassify_parts *match, const char* user);
- icalproperty_xlicclass class;
-} icalclassify_map[] =
-{ {ICAL_METHOD_PUBLISH,icalclassify_publish_new,ICAL_XLICCLASS_PUBLISHNEW},
- {ICAL_METHOD_PUBLISH,icalclassify_publish_update,ICAL_XLICCLASS_PUBLISHUPDATE},
- {ICAL_METHOD_PUBLISH,icalclassify_publish_freebusy,ICAL_XLICCLASS_PUBLISHFREEBUSY},
- {ICAL_METHOD_REQUEST,icalclassify_request_delegate,ICAL_XLICCLASS_REQUESTDELEGATE},
- {ICAL_METHOD_REQUEST,icalclassify_request_new,ICAL_XLICCLASS_REQUESTNEW},
- {ICAL_METHOD_REQUEST,icalclassify_request_update,ICAL_XLICCLASS_REQUESTUPDATE},
- {ICAL_METHOD_REQUEST,icalclassify_request_reschedule,ICAL_XLICCLASS_REQUESTRESCHEDULE},
-
- {ICAL_METHOD_REQUEST,icalclassify_request_new_organizer,ICAL_XLICCLASS_REQUESTNEWORGANIZER},
- {ICAL_METHOD_REQUEST,icalclassify_request_forward,ICAL_XLICCLASS_REQUESTFORWARD},
- {ICAL_METHOD_REQUEST,icalclassify_request_status,ICAL_XLICCLASS_REQUESTSTATUS},
- {ICAL_METHOD_REQUEST,icalclassify_request_freebusy,ICAL_XLICCLASS_REQUESTFREEBUSY},
-
- {ICAL_METHOD_REPLY,icalclassify_reply_accept,ICAL_XLICCLASS_REPLYACCEPT},
- {ICAL_METHOD_REPLY,icalclassify_reply_decline,ICAL_XLICCLASS_REPLYDECLINE},
- {ICAL_METHOD_REPLY,icalclassify_reply_delegate,ICAL_XLICCLASS_REPLYDELEGATE},
- {ICAL_METHOD_REPLY,icalclassify_reply_crasher_accept,ICAL_XLICCLASS_REPLYCRASHERACCEPT},
- {ICAL_METHOD_REPLY,icalclassify_reply_crasher_decline,ICAL_XLICCLASS_REPLYCRASHERDECLINE},
-
- {ICAL_METHOD_ADD,icalclassify_add_instance,ICAL_XLICCLASS_ADDINSTANCE},
-
- {ICAL_METHOD_CANCEL,icalclassify_cancel_event,ICAL_XLICCLASS_CANCELEVENT},
- {ICAL_METHOD_CANCEL,icalclassify_cancel_instance,ICAL_XLICCLASS_CANCELINSTANCE},
- {ICAL_METHOD_CANCEL,icalclassify_cancel_all,ICAL_XLICCLASS_CANCELALL},
-
- {ICAL_METHOD_REFRESH,icalclassify_refesh,ICAL_XLICCLASS_REFRESH},
- {ICAL_METHOD_COUNTER,icalclassify_counter,ICAL_XLICCLASS_COUNTER},
- {ICAL_METHOD_DECLINECOUNTER,icalclassify_delinecounter,ICAL_XLICCLASS_DECLINECOUNTER},
- {ICAL_METHOD_NONE,0,ICAL_XLICCLASS_NONE}
-};
-
-
-icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match,
- const char* user)
-{
- icalcomponent *inner;
- icalproperty *p;
- icalproperty_method method;
- icalproperty_xlicclass class = ICAL_XLICCLASS_UNKNOWN;
-
- int i;
-
- struct icalclassify_parts comp_parts;
- struct icalclassify_parts match_parts;
-
- inner = icalcomponent_get_first_real_component(c);
-
- if (inner == 0) {
- return ICAL_XLICCLASS_NONE;
- }
-
- icalssutil_get_parts(c,&comp_parts);
- icalssutil_get_parts(match,&match_parts);
-
- /* Determine if the incoming component is obsoleted by the match */
- if(match != 0 && (
- comp_parts.method == ICAL_METHOD_REQUEST
- )){
- assert ( ! ((comp_parts.dtstamp.is_utc==1)^
- (match_parts.dtstamp.is_utc==1)));
-
- if( comp_parts.sequence<match_parts.sequence &&
- icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)>0)
- {
- /* comp has a smaller sequence and a later DTSTAMP */
- class = ICAL_XLICCLASS_MISSEQUENCED;
- goto CLEANUP;
- }
-
- if( (comp_parts.sequence<match_parts.sequence )
- /*&&icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)<=0*/
- ||
- ( comp_parts.sequence == match_parts.sequence &&
- icaltime_compare(comp_parts.dtstamp,match_parts.dtstamp)<=0)){
-
- class = ICAL_XLICCLASS_OBSOLETE;
- goto CLEANUP;
- }
-
- }
-
- p = icalcomponent_get_first_property(c,ICAL_METHOD_PROPERTY);
- if (p == 0) {
- class = ICAL_XLICCLASS_UNKNOWN;
- goto CLEANUP;
- }
- method = icalproperty_get_method(p);
-
- for (i =0; icalclassify_map[i].method != ICAL_METHOD_NONE; i++){
- if(icalclassify_map[i].method == method){
- if( (*(icalclassify_map[i].fn))(&comp_parts,&match_parts,user)==1){
- class = icalclassify_map[i].class;
- break;
- }
- }
- }
-
-CLEANUP:
- icalssutil_free_parts(&comp_parts);
- icalssutil_free_parts(&match_parts);
-
- return class;
-
-}
-
diff --git a/libical/src/libicalss/icalclassify.h b/libical/src/libicalss/icalclassify.h
deleted file mode 100644
index 19021e8dd2..0000000000
--- a/libical/src/libicalss/icalclassify.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalclassify.h
- CREATOR: eric 21 Aug 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- =========================================================================*/
-
-#ifndef ICALCLASSIFY_H
-#define ICALCLASSIFY_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-
-icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match,
- const char* user);
-
-icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp);
-
-char* icalclassify_class_to_string(icalproperty_xlicclass c);
-
-
-#endif /* ICALCLASSIFY_H*/
-
-
-
-
-
diff --git a/libical/src/libicalss/icalcluster.c b/libical/src/libicalss/icalcluster.c
deleted file mode 100644
index 6d11078a72..0000000000
--- a/libical/src/libicalss/icalcluster.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalcluster.c
- CREATOR: acampi 13 March 2002
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2002, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-
-/**
- *
- * icalcluster is an utility class design to manage clusters of
- * icalcomponents on behalf of an implementation of icalset. This is
- * done in order to split out common behavior different classes might
- * need.
- * The definition of what exactly a cluster will contain depends on the
- * icalset subclass. At the basic level, an icluster is just a tuple,
- * with anything as key and an icalcomponent as value.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if 0
-#include <errno.h>
-#include <sys/stat.h> /* for stat */
-#ifndef WIN32
-#include <unistd.h> /* for stat, getpid */
-#else
-#include <io.h>
-#include <share.h>
-#endif
-#include <fcntl.h> /* for fcntl */
-#endif
-
-#include "icalcluster.h"
-#include "icalclusterimpl.h"
-#include "icalgauge.h"
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-
-icalcluster * icalcluster_new_impl(void) {
-
- struct icalcluster_impl* impl;
-
- if ((impl = (struct icalcluster_impl*)malloc(
- sizeof(struct icalcluster_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(impl, 0, sizeof(struct icalcluster_impl));
- strcpy(impl->id,ICALCLUSTER_ID);
-
- return impl;
-}
-
-/**
- * Create a cluster with a key/value pair.
- *
- * @todo Always do a deep copy.
- */
-
-icalcluster * icalcluster_new(const char* key, icalcomponent *data) {
- struct icalcluster_impl *impl = icalcluster_new_impl();
- assert(impl->data == 0);
-
- impl->key = strdup(key);
- impl->changed = 0;
- impl->data = 0;
-
- if (data != NULL) {
- if (icalcomponent_isa(data) != ICAL_XROOT_COMPONENT) {
- impl->data = icalcomponent_new(ICAL_XROOT_COMPONENT);
- icalcomponent_add_component(impl->data, data);
- } else {
- impl->data = icalcomponent_new_clone(data);
- }
- } else {
- impl->data = icalcomponent_new(ICAL_XROOT_COMPONENT);
- }
-
- return impl;
-}
-
-/**
- * Deep clone an icalcluster to a new one
- */
-
-icalcluster *icalcluster_new_clone(const icalcluster *data) {
- struct icalcluster_impl *old = (struct icalcluster_impl *)data;
- struct icalcluster_impl *impl = icalcluster_new_impl();
-
- impl->key = strdup(old->key);
- impl->data = icalcomponent_new_clone(old->data);
- impl->changed = 0;
-
- return impl;
-}
-
-
-void icalcluster_free(icalcluster *impl) {
- icalerror_check_arg_rv((impl!=0),"cluster");
-
- if (impl->key != 0){
- free(impl->key);
- impl->key = 0;
- }
-
- if (impl->data != 0){
- icalcomponent_free(impl->data);
- impl->data = 0;
- }
-
- free(impl);
-}
-
-
-const char *icalcluster_key(icalcluster *impl) {
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- return impl->key;
-}
-
-
-int icalcluster_is_changed(icalcluster *impl) {
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- return impl->changed;
-}
-
-
-void icalcluster_mark(icalcluster *impl) {
- icalerror_check_arg_rv((impl!=0),"cluster");
-
- impl->changed = 1;
-}
-
-
-void icalcluster_commit(icalcluster *impl) {
- icalerror_check_arg_rv((impl!=0),"cluster");
-
- impl->changed = 0;
-}
-
-
-icalcomponent *icalcluster_get_component(icalcluster *impl) {
-
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- if (icalcomponent_isa(impl->data) != ICAL_XROOT_COMPONENT) {
- icalerror_warn("The top component is not an XROOT");
- fprintf(stderr, "%s\n", icalcomponent_as_ical_string(impl->data));
- abort();
- }
-
- return impl->data;
-}
-
-
-icalerrorenum icalcluster_add_component(icalcluster *impl, icalcomponent* child) {
-
- icalerror_check_arg_re((impl!=0),"cluster", ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_add_component(impl->data, child);
- icalcluster_mark(impl);
-
- return ICAL_NO_ERROR;
-}
-
-
-icalerrorenum icalcluster_remove_component(icalcluster *impl, icalcomponent* child) {
-
- icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_remove_component(impl->data,child);
- icalcluster_mark(impl);
-
- return ICAL_NO_ERROR;
-}
-
-
-int icalcluster_count_components(icalcluster *impl, icalcomponent_kind kind) {
-
- icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR);
-
- return icalcomponent_count_components(impl->data, kind);
-}
-
-
-/** Iterate through components **/
-icalcomponent *icalcluster_get_current_component(icalcluster* impl) {
-
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- return icalcomponent_get_current_component(impl->data);
-}
-
-
-icalcomponent *icalcluster_get_first_component(icalcluster* impl) {
-
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- return icalcomponent_get_first_component(impl->data,
- ICAL_ANY_COMPONENT);
-}
-
-
-icalcomponent *icalcluster_get_next_component(icalcluster* impl) {
-
- icalerror_check_arg_rz((impl!=0),"cluster");
-
- return icalcomponent_get_next_component(impl->data,
- ICAL_ANY_COMPONENT);
-}
diff --git a/libical/src/libicalss/icalcluster.h b/libical/src/libicalss/icalcluster.h
deleted file mode 100644
index e13bb0425c..0000000000
--- a/libical/src/libicalss/icalcluster.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcluster.h
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALCLUSTER_H
-#define ICALCLUSTER_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-
-typedef struct icalcluster_impl icalcluster;
-
-icalcluster* icalcluster_new(const char *key, icalcomponent *data);
-icalcluster* icalcluster_new_clone(const icalcluster *cluster);
-
-void icalcluster_free(icalcluster *cluster);
-
-const char* icalcluster_key(icalcluster *cluster);
-int icalcluster_is_changed(icalcluster *cluster);
-void icalcluster_mark(icalcluster *cluster);
-void icalcluster_commit(icalcluster *cluster);
-
-icalcomponent* icalcluster_get_component(icalcluster* cluster);
-int icalcluster_count_components(icalcluster *cluster, icalcomponent_kind kind);
-icalerrorenum icalcluster_add_component(icalcluster* cluster,
- icalcomponent* child);
-icalerrorenum icalcluster_remove_component(icalcluster* cluster,
- icalcomponent* child);
-
-icalcomponent* icalcluster_get_current_component(icalcluster* cluster);
-icalcomponent* icalcluster_get_first_component(icalcluster* cluster);
-icalcomponent* icalcluster_get_next_component(icalcluster* cluster);
-
-#endif /* !ICALCLUSTER_H */
-
-
-
diff --git a/libical/src/libicalss/icalclusterimpl.h b/libical/src/libicalss/icalclusterimpl.h
deleted file mode 100644
index ef80e1af81..0000000000
--- a/libical/src/libicalss/icalclusterimpl.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalfilesetimpl.h
- CREATOR: eric 23 December 1999
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* This definition is in its own file so it can be kept out of the
- main header file, but used by "friend classes" like icaldirset*/
-
-#define ICALCLUSTER_ID "clus"
-
-struct icalcluster_impl {
-
- char id[5]; /* clus */
-
- char *key;
- icalcomponent *data;
- int changed;
-};
diff --git a/libical/src/libicalss/icalcomponent.h b/libical/src/libicalss/icalcomponent.h
deleted file mode 100644
index 38025813e1..0000000000
--- a/libical/src/libicalss/icalcomponent.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcomponent.h
- CREATOR: eric 20 March 1999
-
-
- (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
- The original code is icalcomponent.h
-
-======================================================================*/
-
-#ifndef ICALCOMPONENT_H
-#define ICALCOMPONENT_H
-
-#include <libicalss/icalproperty.h>
-#include <libicalss/icalvalue.h>
-#include <libicalss/icalenums.h> /* defines icalcomponent_kind */
-
-typedef void icalcomponent;
-
-icalcomponent* icalcomponent_new(icalcomponent_kind kind);
-icalcomponent* icalcomponent_new_clone(icalcomponent* component);
-icalcomponent* icalcomponent_new_from_string(char* str);
-icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...);
-void icalcomponent_free(icalcomponent* component);
-
-char* icalcomponent_as_ical_string(icalcomponent* component);
-
-int icalcomponent_is_valid(icalcomponent* component);
-
-icalcomponent_kind icalcomponent_isa(icalcomponent* component);
-
-int icalcomponent_isa_component (void* component);
-
-/*
- * Working with properties
- */
-
-void icalcomponent_add_property(icalcomponent* component,
- icalproperty* property);
-
-void icalcomponent_remove_property(icalcomponent* component,
- icalproperty* property);
-
-int icalcomponent_count_properties(icalcomponent* component,
- icalproperty_kind kind);
-
-/* Iterate through the properties */
-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);
-
-/* Return a null-terminated array of icalproperties*/
-
-icalproperty** icalcomponent_get_properties(icalcomponent* component,
- icalproperty_kind kind);
-
-
-/*
- * Working with components
- */
-
-
-void icalcomponent_add_component(icalcomponent* parent,
- icalcomponent* child);
-
-void icalcomponent_remove_component(icalcomponent* parent,
- icalcomponent* child);
-
-int icalcomponent_count_components(icalcomponent* component,
- icalcomponent_kind kind);
-
-/* Iterate through components */
-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);
-
-/* Return a null-terminated array of icalproperties*/
-icalproperty** icalcomponent_get_component(icalcomponent* component,
- icalproperty_kind kind);
-
-/* Working with embedded error properties */
-
-int icalcomponent_count_errors(icalcomponent* component);
-void icalcomponent_strip_errors(icalcomponent* component);
-
-
-/* Internal operations. You don't see these... */
-icalcomponent* icalcomponent_get_parent(icalcomponent* component);
-void icalcomponent_set_parent(icalcomponent* component,
- icalcomponent* parent);
-
-#endif /* !ICALCOMPONENT_H */
-
-
-
diff --git a/libical/src/libicalss/icalcsdb.h b/libical/src/libicalss/icalcsdb.h
deleted file mode 100644
index 109d6fa73a..0000000000
--- a/libical/src/libicalss/icalcsdb.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcsdb.h Calendar Server Database
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
-======================================================================*/
-
-#ifndef ICALCSDB_H
-#define ICALCSDB_H
-
-#include <libical/ical.h>
-
-typedef void icalcsdb;
-
-icalcsdb* icalcsdb_new(char* path);
-
-void icalcsdb_free(icalcsdb* csdb);
-
-icalerrorenum icalcsdb_create(icalcsdb* db, char* calid);
-
-icalerrorenum icalcsdb_delete(icalcsdb* db, char* calid);
-
-icalerrorenum icalcsdb_move(icalcsdb* db, char* oldcalid, char* newcalid);
-
-icalerrorenum icalcsdb_noop(icalcsdb* db);
-
-char* icalcsdb_generateuid(icalcsdb* db);
-
-icalcomponent* icalcsdb_expand_upn(icalcsdb* db, char* upn);
-icalcomponent* icalcsdb_expand_calid(icalcsdb* db, char* calid);
-
-icalerrorenum icalcsbd_senddata(icalcsdb* db, icalcomponent* comp);
-
-icalset* icalcsdb_get_calendar(icalcsdb* db, char* calid,
- icalcomponent *gauge);
-
-icalset* icalcsdb_get_vcars(icalcsdb* db);
-
-icalset* icalcsdb_get_properties(icalcsdb* db);
-
-icalset* icalcsdb_get_capabilities(icalcsdb* db);
-
-icalset* icalcsdb_get_timezones(icalcsdb* db);
-
-
-#endif /* !ICALCSDB_H */
-
-
-
diff --git a/libical/src/libicalss/icalcstp.c b/libical/src/libicalss/icalcstp.c
deleted file mode 100644
index d1a52fe303..0000000000
--- a/libical/src/libicalss/icalcstp.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalcstps.c
- CREATOR: ebusboom 23 Jun 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libical/ical.h>
-#include "icalcstp.h"
-#include "pvl.h"
-
-#include <sys/types.h> /* For send(), others */
-#include <sys/socket.h> /* For send(), others. */
-#include <unistd.h> /* For alarm */
-#include <errno.h>
-#include <stdlib.h> /* for malloc */
-#include <string.h>
-
-
-struct command_map {
- enum icalcstp_command command;
- char *str;
-} command_map[] =
-{
- {ICAL_ABORT_COMMAND,"ABORT"},
- {ICAL_AUTHENTICATE_COMMAND,"AUTHENTICATE"},
- {ICAL_CAPABILITY_COMMAND,"CAPABILITY"},
- {ICAL_CONTINUE_COMMAND,"CONTINUE"},
- {ICAL_CALIDEXPAND_COMMAND,"CALIDEXPAND"},
- {ICAL_IDENTIFY_COMMAND,"IDENTIFY"},
- {ICAL_DISCONNECT_COMMAND,"DISCONNECT"},
- {ICAL_SENDDATA_COMMAND,"SENDDATA"},
- {ICAL_STARTTLS_COMMAND,"STARTTLS"},
- {ICAL_UPNEXPAND_COMMAND,"UPNEXPAND"},
- {ICAL_UNKNOWN_COMMAND,"UNKNOWN"}
-};
-
-
-icalcstp_command icalcstp_line_command(char* line)
-{
- int i;
-
- for(i = 0; command_map[i].command != ICAL_UNKNOWN_COMMAND; i++){
- size_t l = strlen(command_map[i].str);
-
- if(strncmp(line, command_map[i].str, l) == 0){
- return command_map[i].command;
- }
-
- }
-
- return ICAL_UNKNOWN_COMMAND;
-}
-
-icalrequeststatus icalcstp_line_response_code(char* line)
-{
- struct icalreqstattype rs;
-
- rs = icalreqstattype_from_string(line);
-
- return rs.code;
-}
-
-int icalcstp_line_is_endofdata(char* line)
-{
- if(line[0] == '.' && line[1] == '\n'){
- return 1;
- }
-
- return 0;
-
-}
-
-int icalcstp_line_is_mime(char* line)
-{
-}
-
-
-const char* icalcstp_command_to_string(icalcstp_command command){
-
- int i;
-
- for(i = 0; command_map[i].command != ICAL_UNKNOWN_COMMAND; i++){
- size_t l = strlen(command_map[i].str);
-
- if(command_map[i].command == command){
- return command_map[i].str;
- }
-
- }
-
- return command_map[i].str;
-
-}
-
diff --git a/libical/src/libicalss/icalcstp.h b/libical/src/libicalss/icalcstp.h
deleted file mode 100644
index a42f7fd244..0000000000
--- a/libical/src/libicalss/icalcstp.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcstp.h
- CREATOR: eric 20 April 1999
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalcstp.h
-
-======================================================================*/
-
-
-#ifndef ICALCSTP_H
-#define ICALCSTP_H
-
-#include <libical/ical.h>
-
-
-/* Connection state, from the state machine in RFC2445 */
-enum cstps_state {
- NO_STATE,
- CONNECTED,
- AUTHENTICATED,
- IDENTIFIED,
- DISCONNECTED,
- RECEIVE
-};
-
-/* CSTP Commands that a client can issue to a server */
-typedef enum icalcstp_command {
- ICAL_ABORT_COMMAND,
- ICAL_AUTHENTICATE_COMMAND,
- ICAL_CAPABILITY_COMMAND,
- ICAL_CONTINUE_COMMAND,
- ICAL_CALIDEXPAND_COMMAND,
- ICAL_IDENTIFY_COMMAND,
- ICAL_DISCONNECT_COMMAND,
- ICAL_SENDDATA_COMMAND,
- ICAL_STARTTLS_COMMAND,
- ICAL_UPNEXPAND_COMMAND,
- ICAL_COMPLETE_COMMAND,
- ICAL_UNKNOWN_COMMAND
-} icalcstp_command;
-
-
-
-/* A statement is a combination of command or response code and a
- component that the server and client exchage with each other. */
-struct icalcstp_statement {
- icalcstp_command command;
- char* str_data; /* If non-NUll use as arguments to command */
- int int_data; /* If non-NULL use as arguments to command */
-
- icalrequeststatus code;
-
- icalcomponent* data;
-};
-
-const char* icalcstp_command_to_string(icalcstp_command command);
-icalcstp_command icalcstp_string_to_command(const char* str);
-
-#endif /* !ICALCSTP_H */
-
-
-
diff --git a/libical/src/libicalss/icalcstpclient.c b/libical/src/libicalss/icalcstpclient.c
deleted file mode 100644
index 2d819c27c1..0000000000
--- a/libical/src/libicalss/icalcstpclient.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalcstps.c
- CREATOR: ebusboom 23 Jun 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libical/ical.h>
-#include "icalcstp.h"
-#include "icalcstpclient.h"
-#include "pvl.h"
-
-#include <sys/types.h> /* For send(), others */
-#include <sys/socket.h> /* For send(), others. */
-#include <unistd.h> /* For alarm */
-#include <errno.h>
-#include <stdlib.h> /* for malloc */
-#include <string.h>
-
-#define EOL "\n"
-
-
-/* Client state machine */
-
-typedef enum icalcstpc_line_type {
- ICALCSTPC_RESPONSE_CODE_LINE,
- ICALCSTPC_TERMINATOR_LINE,
- ICALCSTPC_APPLICATION_DATA_LINE
-} icalcstpc_line_type;
-
-typedef enum icalcstpc_state {
- ICALCSTPC_SEND_STATE,
- ICALCSTPC_RESPONSE_CODE_STATE,
- ICALCSTPC_RESPONSE_DATA_STATE
-} icalcstpc_state;
-
-
-
-struct icalcstpc_impl {
- int timeout;
- icalparser *parser;
- icalcstp_command command;
- icalcstpc_state state;
- char* next_output;
- char* next_input;
-};
-
-icalcstpc* icalcstpc_new()
-{
- struct icalcstpc_impl *impl;
-
- impl = malloc(sizeof(struct icalcstpc_impl));
-
- if(impl == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- memset(impl,0,sizeof(struct icalcstpc_impl));
-
- return impl;
-}
-
-void icalcstpc_free(icalcstpc* cstpc)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstpc;
-
- if(impl->next_output != 0){
- free(impl->next_output);
- }
-
- if(impl->next_input != 0){
- free(impl->next_input);
- }
-
-
- if(impl->parser != 0){
- icalparser_free(impl->parser);
- }
-}
-
-/* Get the next string to send to the server */
-char* icalcstpc_next_output(icalcstpc* cstp, char * line)
-{
- char* out;
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- if(impl->next_output == 0){
- return 0;
- }
-
- out = impl->next_output;
-
- impl->next_output = 0;
-
- icalmemory_add_tmp_buffer(out);
-
- return out;
-}
-
-/* process the next string sent by the server */
-int icalcstpc_next_input(icalcstpc* cstp, char* line)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
- icalcstpc_line_type line_type;
-
- if(icalcstp_line_is_endofdata(line) || line == 0){
- return 0;
- }
-
- switch (impl->command){
- case ICAL_ABORT_COMMAND:{
- break;
- }
- case ICAL_AUTHENTICATE_COMMAND:{
- break;
- }
- case ICAL_CAPABILITY_COMMAND:{
- break;
- }
- case ICAL_CONTINUE_COMMAND:{
- break;
- }
- case ICAL_CALIDEXPAND_COMMAND:{
- break;
- }
- case ICAL_IDENTIFY_COMMAND:{
- break;
- }
- case ICAL_DISCONNECT_COMMAND:{
- break;
- }
- case ICAL_SENDDATA_COMMAND:{
- break;
- }
- case ICAL_STARTTLS_COMMAND:{
- break;
- }
- case ICAL_UPNEXPAND_COMMAND:{
- break;
- }
- case ICAL_COMPLETE_COMMAND:{
- break;
- }
- case ICAL_UNKNOWN_COMMAND:{
- break;
- }
- default:
- break;
- }
-}
-
-/* After icalcstpc_next_input returns a 0, there are responses
- ready. use these to get them */
-icalcstpc_response icalcstpc_first_response(icalcstpc* cstp)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
-}
-
-
-icalcstpc_response icalcstpc_next_response(icalcstpc* cstp)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-}
-
-
-int icalcstpc_set_timeout(icalcstpc* cstp, int sec)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-}
-
-icalerrorenum icalcstpc_abort(icalcstpc* cstp)
-{
- struct icalcstpc_impl* impl = (struct icalcstpc_impl*)cstp;
-
- icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR);
-
- impl->next_output = "ABORT\n";
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpclient_setup_output(icalcstpc* cstp, size_t sz)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- if(impl->next_output != 0){
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return ICAL_USAGE_ERROR;
- }
-
- impl->next_output = malloc(sz);
-
- if(impl->next_output == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return ICAL_NEWFAILED_ERROR;
- }
-
- return ICAL_NO_ERROR;
-
-}
-
-icalerrorenum icalcstpc_authenticate(icalcstpc* cstp, char* mechanism,
- char* data, char* f(char*))
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
- char* command_str;
- icalerrorenum error;
- size_t sz;
-
- icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR);
- icalerror_check_arg_re(mechanism!=0,"mechanism",ICAL_BADARG_ERROR);
- icalerror_check_arg_re(data!=0,"data",ICAL_BADARG_ERROR);
- icalerror_check_arg_re(f!=0,"f",ICAL_BADARG_ERROR);
-
- impl->command = ICAL_AUTHENTICATE_COMMAND;
-
- command_str = icalcstp_command_to_string(impl->command);
-
- sz = strlen(command_str) + strlen(mechanism) + strlen(data) + 4;
-
- if((error=icalcstpclient_setup_output(cstp,sz)) != ICAL_NO_ERROR){
- return error;
- }
-
- sprintf(impl->next_output,"%s %s %s%s",command_str,mechanism,data,EOL);
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_capability(icalcstpc* cstp)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
- char* command_str;
- icalerrorenum error;
- size_t sz;
-
- icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR);
-
- impl->command = ICAL_CAPABILITY_COMMAND;
-
- command_str = icalcstp_command_to_string(impl->command);
-
- sz = strlen(command_str);
-
- if((error=icalcstpclient_setup_output(cstp,sz)) != ICAL_NO_ERROR){
- return error;
- }
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_calidexpand(icalcstpc* cstp,char* calid)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- impl->command = ICAL_CALIDEXPAND_COMMAND;
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_continue(icalcstpc* cstp, unsigned int time)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- impl->command = ICAL_CONTINUE_COMMAND;
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_disconnect(icalcstpc* cstp)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
-
- impl->command = ICAL_DISCONNECT_COMMAND;
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_identify(icalcstpc* cstp, char* id)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
-
- impl->command = ICAL_IDENTIFY_COMMAND;
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_starttls(icalcstpc* cstp, char* command,
- char* data, char * f(char*))
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- impl->command = ICAL_STARTTLS_COMMAND;
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_upnexpand(icalcstpc* cstp,char* calid)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
-
- impl->command = ICAL_UPNEXPAND_COMMAND;
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalcstpc_sendata(icalcstpc* cstp, unsigned int time,
- icalcomponent *comp)
-{
- struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp;
-
- impl->command = ICAL_SENDDATA_COMMAND;
-
- return ICAL_NO_ERROR;
-}
-
-
-
-
diff --git a/libical/src/libicalss/icalcstpclient.h b/libical/src/libicalss/icalcstpclient.h
deleted file mode 100644
index b18f54f594..0000000000
--- a/libical/src/libicalss/icalcstpclient.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcstpclient.h
- CREATOR: eric 4 Feb 01
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalcstp.h
-
-======================================================================*/
-
-
-#ifndef ICALCSTPC_H
-#define ICALCSTPC_H
-
-#include <libical/ical.h>
-#include <libicalss/icalcstp.h>
-
-/********************** Client (Sender) Interfaces **************************/
-
-/* How to use:
-
- 1) Construct a new icalcstpc
- 2) Issue a command by calling one of the command routines.
- 3) Repeat until both call icalcstpc_next_output and
- icalcstpc_next_input return 0:
- 3a) Call icalcstpc_next_output. Send string to server.
- 3b) Get string from server, & give to icalcstp_next_input()
- 4) Iterate with icalcstpc_first_response & icalcstp_next_response to
- get the servers responses
- 5) Repeat at #2
-*/
-
-
-typedef void icalcstpc;
-
-/* Response code sent by the server. */
-typedef struct icalcstpc_response {
- icalrequeststatus code;
- char *arg; /* These strings are owned by libical */
- char *debug_text;
- char *more_text;
- void* result;
-} icalcstpc_response;
-
-
-icalcstpc* icalcstpc_new();
-
-void icalcstpc_free(icalcstpc* cstpc);
-
-int icalcstpc_set_timeout(icalcstpc* cstp, int sec);
-
-
-/* Get the next string to send to the server */
-char* icalcstpc_next_output(icalcstpc* cstp, char* line);
-
-/* process the next string from the server */
-int icalcstpc_next_input(icalcstpc* cstp, char * line);
-
-/* After icalcstpc_next_input returns a 0, there are responses
- ready. use these to get them */
-icalcstpc_response icalcstpc_first_response(icalcstpc* cstp);
-icalcstpc_response icalcstpc_next_response(icalcstpc* cstp);
-
-/* Issue a command */
-icalerrorenum icalcstpc_abort(icalcstpc* cstp);
-icalerrorenum icalcstpc_authenticate(icalcstpc* cstp, char* mechanism,
- char* init_data, char* f(char*) );
-icalerrorenum icalcstpc_capability(icalcstpc* cstp);
-icalerrorenum icalcstpc_calidexpand(icalcstpc* cstp,char* calid);
-icalerrorenum icalcstpc_continue(icalcstpc* cstp, unsigned int time);
-icalerrorenum icalcstpc_disconnect(icalcstpc* cstp);
-icalerrorenum icalcstpc_identify(icalcstpc* cstp, char* id);
-icalerrorenum icalcstpc_starttls(icalcstpc* cstp, char* command,
- char* init_data, char* f(char*));
-icalerrorenum icalcstpc_senddata(icalcstpc* cstp, unsigned int time,
- icalcomponent *comp);
-icalerrorenum icalcstpc_upnexpand(icalcstpc* cstp,char* calid);
-icalerrorenum icalcstpc_sendata(icalcstpc* cstp, unsigned int time,
- icalcomponent *comp);
-
-
-#endif /* !ICALCSTPC_H */
-
-
-
diff --git a/libical/src/libicalss/icalcstpserver.c b/libical/src/libicalss/icalcstpserver.c
deleted file mode 100644
index 1685caab3d..0000000000
--- a/libical/src/libicalss/icalcstpserver.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalcstpserver.c
- CREATOR: ebusboom 13 Feb 01
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libical/ical.h>
-#include "icalcstp.h"
-#include "icalcstpserver.h"
-#include "pvl.h"
-
-#include <sys/types.h> /* For send(), others */
-#include <sys/socket.h> /* For send(), others. */
-#include <unistd.h> /* For alarm */
-#include <errno.h>
-#include <stdlib.h> /* for malloc */
-#include <string.h>
-
-
-
-struct icalcstps_impl {
- int timeout;
- icalparser *parser;
- enum cstps_state major_state;
- struct icalcstps_commandfp commandfp;
-};
-
-
-
-
-/* This state machine is a Mealy-type: actions occur on the
- transitions, not in the states.
-
- Here is the state machine diagram from the CAP draft:
-
-
- STARTTLS /
- CAPABILITY
- +-------+
- | | +---------------+
- | +-----------+ AUTHENTICATE | |
- +-->| Connected |-------------->| Authenticated |
- +-----------+ | |
- | +---------------+
- | |
- | |
- | |
- | | +-----+ STARTTLS /
- | V | | CAPABILITY /
- | +---------------+ | IDENTIFY
- | | |<-+
- | | Identified |<----+
- | +--------| | |
- | | +---------------+ | command
- | | | | completes
- V |DISCONNECT | |
- +--------------+ | |SENDDATA |
- | Disconnected |<--+ | |
- +--------------+ | | ABORT
- A | |
- | V |
- | DISCONNECT +---------------+ |
- +--------------------| Receive |--+
- | |<--+
- +---------------+ |
- | | CONTINUTE
- +----+
-
- In this implmenetation, the transition from CONNECTED to IDENTIFIED
- is non-standard. The spec specifies that on the ATHENTICATE
- command, the machine transitions from CONNECTED to AUTHENTICATED,
- and then immediately goes to IDENTIFIED. This makes AUTHENTICATED a
- useless state, so I removed it */
-
-struct state_table {
- enum cstps_state major_state;
- enum icalcstp_command command;
- void (*action)();
- enum cstps_state next_state;
-
-} server_state_table[] =
-{
- { CONNECTED, ICAL_CAPABILITY_COMMAND , 0, CONNECTED},
- { CONNECTED, ICAL_AUTHENTICATE_COMMAND , 0, IDENTIFIED}, /* Non-standard */
- { IDENTIFIED, ICAL_STARTTLS_COMMAND, 0, IDENTIFIED},
- { IDENTIFIED, ICAL_IDENTIFY_COMMAND, 0, IDENTIFIED},
- { IDENTIFIED, ICAL_CAPABILITY_COMMAND, 0, IDENTIFIED},
- { IDENTIFIED, ICAL_SENDDATA_COMMAND, 0, RECEIVE},
- { IDENTIFIED, ICAL_DISCONNECT_COMMAND, 0, DISCONNECTED},
- { DISCONNECTED, 0, 0, 0},
- { RECEIVE, ICAL_DISCONNECT_COMMAND, 0, DISCONNECTED},
- { RECEIVE, ICAL_CONTINUE_COMMAND, 0, RECEIVE},
- { RECEIVE, ICAL_ABORT_COMMAND , 0, IDENTIFIED},
- { RECEIVE, ICAL_COMPLETE_COMMAND , 0, IDENTIFIED}
-};
-
-
-/**********************************************************************/
-
-
-
-icalcstps* icalcstps_new(struct icalcstps_commandfp cfp)
-{
- struct icalcstps_impl* impl;
-
- if ( ( impl = (struct icalcstps_impl*)
- malloc(sizeof(struct icalcstps_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- impl->commandfp = cfp;
- impl->timeout = 10;
-
- return (icalcstps*)impl;
-
-}
-
-void icalcstps_free(icalcstps* cstp);
-
-int icalcstps_set_timeout(icalcstps* cstp, int sec)
-{
- struct icalcstps_impl *impl = (struct icalcstps_impl *) cstp;
-
- icalerror_check_arg_rz( (cstp!=0), "cstp");
-
- impl->timeout = sec;
-
- return sec;
-}
-
-typedef struct icalcstps_response {
- icalrequeststatus code;
- char caluid[1024];
- void* result;
-} icalcstps_response;
-
-
-icalerrorenum prep_abort(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_authenticate(struct icalcstps_impl* impl, char* data)
-{ return ICAL_NO_ERROR;
-}
-icalerrorenum prep_capability(struct icalcstps_impl* impl, char* data)
-{ return ICAL_NO_ERROR;
-}
-icalerrorenum prep_calidexpand(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_continue(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_disconnect(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_identify(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_starttls(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_upnexpand(struct icalcstps_impl* impl, char* data)
-{
- return ICAL_NO_ERROR;
-}
-icalerrorenum prep_sendata(struct icalcstps_impl* impl, char* data)
-{ return ICAL_NO_ERROR;
-}
-
-char* icalcstps_process_incoming(icalcstps* cstp, char* input)
-{
- struct icalcstps_impl *impl = (struct icalcstps_impl *) cstp;
- char *i;
- char *cmd_or_resp;
- char *data;
- char *input_cpy;
- icalerrorenum error;
-
- icalerror_check_arg_rz(cstp !=0,"cstp");
- icalerror_check_arg_rz(input !=0,"input");
-
- if ((input_cpy = (char*)strdup(input)) == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- i = (char*)strstr(" ",input_cpy);
-
- cmd_or_resp = input_cpy;
-
- if (i != 0){
- *i = '\0';
- data = ++i;
- } else {
- data = 0;
- }
-
- printf("cmd: %s\n",cmd_or_resp);
- printf("data: %s\n",data);
-
- /* extract the command, look up in the state table, and dispatch
- to the proper handler */
-
- if(strcmp(cmd_or_resp,"ABORT") == 0){
- error = prep_abort(impl,data);
- } else if(strcmp(cmd_or_resp,"AUTHENTICATE") == 0){
- error = prep_authenticate(impl,data);
- } else if(strcmp(cmd_or_resp,"CAPABILITY") == 0){
- error = prep_capability(impl,data);
- } else if(strcmp(cmd_or_resp,"CALIDEXPAND") == 0){
- error = prep_calidexpand(impl,data);
- } else if(strcmp(cmd_or_resp,"CONTINUE") == 0){
- error = prep_continue(impl,data);
- } else if(strcmp(cmd_or_resp,"DISCONNECT") == 0){
- error = prep_disconnect(impl,data);
- } else if(strcmp(cmd_or_resp,"IDENTIFY") == 0){
- error = prep_identify(impl,data);
- } else if(strcmp(cmd_or_resp,"STARTTLS") == 0){
- error = prep_starttls(impl,data);
- } else if(strcmp(cmd_or_resp,"UPNEXPAND") == 0){
- error = prep_upnexpand(impl,data);
- } else if(strcmp(cmd_or_resp,"SENDDATA") == 0){
- error = prep_sendata(impl,data);
- }
-
- return 0;
-}
-
- /* Read data until we get a end of data marker */
-
-
-
-struct icalcstps_server_stubs {
- icalerrorenum (*abort)(icalcstps* cstp);
- icalerrorenum (*authenticate)(icalcstps* cstp, char* mechanism,
- char* data);
- icalerrorenum (*calidexpand)(icalcstps* cstp, char* calid);
- icalerrorenum (*capability)(icalcstps* cstp);
- icalerrorenum (*cont)(icalcstps* cstp, unsigned int time);
- icalerrorenum (*identify)(icalcstps* cstp, char* id);
- icalerrorenum (*disconnect)(icalcstps* cstp);
- icalerrorenum (*sendata)(icalcstps* cstp, unsigned int time,
- icalcomponent *comp);
- icalerrorenum (*starttls)(icalcstps* cstp, char* command,
- char* data);
- icalerrorenum (*upnexpand)(icalcstps* cstp, char* upn);
- icalerrorenum (*unknown)(icalcstps* cstp, char* command, char* data);
-};
-
diff --git a/libical/src/libicalss/icalcstpserver.h b/libical/src/libicalss/icalcstpserver.h
deleted file mode 100644
index c8f0aa0ba1..0000000000
--- a/libical/src/libicalss/icalcstpserver.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalcstpserver.h
- CREATOR: eric 13 Feb 01
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalcstp.h
-
-======================================================================*/
-
-
-#ifndef ICALCSTPS_H
-#define ICALCSTPS_H
-
-#include <libical/ical.h>
-
-
-/********************** Server (Reciever) Interfaces *************************/
-
-/* On the server side, the caller will recieve data from the incoming
- socket and pass it to icalcstps_next_input. The caller then takes
- the return from icalcstps_next_outpu and sends it out through the
- socket. This gives the caller a point of control. If the cstp code
- connected to the socket itself, it would be hard for the caller to
- do anything else after the cstp code was started.
-
- All of the server and client command routines will generate
- response codes. On the server side, these responses will be turned
- into text and sent to the client. On the client side, the reponse
- is the one sent from the server.
-
- Since each command can return multiple responses, the responses are
- stored in the icalcstps object and are accesses by
- icalcstps_first_response() and icalcstps_next_response()
-
- How to use:
-
- 1) Construct a new icalcstps, bound to your code via stubs
- 2) Repeat forever:
- 2a) Get string from client & give to icalcstps_next_input()
- 2b) Repeat until icalcstp_next_output returns 0:
- 2b1) Call icalcstps_next_output.
- 2b2) Send string to client.
-*/
-
-
-
-typedef void icalcstps;
-
-/* Pointers to the rountines that
- icalcstps_process_incoming will call when it recognizes a CSTP
- command in the data. BTW, the CONTINUE command is named 'cont'
- because 'continue' is a C keyword */
-
-struct icalcstps_commandfp {
- icalerrorenum (*abort)(icalcstps* cstp);
- icalerrorenum (*authenticate)(icalcstps* cstp, char* mechanism,
- char* data);
- icalerrorenum (*calidexpand)(icalcstps* cstp, char* calid);
- icalerrorenum (*capability)(icalcstps* cstp);
- icalerrorenum (*cont)(icalcstps* cstp, unsigned int time);
- icalerrorenum (*identify)(icalcstps* cstp, char* id);
- icalerrorenum (*disconnect)(icalcstps* cstp);
- icalerrorenum (*sendata)(icalcstps* cstp, unsigned int time,
- icalcomponent *comp);
- icalerrorenum (*starttls)(icalcstps* cstp, char* command,
- char* data);
- icalerrorenum (*upnexpand)(icalcstps* cstp, char* upn);
- icalerrorenum (*unknown)(icalcstps* cstp, char* command, char* data);
-};
-
-
-
-icalcstps* icalcstps_new(struct icalcstps_commandfp stubs);
-
-void icalcstps_free(icalcstps* cstp);
-
-int icalcstps_set_timeout(icalcstps* cstp, int sec);
-
-/* Get the next string to send to the client */
-char* icalcstps_next_output(icalcstps* cstp);
-
-/* process the next string from the client */
-int icalcstps_next_input(icalcstps* cstp);
-
-#endif /* ICALCSTPS */
diff --git a/libical/src/libicalss/icaldirset.c b/libical/src/libicalss/icaldirset.c
deleted file mode 100644
index 7e495f9eae..0000000000
--- a/libical/src/libicalss/icaldirset.c
+++ /dev/null
@@ -1,805 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaldirset.c
- CREATOR: eric 28 November 1999
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-
-/**
- @file icaldirset.c
-
- @brief icaldirset manages a database of ical components and offers
- interfaces for reading, writting and searching for components.
-
- icaldirset groups components in to clusters based on their DTSTAMP
- time -- all components that start in the same month are grouped
- together in a single file. All files in a sotre are kept in a single
- directory.
-
- The primary interfaces are icaldirset__get_first_component and
- icaldirset_get_next_component. These routine iterate through all of
- the components in the store, subject to the current gauge. A gauge
- is an icalcomponent that is tested against other componets for a
- match. If a gauge has been set with icaldirset_select,
- icaldirset_first and icaldirset_next will only return componentes
- that match the gauge.
-
- The Store generated UIDs for all objects that are stored if they do
- not already have a UID. The UID is the name of the cluster (month &
- year as MMYYYY) plus a unique serial number. The serial number is
- stored as a property of the cluster.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
-#include <libical/ical.h>
-#include "icaldirset.h"
-#include "icaldirset.h"
-#include "icalfileset.h"
-#include "icalfilesetimpl.h"
-#include "icalcluster.h"
-#include "icalgauge.h"
-
-#include <limits.h> /* For PATH_MAX */
-#ifndef WIN32
-#include <dirent.h> /* for opendir() */
-#include <unistd.h> /* for stat, getpid */
-#include <sys/utsname.h> /* for uname */
-#else
-#include <io.h>
-#include <process.h>
-#endif
-#include <errno.h>
-#include <sys/types.h> /* for opendir() */
-#include <sys/stat.h> /* for stat */
-#include <time.h> /* for clock() */
-#include <stdlib.h> /* for rand(), srand() */
-#include <string.h> /* for strdup */
-#include "icaldirsetimpl.h"
-
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-
-#define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask))
-
-#define S_ISDIR(mode) _S_ISTYPE((mode), _S_IFDIR)
-#define S_ISREG(mode) _S_ISTYPE((mode), _S_IFREG)
-#endif
-
-/** Default options used when NULL is passed to icalset_new() **/
-icaldirset_options icaldirset_options_default = {O_RDWR|O_CREAT};
-
-
-const char* icaldirset_path(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
-
- return dset->dir;
-}
-
-
-void icaldirset_mark(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
-
- icalcluster_mark(dset->cluster);
-}
-
-
-icalerrorenum icaldirset_commit(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
- icalset *fileset;
- icalfileset_options options = icalfileset_options_default;
-
- options.cluster = dset->cluster;
-
- fileset = icalset_new(ICAL_FILE_SET, icalcluster_key(dset->cluster), &options);
-
- fileset->commit(fileset);
- fileset->free(fileset);
-
- return ICAL_NO_ERROR;
-}
-
-void icaldirset_lock(const char* dir)
-{
-}
-
-
-void icaldirset_unlock(const char* dir)
-{
-}
-
-/* Load the contents of the store directory into the store's internal directory list*/
-icalerrorenum icaldirset_read_directory(icaldirset *dset)
-{
- char *str;
-#ifndef WIN32
- struct dirent *de;
- DIR* dp;
-
- dp = opendir(dset->dir);
-
- if (dp == 0) {
- icalerror_set_errno(ICAL_FILE_ERROR);
- return ICAL_FILE_ERROR;
- }
-
- /* clear contents of directory list */
- while((str = pvl_pop(dset->directory))){
- free(str);
- }
-
- /* load all of the cluster names in the directory list */
- for(de = readdir(dp);
- de != 0;
- de = readdir(dp)){
-
- /* Remove known directory names '.' and '..'*/
- if (strcmp(de->d_name,".") == 0 ||
- strcmp(de->d_name,"..") == 0 ){
- continue;
- }
-
- pvl_push(dset->directory, (void*)strdup(de->d_name));
- }
-
- closedir(dp);
-#else
- struct _finddata_t c_file;
- long hFile;
-
- /* Find first .c file in current directory */
- if( (hFile = _findfirst( "*", &c_file )) == -1L ) {
- icalerror_set_errno(ICAL_FILE_ERROR);
- return ICAL_FILE_ERROR;
- } else {
- while((str = pvl_pop(dset->directory))){
- free(str);
- }
-
- /* load all of the cluster names in the directory list */
- do {
- /* Remove known directory names '.' and '..'*/
- if (strcmp(c_file.name,".") == 0 ||
- strcmp(c_file.name,"..") == 0 ){
- continue;
- }
-
- pvl_push(dset->directory, (void*)strdup(c_file.name));
- }
- while ( _findnext( hFile, &c_file ) == 0 );
-
- _findclose( hFile );
- }
-
-#endif
-
- return ICAL_NO_ERROR;
-}
-
-
-icalset* icaldirset_init(icalset* set, const char* dir, void* options_in)
-{
- icaldirset *dset = (icaldirset*)set;
- icaldirset_options *options = options_in;
- struct stat sbuf;
-
- icalerror_check_arg_rz( (dir!=0), "dir");
- icalerror_check_arg_rz( (set!=0), "set");
-
- if (stat(dir,&sbuf) != 0){
- icalerror_set_errno(ICAL_FILE_ERROR);
- return 0;
- }
-
- /* dir is not the name of a direectory*/
- if (!S_ISDIR(sbuf.st_mode)){
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return 0;
- }
-
- icaldirset_lock(dir);
-
- dset->dir = (char*)strdup(dir);
- dset->options = *options;
- dset->directory = pvl_newlist();
- dset->directory_iterator = 0;
- dset->gauge = 0;
- dset->first_component = 0;
- dset->cluster = 0;
-
- return set;
-}
-
-icalset* icaldirset_new(const char* dir)
-{
- return icalset_new(ICAL_DIR_SET, dir, &icaldirset_options_default);
-}
-
-
-icalset* icaldirset_new_reader(const char* dir)
-{
- icaldirset_options reader_options = icaldirset_options_default;
-
- reader_options.flags = O_RDONLY;
-
- return icalset_new(ICAL_DIR_SET, dir, &reader_options);
-}
-
-
-icalset* icaldirset_new_writer(const char* dir)
-{
- icaldirset_options writer_options = icaldirset_options_default;
-
- writer_options.flags = O_RDWR|O_CREAT;
-
- return icalset_new(ICAL_DIR_SET, dir, &writer_options);
-}
-
-
-void icaldirset_free(icalset* s)
-{
- icaldirset *dset = (icaldirset*)s;
- char* str;
-
- icaldirset_unlock(dset->dir);
-
- if(dset->dir !=0){
- free(dset->dir);
- dset->dir = 0;
- }
-
- if(dset->gauge !=0){
- icalgauge_free(dset->gauge);
- dset->gauge = 0;
- }
-
- if(dset->cluster !=0){
- icalcluster_free(dset->cluster);
- }
-
- while(dset->directory !=0 && (str=pvl_pop(dset->directory)) != 0){
- free(str);
- }
-
- if(dset->directory != 0){
- pvl_free(dset->directory);
- dset->directory = 0;
- }
-
- dset->directory_iterator = 0;
- dset->first_component = 0;
-}
-
-
-/* icaldirset_next_uid_number updates a serial number in the Store
- directory in a file called SEQUENCE */
-
-int icaldirset_next_uid_number(icaldirset* dset)
-{
- char sequence = 0;
- char temp[128];
- char filename[ICAL_PATH_MAX];
- char *r;
- FILE *f;
- struct stat sbuf;
-
- icalerror_check_arg_rz( (dset!=0), "dset");
-
- sprintf(filename,"%s/%s",dset->dir,"SEQUENCE");
-
- /* Create the file if it does not exist.*/
- if (stat(filename,&sbuf) == -1 || !S_ISREG(sbuf.st_mode)){
-
- f = fopen(filename,"w");
- if (f != 0){
- fprintf(f,"0");
- fclose(f);
- } else {
- icalerror_warn("Can't create SEQUENCE file in icaldirset_next_uid_number");
- return 0;
- }
- }
-
- if ( (f = fopen(filename,"r+")) != 0){
-
- rewind(f);
- r = fgets(temp,128,f);
-
- if (r == 0){
- sequence = 1;
- } else {
- sequence = atoi(temp)+1;
- }
-
- rewind(f);
-
- fprintf(f,"%d",sequence);
-
- fclose(f);
-
- return sequence;
-
- } else {
- icalerror_warn("Can't create SEQUENCE file in icaldirset_next_uid_number");
- return 0;
- }
-}
-
-icalerrorenum icaldirset_next_cluster(icaldirset* dset)
-{
- char path[ICAL_PATH_MAX];
-
- if (dset->directory_iterator == 0){
- icalerror_set_errno(ICAL_INTERNAL_ERROR);
- return ICAL_INTERNAL_ERROR;
- }
- dset->directory_iterator = pvl_next(dset->directory_iterator);
-
- if (dset->directory_iterator == 0){
- /* There are no more clusters */
- if(dset->cluster != 0){
- icalcluster_free(dset->cluster);
- dset->cluster = 0;
- }
- return ICAL_NO_ERROR;
- }
-
- sprintf(path,"%s/%s", dset->dir,(char*)pvl_data(dset->directory_iterator));
-
- icalcluster_free(dset->cluster);
- dset->cluster = icalfileset_produce_icalcluster(path);
-
- return icalerrno;
-}
-
-static void icaldirset_add_uid(icalcomponent* comp)
-{
- char uidstring[ICAL_PATH_MAX];
- icalproperty *uid;
-#ifndef WIN32
- struct utsname unamebuf;
-#endif
-
- icalerror_check_arg_rv( (comp!=0), "comp");
-
- uid = icalcomponent_get_first_property(comp,ICAL_UID_PROPERTY);
-
- if (uid == 0) {
-
-#ifndef WIN32
- uname(&unamebuf);
-
- sprintf(uidstring,"%d-%s",(int)getpid(),unamebuf.nodename);
-#else
- sprintf(uidstring,"%d-%s",(int)getpid(),"WINDOWS"); /* FIX: There must be an easy get the system name */
-#endif
-
- uid = icalproperty_new_uid(uidstring);
- icalcomponent_add_property(comp,uid);
- } else {
- strcpy(uidstring,icalproperty_get_uid(uid));
- }
-}
-
-
-/**
- This assumes that the top level component is a VCALENDAR, and there
- is an inner component of type VEVENT, VTODO or VJOURNAL. The inner
- component must have a DSTAMP property
-*/
-
-icalerrorenum icaldirset_add_component(icalset* set, icalcomponent* comp)
-{
- char clustername[ICAL_PATH_MAX];
- icalproperty *dt = 0;
- icalvalue *v;
- struct icaltimetype tm;
- icalerrorenum error = ICAL_NO_ERROR;
- icalcomponent *inner;
- icaldirset *dset = (icaldirset*) set;
-
- icalerror_check_arg_rz( (dset!=0), "dset");
- icalerror_check_arg_rz( (comp!=0), "comp");
-
- icaldirset_add_uid(comp);
-
- /* Determine which cluster this object belongs in. This is a HACK */
-
- for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){
-
- dt = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY);
-
- if (dt != 0)
- break;
- }
-
- if (dt == 0) {
- for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){
-
- dt = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY);
-
- if (dt != 0)
- break;
- }
- }
-
- if (dt == 0){
- icalerror_warn("The component does not have a DTSTAMP or DTSTART property, so it cannot be added to the store");
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return ICAL_BADARG_ERROR;
- }
-
- v = icalproperty_get_value(dt);
- tm = icalvalue_get_datetime(v);
-
- snprintf(clustername,ICAL_PATH_MAX,"%s/%04d%02d",dset->dir, tm.year, tm.month);
-
- /* Load the cluster and insert the object */
- if(dset->cluster != 0 &&
- strcmp(clustername,icalcluster_key(dset->cluster)) != 0 ){
- icalcluster_free(dset->cluster);
- dset->cluster = 0;
- }
-
- if (dset->cluster == 0){
- dset->cluster = icalfileset_produce_icalcluster(clustername);
-
- if (dset->cluster == 0){
- error = icalerrno;
- }
- }
-
- if (error != ICAL_NO_ERROR){
- icalerror_set_errno(error);
- return error;
- }
-
- /* Add the component to the cluster */
- icalcluster_add_component(dset->cluster,comp);
-
- /* icalcluster_mark(impl->cluster); */
-
- return ICAL_NO_ERROR;
-}
-
-/**
- Remove a component in the current cluster. HACK. This routine is a
- "friend" of icalfileset, and breaks its encapsulation. It was
- either do it this way, or add several layers of interfaces that had
- no other use.
- */
-
-icalerrorenum icaldirset_remove_component(icalset* set, icalcomponent* comp)
-{
- icaldirset *dset = (icaldirset*)set;
- icalcomponent *filecomp = icalcluster_get_component(dset->cluster);
-
- icalcompiter i;
- int found = 0;
-
- icalerror_check_arg_re((set!=0),"set",ICAL_BADARG_ERROR);
- icalerror_check_arg_re((comp!=0),"comp",ICAL_BADARG_ERROR);
- icalerror_check_arg_re((dset->cluster!=0),"Cluster pointer",ICAL_USAGE_ERROR);
-
- for(i = icalcomponent_begin_component(filecomp,ICAL_ANY_COMPONENT);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *this = icalcompiter_deref(&i);
-
- if (this == comp){
- found = 1;
- break;
- }
- }
-
- if (found != 1){
- icalerror_warn("icaldirset_remove_component: component is not part of current cluster");
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return ICAL_USAGE_ERROR;
- }
-
- icalcluster_remove_component(dset->cluster,comp);
-
- /* icalcluster_mark(impl->cluster); */
-
- /* If the removal emptied the fileset, get the next fileset */
- if( icalcluster_count_components(dset->cluster,ICAL_ANY_COMPONENT)==0){
- icalerrorenum error = icaldirset_next_cluster(dset);
-
- if(dset->cluster != 0 && error == ICAL_NO_ERROR){
- icalcluster_get_first_component(dset->cluster);
- } else {
- /* HACK. Not strictly correct for impl->cluster==0 */
- return error;
- }
- } else {
- /* Do nothing */
- }
-
- return ICAL_NO_ERROR;
-}
-
-
-
-int icaldirset_count_components(icalset* store,
- icalcomponent_kind kind)
-{
- /* HACK, not implemented */
- assert(0);
-
- return 0;
-}
-
-
-icalcomponent* icaldirset_fetch_match(icalset* set, icalcomponent *c)
-{
- fprintf(stderr," icaldirset_fetch_match is not implemented\n");
- assert(0);
- return 0;
-}
-
-
-icalcomponent* icaldirset_fetch(icalset* set, const char* uid)
-{
- icaldirset *dset = (icaldirset*)set;
- icalgauge *gauge;
- icalgauge *old_gauge;
- icalcomponent *c;
- char sql[256];
-
- icalerror_check_arg_rz( (set!=0), "set");
- icalerror_check_arg_rz( (uid!=0), "uid");
-
- snprintf(sql, 256, "SELECT * FROM VEVENT WHERE UID = \"%s\"", uid);
-
- gauge = icalgauge_new_from_sql(sql, 0);
-
- old_gauge = dset->gauge;
- dset->gauge = gauge;
-
- c= icaldirset_get_first_component(set);
-
- dset->gauge = old_gauge;
-
- icalgauge_free(gauge);
-
- return c;
-}
-
-
-int icaldirset_has_uid(icalset* set, const char* uid)
-{
- icalcomponent *c;
-
- icalerror_check_arg_rz( (set!=0), "set");
- icalerror_check_arg_rz( (uid!=0), "uid");
-
- /* HACK. This is a temporary implementation. _has_uid should use a
- database, and _fetch should use _has_uid, not the other way
- around */
- c = icaldirset_fetch(set,uid);
-
- return c!=0;
-
-}
-
-
-icalerrorenum icaldirset_select(icalset* set, icalgauge* gauge)
-{
- icaldirset *dset = (icaldirset*)set;
-
- icalerror_check_arg_re( (set!=0), "set",ICAL_BADARG_ERROR);
- icalerror_check_arg_re( (gauge!=0), "gauge",ICAL_BADARG_ERROR);
-
- dset->gauge = gauge;
-
- return ICAL_NO_ERROR;
-}
-
-
-icalerrorenum icaldirset_modify(icalset* set,
- icalcomponent *old,
- icalcomponent *new)
-{
- assert(0);
- return ICAL_NO_ERROR; /* HACK, not implemented */
-
-}
-
-
-void icaldirset_clear(icalset* set)
-{
-
- assert(0);
- return;
- /* HACK, not implemented */
-}
-
-icalcomponent* icaldirset_get_current_component(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
-
- if (dset->cluster == 0){
- icaldirset_get_first_component(set);
- }
- if(dset->cluster == 0){
- return 0;
- }
-
- return icalcluster_get_current_component(dset->cluster);
-}
-
-
-icalcomponent* icaldirset_get_first_component(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
-
- icalerrorenum error;
- char path[ICAL_PATH_MAX];
-
- error = icaldirset_read_directory(dset);
-
- if (error != ICAL_NO_ERROR){
- icalerror_set_errno(error);
- return 0;
- }
-
- dset->directory_iterator = pvl_head(dset->directory);
-
- if (dset->directory_iterator == 0){
- icalerror_set_errno(error);
- return 0;
- }
-
- snprintf(path,ICAL_PATH_MAX,"%s/%s",
- dset->dir,
- (char*)pvl_data(dset->directory_iterator));
-
- /* If the next cluster we need is different than the current cluster,
- delete the current one and get a new one */
-
- if(dset->cluster != 0 && strcmp(path,icalcluster_key(dset->cluster)) != 0 ){
- icalcluster_free(dset->cluster);
- dset->cluster = 0;
- }
-
- if (dset->cluster == 0){
- dset->cluster = icalfileset_produce_icalcluster(path);
-
- if (dset->cluster == 0){
- error = icalerrno;
- }
- }
-
- if (error != ICAL_NO_ERROR){
- icalerror_set_errno(error);
- return 0;
- }
-
- dset->first_component = 1;
-
- return icaldirset_get_next_component(set);
-}
-
-
-icalcomponent* icaldirset_get_next_component(icalset* set)
-{
- icaldirset *dset = (icaldirset*)set;
- icalcomponent *c;
- icalerrorenum error;
-
- icalerror_check_arg_rz( (set!=0), "set");
-
-
- if(dset->cluster == 0){
- icalerror_warn("icaldirset_get_next_component called with a NULL cluster (Caller must call icaldirset_get_first_component first");
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return 0;
-
- }
-
- /* Set the component iterator for the following for loop */
- if (dset->first_component == 1){
- icalcluster_get_first_component(dset->cluster);
- dset->first_component = 0;
- } else {
- icalcluster_get_next_component(dset->cluster);
- }
-
- while(1){
- /* Iterate through all of the objects in the cluster*/
- for( c = icalcluster_get_current_component(dset->cluster);
- c != 0;
- c = icalcluster_get_next_component(dset->cluster)){
-
- /* If there is a gauge defined and the component does not
- pass the gauge, skip the rest of the loop */
-
- if (dset->gauge != 0 && icalgauge_compare(dset->gauge,c) == 0){
- continue;
- }
-
- /* Either there is no gauge, or the component passed the
- gauge, so return it*/
-
- return c;
- }
-
- /* Fell through the loop, so the component we want is not
- in this cluster. Load a new cluster and try again.*/
-
- error = icaldirset_next_cluster(dset);
-
- if(dset->cluster == 0 || error != ICAL_NO_ERROR){
- /* No more clusters */
- return 0;
- } else {
- c = icalcluster_get_first_component(dset->cluster);
-
- return c;
- }
-
- }
-
- return 0; /* Should never get here */
-}
-
-icalsetiter icaldirset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge)
-{
- icalsetiter itr = icalsetiter_null;
- icaldirset *fset = (icaldirset*) set;
-
- icalerror_check_arg_re((fset!=0), "set", icalsetiter_null);
-
- itr.iter.kind = kind;
- itr.gauge = gauge;
-
- /* TO BE IMPLEMENTED */
- return icalsetiter_null;
-}
-
-icalcomponent* icaldirsetiter_to_next(icalset* set, icalsetiter* i)
-{
- /* TO BE IMPLEMENTED */
- return NULL;
-}
-
-icalcomponent* icaldirsetiter_to_prior(icalset* set, icalsetiter* i)
-{
- /* TO BE IMPLEMENTED */
- return NULL;
-}
diff --git a/libical/src/libicalss/icaldirset.h b/libical/src/libicalss/icaldirset.h
deleted file mode 100644
index 3a90af2ffa..0000000000
--- a/libical/src/libicalss/icaldirset.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icaldirset.h
- CREATOR: eric 28 November 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALDIRSET_H
-#define ICALDIRSET_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-#include <libicalss/icalcluster.h>
-#include <libicalss/icalgauge.h>
-
-/* icaldirset Routines for storing, fetching, and searching for ical
- * objects in a database */
-
-typedef struct icaldirset_impl icaldirset;
-
-icalset* icaldirset_new(const char* path);
-
-icalset* icaldirset_new_reader(const char* path);
-icalset* icaldirset_new_writer(const char* path);
-
-
-icalset* icaldirset_init(icalset* set, const char *dsn, void *options);
-void icaldirset_free(icalset* set);
-
-const char* icaldirset_path(icalset* set);
-
-/* Mark the cluster as changed, so it will be written to disk when it
- is freed. Commit writes to disk immediately*/
-void icaldirset_mark(icalset* set);
-icalerrorenum icaldirset_commit(icalset* set);
-
-icalerrorenum icaldirset_add_component(icalset* store, icalcomponent* comp);
-icalerrorenum icaldirset_remove_component(icalset* store, icalcomponent* comp);
-
-int icaldirset_count_components(icalset* store,
- icalcomponent_kind kind);
-
-/* Restrict the component returned by icaldirset_first, _next to those
- that pass the gauge. _clear removes the gauge. */
-icalerrorenum icaldirset_select(icalset* store, icalgauge* gauge);
-void icaldirset_clear(icalset* store);
-
-/* Get a component by uid */
-icalcomponent* icaldirset_fetch(icalset* store, const char* uid);
-int icaldirset_has_uid(icalset* store, const char* uid);
-icalcomponent* icaldirset_fetch_match(icalset* set, icalcomponent *c);
-
-/* Modify components according to the MODIFY method of CAP. Works on
- the currently selected components. */
-icalerrorenum icaldirset_modify(icalset* store, icalcomponent *oldc,
- icalcomponent *newc);
-
-/* Iterate through the components. If a gauge has been defined, these
- will skip over components that do not pass the gauge */
-
-icalcomponent* icaldirset_get_current_component(icalset* store);
-icalcomponent* icaldirset_get_first_component(icalset* store);
-icalcomponent* icaldirset_get_next_component(icalset* store);
-
-/* External iterator for thread safety */
-icalsetiter icaldirset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge);
-icalcomponent* icaldirsetiter_to_next(icalset* set, icalsetiter* i);
-icalcomponent* icaldirsetiter_to_prior(icalset* set, icalsetiter* i);
-
-typedef struct icaldirset_options {
- int flags; /**< flags corresponding to the open() system call O_RDWR, etc. */
-} icaldirset_options;
-
-#endif /* !ICALDIRSET_H */
-
-
-
diff --git a/libical/src/libicalss/icaldirsetimpl.h b/libical/src/libicalss/icaldirsetimpl.h
deleted file mode 100644
index 442f0ea8f3..0000000000
--- a/libical/src/libicalss/icaldirsetimpl.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaldirsetimpl.h
- CREATOR: eric 21 Aug 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libicalss/icalcluster.h>
-
-/* This definition is in its own file so it can be kept out of the
- main header file, but used by "friend classes" like icalset*/
-
-struct icaldirset_impl
-{
- icalset super; /**< parent class */
- char* dir; /**< directory containing ics files */
- icaldirset_options options; /**< copy of options passed to icalset_new() */
- icalcluster* cluster; /**< cluster containing data */
- icalgauge* gauge; /**< gauge for filtering out data */
- int first_component; /**< ??? */
- pvl_list directory; /**< ??? */
- pvl_elem directory_iterator; /**< ??? */
-};
diff --git a/libical/src/libicalss/icalfileset.c b/libical/src/libicalss/icalfileset.c
deleted file mode 100644
index 389cec7587..0000000000
--- a/libical/src/libicalss/icalfileset.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalfileset.c
- CREATOR: eric 23 December 1999
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalfileset.h"
-#include "icalgauge.h"
-#include <errno.h>
-#include <sys/stat.h> /* for stat */
-#ifndef WIN32
-#include <unistd.h> /* for stat, getpid */
-#else
-#include <io.h>
-#include <share.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h> /* for fcntl */
-#include "icalfilesetimpl.h"
-#include "icalclusterimpl.h"
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-
-#define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask))
-
-#define S_ISDIR(mode) _S_ISTYPE((mode), _S_IFDIR)
-#define S_ISREG(mode) _S_ISTYPE((mode), _S_IFREG)
-#endif
-
-extern int errno;
-
-/** Default options used when NULL is passed to icalset_new() **/
-icalfileset_options icalfileset_options_default = {O_RDWR|O_CREAT, 0644, 0};
-
-int icalfileset_lock(icalfileset *set);
-int icalfileset_unlock(icalfileset *set);
-icalerrorenum icalfileset_read_file(icalfileset* set, mode_t mode);
-int icalfileset_filesize(icalfileset* set);
-
-icalerrorenum icalfileset_create_cluster(const char *path);
-
-icalset* icalfileset_new(const char* path)
-{
- return icalset_new(ICAL_FILE_SET, path, &icalfileset_options_default);
-}
-
-icalset* icalfileset_new_reader(const char* path)
-{
- icalfileset_options reader_options = icalfileset_options_default;
- reader_options.flags = O_RDONLY;
-
- return icalset_new(ICAL_FILE_SET, path, &reader_options);
-}
-
-icalset* icalfileset_new_writer(const char* path)
-{
- icalfileset_options writer_options = icalfileset_options_default;
- writer_options.flags = O_RDONLY;
-
- return icalset_new(ICAL_FILE_SET, path, &writer_options);
-}
-
-icalset* icalfileset_init(icalset *set, const char* path, void* options_in)
-{
- icalfileset_options *options = (options_in) ? options_in : &icalfileset_options_default;
- icalfileset *fset = (icalfileset*) set;
- int flags;
- mode_t mode;
- off_t cluster_file_size;
-
- icalerror_clear_errno();
- icalerror_check_arg_rz( (path!=0), "path");
- icalerror_check_arg_rz( (fset!=0), "fset");
-
- fset->path = strdup(path);
- fset->options = *options;
-
- flags = options->flags;
- mode = options->mode;
-
- cluster_file_size = icalfileset_filesize(fset);
-
- if(cluster_file_size < 0){
- icalfileset_free(set);
- return 0;
- }
-
-#ifndef WIN32
- fset->fd = open(fset->path, flags, mode);
-#else
- fset->fd = open(fset->path, flags, mode);
- /* fset->fd = sopen(fset->path,flags, _SH_DENYWR, _S_IREAD | _S_IWRITE); */
-#endif
-
- if (fset->fd < 0){
- icalerror_set_errno(ICAL_FILE_ERROR);
- icalfileset_free(set);
- return 0;
- }
-
-#ifndef WIN32
- icalfileset_lock(fset);
-#endif
-
- if(cluster_file_size > 0 ){
- icalerrorenum error;
- if((error = icalfileset_read_file(fset,mode))!= ICAL_NO_ERROR){
- icalfileset_free(set);
- return 0;
- }
- }
-
- if (options->cluster) {
- fset->cluster = icalcomponent_new_clone(icalcluster_get_component(options->cluster));
- fset->changed = 1;
- }
-
- if (fset->cluster == 0) {
- fset->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT);
- }
-
- return set;
-}
-
-
-icalcluster* icalfileset_produce_icalcluster(const char *path) {
- icalset *fileset;
- icalcluster *ret;
-
- int errstate = icalerror_errors_are_fatal;
- icalerror_errors_are_fatal = 0;
-
- fileset = icalfileset_new_reader(path);
-
-
- if (fileset == 0 && icalerrno == ICAL_FILE_ERROR) {
- /* file does not exist */
- ret = icalcluster_new(path, NULL);
- } else {
- ret = icalcluster_new(path, ((icalfileset*)fileset)->cluster);
- icalfileset_free(fileset);
- }
-
- icalerror_errors_are_fatal = errstate;
- icalerror_set_errno(ICAL_NO_ERROR);
- return ret;
-}
-
-
-
-char* icalfileset_read_from_file(char *s, size_t size, void *d)
-{
- char* p = s;
- int fd = (int)d;
-
- /* Simulate fgets -- read single characters and stop at '\n' */
-
- for(p=s; p<s+size-1;p++){
-
- if(read(fd,p,1) != 1 || *p=='\n'){
- p++;
- break;
- }
- }
-
- *p = '\0';
-
- if(*s == 0){
- return 0;
- } else {
- return s;
- }
-
-}
-
-
-icalerrorenum icalfileset_read_file(icalfileset* set,mode_t mode)
-{
- icalparser *parser;
-
- parser = icalparser_new();
-
- icalparser_set_gen_data(parser,(void*)set->fd);
- set->cluster = icalparser_parse(parser,icalfileset_read_from_file);
- icalparser_free(parser);
-
- if (set->cluster == 0 || icalerrno != ICAL_NO_ERROR){
- icalerror_set_errno(ICAL_PARSE_ERROR);
- /*return ICAL_PARSE_ERROR;*/
- }
-
- if (icalcomponent_isa(set->cluster) != ICAL_XROOT_COMPONENT){
- /* The parser got a single component, so it did not put it in
- an XROOT. */
- icalcomponent *cl = set->cluster;
- set->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT);
- icalcomponent_add_component(set->cluster,cl);
- }
-
- return ICAL_NO_ERROR;
-}
-
-int icalfileset_filesize(icalfileset* fset)
-{
- int cluster_file_size;
- struct stat sbuf;
-
- if (stat(fset->path,&sbuf) != 0){
-
- /* A file by the given name does not exist, or there was
- another error */
- cluster_file_size = 0;
- if (errno == ENOENT) {
- /* It was because the file does not exist */
- return 0;
- } else {
- /* It was because of another error */
- icalerror_set_errno(ICAL_FILE_ERROR);
- return -1;
- }
- } else {
- /* A file by the given name exists, but is it a regular file? */
-
- if (!S_ISREG(sbuf.st_mode)){
- /* Nope, not a regular file */
- icalerror_set_errno(ICAL_FILE_ERROR);
- return -1;
- } else {
- /* Lets assume that it is a file of the right type */
- return sbuf.st_size;
- }
- }
-
- /*return -1; not reached*/
-}
-
-void icalfileset_free(icalset* set)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_rv((set!=0),"set");
-
- if (fset->cluster != 0){
- icalfileset_commit(set);
- icalcomponent_free(fset->cluster);
- fset->cluster=0;
- }
-
- if (fset->gauge != 0){
- icalgauge_free(fset->gauge);
- fset->gauge=0;
- }
-
- if(fset->fd > 0){
- icalfileset_unlock(fset);
- close(fset->fd);
- fset->fd = -1;
- }
-
- if(fset->path != 0){
- free(fset->path);
- fset->path = 0;
- }
-}
-
-const char* icalfileset_path(icalset* set) {
- icalerror_check_arg_rz((set!=0),"set");
-
- return ((icalfileset*)set)->path;
-}
-
-
-int icalfileset_lock(icalfileset *set)
-{
-#ifndef WIN32
- struct flock lock;
- int rtrn;
-
- icalerror_check_arg_rz((set->fd>0),"set->fd");
- errno = 0;
- lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */
- lock.l_start = 0; /* byte offset relative to l_whence */
- lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */
- lock.l_len = 0; /* #bytes (0 means to EOF) */
-
- rtrn = fcntl(set->fd, F_SETLKW, &lock);
-
- return rtrn;
-#else
- return 0;
-#endif
-}
-
-int icalfileset_unlock(icalfileset *set)
-{
-#ifndef WIN32
- struct flock lock;
- icalerror_check_arg_rz((set->fd>0),"set->fd");
-
- lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */
- lock.l_start = 0; /* byte offset relative to l_whence */
- lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */
- lock.l_len = 0; /* #bytes (0 means to EOF) */
-
- return (fcntl(set->fd, F_UNLCK, &lock));
-#else
- return 0;
-#endif
-}
-
-icalerrorenum icalfileset_commit(icalset* set)
-{
- char tmp[ICAL_PATH_MAX];
- char *str;
- icalcomponent *c;
- off_t write_size=0;
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_re((fset!=0),"set",ICAL_BADARG_ERROR);
-
- icalerror_check_arg_re((fset->fd>0),"set->fd is invalid",
- ICAL_INTERNAL_ERROR) ;
-
- if (fset->changed == 0 ){
- return ICAL_NO_ERROR;
- }
-
- if(lseek(fset->fd, 0, SEEK_SET) < 0){
- icalerror_set_errno(ICAL_FILE_ERROR);
- return ICAL_FILE_ERROR;
- }
-
- for(c = icalcomponent_get_first_component(fset->cluster,ICAL_ANY_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(fset->cluster,ICAL_ANY_COMPONENT)){
- int sz;
-
- str = icalcomponent_as_ical_string(c);
-
- sz=write(fset->fd,str,strlen(str));
-
- if ( sz != strlen(str)){
- perror("write");
- icalerror_set_errno(ICAL_FILE_ERROR);
- return ICAL_FILE_ERROR;
- }
-
- write_size += sz;
- }
-
- fset->changed = 0;
-
-#ifndef WIN32
- if(ftruncate(fset->fd,write_size) < 0){
- return ICAL_FILE_ERROR;
- }
-#else
- chsize( fset->fd, tell( fset->fd ) );
-#endif
-
- return ICAL_NO_ERROR;
-}
-
-void icalfileset_mark(icalset* set) {
- icalerror_check_arg_rv((set!=0),"set");
-
- ((icalfileset*)set)->changed = 1;
-}
-
-icalcomponent* icalfileset_get_component(icalset* set){
- icalfileset *fset = (icalfileset*) set;
- icalerror_check_arg_rz((set!=0),"set");
-
- return fset->cluster;
-}
-
-
-/* manipulate the components in the set */
-
-icalerrorenum icalfileset_add_component(icalset *set,
- icalcomponent* child)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_re((set!=0),"set", ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_add_component(fset->cluster,child);
-
- icalfileset_mark(set);
-
- return ICAL_NO_ERROR;
-}
-
-icalerrorenum icalfileset_remove_component(icalset *set,
- icalcomponent* child)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_re((set!=0),"set",ICAL_BADARG_ERROR);
- icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR);
-
- icalcomponent_remove_component(fset->cluster,child);
-
- icalfileset_mark(set);
-
- return ICAL_NO_ERROR;
-}
-
-int icalfileset_count_components(icalset *set,
- icalcomponent_kind kind)
-{
- icalfileset *fset = (icalfileset*) set;
-
- if (set == 0){
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return -1;
- }
-
- return icalcomponent_count_components(fset->cluster,kind);
-}
-
-icalerrorenum icalfileset_select(icalset* set, icalgauge* gauge)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_re(gauge!=0,"gauge",ICAL_BADARG_ERROR);
-
- fset->gauge = gauge;
-
- return ICAL_NO_ERROR;
-}
-
-void icalfileset_clear(icalset* set)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_rv(set!=0,"set");
-
- fset->gauge = 0;
-}
-
-icalcomponent* icalfileset_fetch(icalset* set,const char* uid)
-{
- icalfileset *fset = (icalfileset*) set;
- icalcompiter i;
-
- icalerror_check_arg_rz(set!=0,"set");
-
- for(i = icalcomponent_begin_component(fset->cluster,ICAL_ANY_COMPONENT);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *this = icalcompiter_deref(&i);
- icalcomponent *inner;
- icalproperty *p;
- const char *this_uid;
-
- for(inner = icalcomponent_get_first_component(this,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = icalcomponent_get_next_component(this,ICAL_ANY_COMPONENT)){
-
- p = icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY);
- if ( p )
- {
- this_uid = icalproperty_get_uid(p);
-
- if(this_uid==0){
- icalerror_warn("icalfileset_fetch found a component with no UID");
- continue;
- }
-
- if (strcmp(uid,this_uid)==0){
- return this;
- }
- }
- }
- }
-
- return 0;
-}
-
-int icalfileset_has_uid(icalset* set,const char* uid)
-{
- assert(0); /* HACK, not implemented */
- return 0;
-}
-
-/******* support routines for icalfileset_fetch_match *********/
-
-struct icalfileset_id{
- char* uid;
- char* recurrence_id;
- int sequence;
-};
-
-void icalfileset_id_free(struct icalfileset_id *id)
-{
- if(id->recurrence_id != 0){
- free(id->recurrence_id);
- }
-
- if(id->uid != 0){
- free(id->uid);
- }
-}
-
-
-struct icalfileset_id icalfileset_get_id(icalcomponent* comp)
-{
- icalcomponent *inner;
- struct icalfileset_id id;
- icalproperty *p;
-
- inner = icalcomponent_get_first_real_component(comp);
-
- p = icalcomponent_get_first_property(inner, ICAL_UID_PROPERTY);
-
- assert(p!= 0);
-
- id.uid = strdup(icalproperty_get_uid(p));
-
- p = icalcomponent_get_first_property(inner, ICAL_SEQUENCE_PROPERTY);
-
- if(p == 0) {
- id.sequence = 0;
- } else {
- id.sequence = icalproperty_get_sequence(p);
- }
-
- p = icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY);
-
- if (p == 0){
- id.recurrence_id = 0;
- } else {
- icalvalue *v;
- v = icalproperty_get_value(p);
- id.recurrence_id = strdup(icalvalue_as_ical_string(v));
-
- assert(id.recurrence_id != 0);
- }
-
- return id;
-}
-
-
-/* Find the component that is related to the given
- component. Currently, it just matches based on UID and
- RECURRENCE-ID */
-icalcomponent* icalfileset_fetch_match(icalset* set, icalcomponent *comp)
-{
- icalfileset *fset = (icalfileset*) set;
- icalcompiter i;
-
- struct icalfileset_id comp_id, match_id;
-
- comp_id = icalfileset_get_id(comp);
-
- for(i = icalcomponent_begin_component(fset->cluster,ICAL_ANY_COMPONENT);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *match = icalcompiter_deref(&i);
-
- match_id = icalfileset_get_id(match);
-
- if(strcmp(comp_id.uid, match_id.uid) == 0 &&
- ( comp_id.recurrence_id ==0 ||
- strcmp(comp_id.recurrence_id, match_id.recurrence_id) ==0 )){
-
- /* HACK. What to do with SEQUENCE? */
-
- icalfileset_id_free(&match_id);
- icalfileset_id_free(&comp_id);
- return match;
-
- }
-
- icalfileset_id_free(&match_id);
- }
-
- icalfileset_id_free(&comp_id);
- return 0;
-
-}
-
-
-icalerrorenum icalfileset_modify(icalset* set, icalcomponent *old,
- icalcomponent *new)
-{
- icalfileset *fset = (icalfileset*) set;
-
- assert(0); /* HACK, not implemented */
- return ICAL_NO_ERROR;
-}
-
-
-/* Iterate through components */
-icalcomponent* icalfileset_get_current_component (icalset* set)
-{
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_rz((set!=0),"set");
-
- return icalcomponent_get_current_component(fset->cluster);
-}
-
-
-icalcomponent* icalfileset_get_first_component(icalset* set)
-{
- icalcomponent *c=0;
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_rz((set!=0),"set");
-
- do {
- if (c == 0){
- c = icalcomponent_get_first_component(fset->cluster,
- ICAL_ANY_COMPONENT);
- } else {
- c = icalcomponent_get_next_component(fset->cluster,
- ICAL_ANY_COMPONENT);
- }
-
- if(c != 0 && (fset->gauge == 0 ||
- icalgauge_compare(fset->gauge, c) == 1)){
- return c;
- }
-
- } while(c != 0);
-
-
- return 0;
-}
-
-icalcomponent* icalfileset_get_next_component(icalset* set)
-{
- icalfileset *fset = (icalfileset*) set;
- icalcomponent *c;
-
- icalerror_check_arg_rz((set!=0),"set");
-
- do {
- c = icalcomponent_get_next_component(fset->cluster,
- ICAL_ANY_COMPONENT);
-
- if(c != 0 && (fset->gauge == 0 ||
- icalgauge_compare(fset->gauge,c) == 1)){
- return c;
- }
-
- } while(c != 0);
-
-
- return 0;
-}
-/*
-icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge)
-{
- icalsetiter itr = icalsetiter_null;
- icalcomponent* comp = NULL;
- icalcompiter citr;
- icalfileset *fset = (icalfileset*) set;
-
- icalerror_check_arg_re((set!=0), "set", icalsetiter_null);
-
- itr.gauge = gauge;
-
- citr = icalcomponent_begin_component(fset->cluster, kind);
- comp = icalcompiter_deref(&citr);
-
- while (comp != 0) {
- comp = icalcompiter_deref(&citr);
- if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) {
- itr.iter = citr;
- return itr;
- }
- comp = icalcompiter_next(&citr);
- }
-
- return icalsetiter_null;
-}
-*/
-
-icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge)
-{
- icalsetiter itr = icalsetiter_null;
- icalcomponent* comp = NULL;
- icalcompiter citr;
- icalfileset *fset = (icalfileset*) set;
- struct icaltimetype start, next;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- int g = 0;
-
- icalerror_check_arg_re((set!=0), "set", icalsetiter_null);
-
- itr.gauge = gauge;
-
- citr = icalcomponent_begin_component(fset->cluster, kind);
- comp = icalcompiter_deref(&citr);
-
- if (gauge == 0) {
- itr.iter = citr;
- return itr;
- }
-
- while (comp != 0) {
-
- /* check if it is a recurring component and with guage expand, if so
- we need to add recurrence-id property to the given component */
- rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY);
- g = icalgauge_get_expand(gauge);
-
- if (rrule != 0
- && g == 1) {
-
- recur = icalproperty_get_rrule(rrule);
- if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- if (itr.last_component == NULL) {
- itr.ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(itr.ritr);
- itr.last_component = comp;
- }
- else {
- next = icalrecur_iterator_next(itr.ritr);
- if (icaltime_is_null_time(next)){
- itr.last_component = NULL;
- icalrecur_iterator_free(itr.ritr);
- itr.ritr = NULL;
- return icalsetiter_null;
- } else {
- itr.last_component = comp;
- }
- }
-
- /* add recurrence-id to the component
- if there is a recurrence-id already, remove it, then add the new one */
- if (prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY))
- icalcomponent_remove_property(comp, prop);
- icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next));
-
- }
-
- if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) {
- /* matches and returns */
- itr.iter = citr;
- return itr;
- }
-
- /* if there is no previous component pending, then get the next component */
- if (itr.last_component == NULL)
- comp = icalcompiter_next(&citr);
- }
-
- return icalsetiter_null;
-}
-icalcomponent* icalfileset_form_a_matched_recurrence_component(icalsetiter* itr)
-{
- icalcomponent* comp = NULL;
- struct icaltimetype start, next;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
-
- comp = itr->last_component;
-
- if (comp == NULL || itr->gauge == NULL) {
- return NULL;
- }
-
- rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY);
-
- recur = icalproperty_get_rrule(rrule);
-
- if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- if (itr->ritr == NULL) {
- itr->ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(itr->ritr);
- itr->last_component = comp;
- } else {
- next = icalrecur_iterator_next(itr->ritr);
- if (icaltime_is_null_time(next)){
- /* no more recurrence, returns */
- itr->last_component = NULL;
- icalrecur_iterator_free(itr->ritr);
- itr->ritr = NULL;
- return NULL;
- } else {
- itr->last_component = comp;
- }
- }
-
- /* add recurrence-id to the component
- * if there is a recurrence-id already, remove it, then add the new one */
- if (prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY))
- icalcomponent_remove_property(comp, prop);
- icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next));
-
- if (itr->gauge == 0 || icalgauge_compare(itr->gauge, comp) == 1) {
- /* matches and returns */
- return comp;
- }
- /* not matched */
- return NULL;
-
-}
-icalcomponent* icalfilesetiter_to_next(icalset* set, icalsetiter* i)
-{
-
- icalcomponent* c = NULL;
- icalfileset *fset = (icalfileset*) set;
- struct icaltimetype start, next;
- icalproperty *dtstart, *rrule, *prop, *due;
- struct icalrecurrencetype recur;
- int g = 0;
-
-
- do {
- c = icalcompiter_next(&(i->iter));
-
- if (c == 0) continue;
- if (i->gauge == 0) return c;
-
-
- rrule = icalcomponent_get_first_property(c, ICAL_RRULE_PROPERTY);
- g = icalgauge_get_expand(i->gauge);
-
- /* a recurring component with expand query */
- if (rrule != 0
- && g == 1) {
-
- recur = icalproperty_get_rrule(rrule);
-
- if (icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT) {
- dtstart = icalcomponent_get_first_property(c, ICAL_DTSTART_PROPERTY);
- if (dtstart)
- start = icalproperty_get_dtstart(dtstart);
- } else if (icalcomponent_isa(c) == ICAL_VTODO_COMPONENT) {
- due = icalcomponent_get_first_property(c, ICAL_DUE_PROPERTY);
- if (due)
- start = icalproperty_get_due(due);
- }
-
- if (i->ritr == NULL) {
- i->ritr = icalrecur_iterator_new(recur, start);
- next = icalrecur_iterator_next(i->ritr);
- i->last_component = c;
- } else {
- next = icalrecur_iterator_next(i->ritr);
- if (icaltime_is_null_time(next)) {
- /* no more recurrence, returns */
- i->last_component = NULL;
- icalrecur_iterator_free(i->ritr);
- i->ritr = NULL;
- return NULL;
- } else {
- i->last_component = c;
- }
- }
- }
-
- /* add recurrence-id to the component
- * if there is a recurrence-id already, remove it, then add the new one */
- if (prop = icalcomponent_get_first_property(c, ICAL_RECURRENCEID_PROPERTY))
- icalcomponent_remove_property(c, prop);
- icalcomponent_add_property(c, icalproperty_new_recurrenceid(next));
-
- if(c != 0 && (i->gauge == 0 ||
- icalgauge_compare(i->gauge, c) == 1)){
- return c;
- }
- } while (c != 0);
-
- return 0;
-
-}
diff --git a/libical/src/libicalss/icalfileset.h b/libical/src/libicalss/icalfileset.h
deleted file mode 100644
index a24574b7a9..0000000000
--- a/libical/src/libicalss/icalfileset.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalfileset.h
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALFILESET_H
-#define ICALFILESET_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-#include <libicalss/icalcluster.h>
-#include <libicalss/icalgauge.h>
-#include <sys/types.h> /* For open() flags and mode */
-#include <sys/stat.h> /* For open() flags and mode */
-#include <fcntl.h> /* For open() flags and mode */
-
-#ifdef WIN32
-#define mode_t int
-#endif
-
-typedef struct icalfileset_impl icalfileset;
-
-icalset* icalfileset_new(const char* path);
-icalset* icalfileset_new_reader(const char* path);
-icalset* icalfileset_new_writer(const char* path);
-
-icalset* icalfileset_init(icalset *set, const char *dsn, void* options);
-
-icalfileset* icalfileset_new_from_cluster(const char* path, icalcluster *cluster);
-
-icalcluster* icalfileset_produce_icalcluster(const char *path);
-
-void icalfileset_free(icalset* cluster);
-
-const char* icalfileset_path(icalset* cluster);
-
-/* Mark the cluster as changed, so it will be written to disk when it
- is freed. Commit writes to disk immediately. */
-void icalfileset_mark(icalset* set);
-icalerrorenum icalfileset_commit(icalset* set);
-
-icalerrorenum icalfileset_add_component(icalset* set,
- icalcomponent* child);
-
-icalerrorenum icalfileset_remove_component(icalset* set,
- icalcomponent* child);
-
-int icalfileset_count_components(icalset* set,
- icalcomponent_kind kind);
-
-/**
- * Restrict the component returned by icalfileset_first, _next to those
- * that pass the gauge. _clear removes the gauge
- */
-icalerrorenum icalfileset_select(icalset* set, icalgauge* gauge);
-
-/** clear the gauge **/
-void icalfileset_clear(icalset* set);
-
-/** Get and search for a component by uid **/
-icalcomponent* icalfileset_fetch(icalset* set, const char* uid);
-int icalfileset_has_uid(icalset* set, const char* uid);
-icalcomponent* icalfileset_fetch_match(icalset* set, icalcomponent *c);
-
-
-/**
- * Modify components according to the MODIFY method of CAP. Works on the
- * currently selected components.
- */
-icalerrorenum icalfileset_modify(icalset* set,
- icalcomponent *oldcomp,
- icalcomponent *newcomp);
-
-/* Iterate through components. If a gauge has been defined, these
- will skip over components that do not pass the gauge */
-
-icalcomponent* icalfileset_get_current_component (icalset* cluster);
-icalcomponent* icalfileset_get_first_component(icalset* cluster);
-icalcomponent* icalfileset_get_next_component(icalset* cluster);
-
-/* External iterator for thread safety */
-icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge);
-icalcomponent * icalfilesetiter_to_next(icalset* set, icalsetiter *iter);
-icalcomponent* icalfileset_form_a_matched_recurrence_component(icalsetiter* itr);
-
-/** Return a reference to the internal component. You probably should
- not be using this. */
-
-icalcomponent* icalfileset_get_component(icalset* cluster);
-
-/**
- * @brief options for opening an icalfileset.
- *
- * These options should be passed to the icalset_new() function
- */
-
-typedef struct icalfileset_options {
- int flags; /**< flags for open() O_RDONLY, etc */
- mode_t mode; /**< file mode */
- icalcluster *cluster; /**< use this cluster to initialize data */
-} icalfileset_options;
-
-extern icalfileset_options icalfileset_options_default;
-
-#endif /* !ICALFILESET_H */
-
-
-
diff --git a/libical/src/libicalss/icalfilesetimpl.h b/libical/src/libicalss/icalfilesetimpl.h
deleted file mode 100644
index 6f7cf00c1a..0000000000
--- a/libical/src/libicalss/icalfilesetimpl.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalfilesetimpl.h
- CREATOR: eric 23 December 1999
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#ifndef ICALFILESETIMPL_H
-#define ICALFILESETIMPL_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libicalss/icalgauge.h>
-
-/* This definition is in its own file so it can be kept out of the
- main header file, but used by "friend classes" like icaldirset*/
-
-#define ICALFILESET_ID "fset"
-
-struct icalfileset_impl {
- icalset super; /**< parent class */
- char *path; /**< pathname of file */
- icalfileset_options options; /**< copy of options passed to icalset_new() */
-
- icalcomponent* cluster; /**< cluster containing data */
- icalgauge* gauge; /**< gauge for filtering out data */
- int changed; /**< boolean flag, 1 if data has changed */
- int fd; /**< file descriptor */
-};
-
-#endif
diff --git a/libical/src/libicalss/icalgauge.c b/libical/src/libicalss/icalgauge.c
deleted file mode 100644
index a4b97a9f1d..0000000000
--- a/libical/src/libicalss/icalgauge.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalgauge.c
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#include <libical/ical.h>
-#include "icalgauge.h"
-#include "icalgaugeimpl.h"
-#include <stdlib.h>
-
-#include "icalssyacc.h"
-
-int ssparse(void);
-
-extern char *input_buffer;
-extern char *input_buffer_p;
-
-struct icalgauge_impl *icalss_yy_gauge;
-
-icalgauge* icalgauge_new_from_sql(char* sql, int expand)
-{
- struct icalgauge_impl *impl;
- int r;
-
- if ( ( impl = (struct icalgauge_impl*)
- malloc(sizeof(struct icalgauge_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- impl->select = pvl_newlist();
- impl->from = pvl_newlist();
- impl->where = pvl_newlist();
- impl->expand = expand;
-
- icalss_yy_gauge = impl;
- input_buffer = input_buffer_p = sql;
-
- r = ssparse();
-
- if (r == 0) {
- return impl;
- }
- else {
- icalgauge_free(impl);
- return NULL;
- }
-}
-
-int icalgauge_get_expand(icalgauge* gauge)
-{
-return (gauge->expand);
-
-}
-
-void icalgauge_free(icalgauge* gauge)
-{
- struct icalgauge_where *w;
-
- assert(gauge->select != 0);
- assert(gauge->where != 0);
- assert(gauge->from != 0);
-
- if(gauge->select){
- while( (w=pvl_pop(gauge->select)) != 0){
- if(w->value != 0){
- free(w->value);
- }
- free(w);
- }
- pvl_free(gauge->select);
- gauge->select = 0;
- }
-
- if(gauge->where){
- while( (w=pvl_pop(gauge->where)) != 0){
-
- if(w->value != 0){
- free(w->value);
- }
- free(w);
- }
- pvl_free(gauge->where);
- gauge->where = 0;
- }
-
- if(gauge->from){
- pvl_free(gauge->from);
- gauge->from = 0;
- }
-
- free(gauge);
-
-}
-
-
-/** Convert a VQUERY component into a gauge */
-icalcomponent* icalgauge_make_gauge(icalcomponent* query);
-
-/**
- icaldirset_test compares a component against a gauge, and returns
- true if the component passes the test
-
- The gauge is a VCALENDAR component that specifies how to test the
- target components. The gauge holds a collection of VEVENT, VTODO or
- VJOURNAL sub-components. Each of the sub-components has a
- collection of properties that are compared to corresponding
- properties in the target component, according to the
- X-LIC-COMPARETYPE parameters to the gauge's properties.
-
- When a gauge has several sub-components, the results of testing the
- target against each of them is ORed together - the target
- component will pass if it matches any of the sub-components in the
- gauge. However, the results of matching the properties in a
- sub-component are ANDed -- the target must match every property in
- a gauge sub-component to match the sub-component.
-
- Here is an example:
-
- BEGIN:XROOT
- DTSTART;X-LIC-COMPARETYPE=LESS:19981025T020000
- ORGANIZER;X-LIC-COMPARETYPE=EQUAL:mrbig@host.com
- END:XROOT
- BEGIN:XROOT
- LOCATION;X-LIC-COMPARETYPE=EQUAL:McNary's Pub
- END:XROOT
-
- This gauge has two sub-components; one which will match a VEVENT
- based on start time, and organizer, and another that matches based
- on LOCATION. A target component will pass the test if it matched
- either of the sub-components.
-
- */
-
-
-int icalgauge_compare_recurse(icalcomponent* comp, icalcomponent* gauge)
-{
- int pass = 1,localpass = 0;
- icalproperty *p;
- icalcomponent *child,*subgauge;
- icalcomponent_kind gaugekind, compkind;
-
- icalerror_check_arg_rz( (comp!=0), "comp");
- icalerror_check_arg_rz( (gauge!=0), "gauge");
-
- gaugekind = icalcomponent_isa(gauge);
- compkind = icalcomponent_isa(comp);
-
- if( ! (gaugekind == compkind || gaugekind == ICAL_ANY_COMPONENT) ){
- return 0;
- }
-
- /* Test properties. For each property in the gauge, search through
- the component for a similar property. If one is found, compare
- the two properties value with the comparison specified in the
- gauge with the X-LIC-COMPARETYPE parameter */
-
- for(p = icalcomponent_get_first_property(gauge,ICAL_ANY_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(gauge,ICAL_ANY_PROPERTY)){
-
- icalproperty* targetprop;
- icalparameter* compareparam;
- icalparameter_xliccomparetype compare;
- int rel; /* The relationship between the gauge and target values.*/
-
- /* Extract the comparison type from the gauge. If there is no
- comparison type, assume that it is "EQUAL" */
-
- compareparam = icalproperty_get_first_parameter(
- p,
- ICAL_XLICCOMPARETYPE_PARAMETER);
-
- if (compareparam!=0){
- compare = icalparameter_get_xliccomparetype(compareparam);
- } else {
- compare = ICAL_XLICCOMPARETYPE_EQUAL;
- }
-
- /* Find a property in the component that has the same type
- as the gauge property. HACK -- multiples of a single
- property type in the gauge will match only the first
- instance in the component */
-
- targetprop = icalcomponent_get_first_property(comp,
- icalproperty_isa(p));
-
- if(targetprop != 0){
-
- /* Compare the values of the gauge property and the target
- property */
-
- rel = icalvalue_compare(icalproperty_get_value(p),
- icalproperty_get_value(targetprop));
-
- /* Now see if the comparison is equavalent to the comparison
- specified in the gauge */
-
- if (rel == compare){
- localpass++;
- } else if (compare == ICAL_XLICCOMPARETYPE_LESSEQUAL &&
- ( rel == ICAL_XLICCOMPARETYPE_LESS ||
- rel == ICAL_XLICCOMPARETYPE_EQUAL)) {
- localpass++;
- } else if (compare == ICAL_XLICCOMPARETYPE_GREATEREQUAL &&
- ( rel == ICAL_XLICCOMPARETYPE_GREATER ||
- rel == ICAL_XLICCOMPARETYPE_EQUAL)) {
- localpass++;
- } else if (compare == ICAL_XLICCOMPARETYPE_NOTEQUAL &&
- ( rel == ICAL_XLICCOMPARETYPE_GREATER ||
- rel == ICAL_XLICCOMPARETYPE_LESS)) {
- localpass++;
- } else {
- localpass = 0;
- }
-
- pass = pass && (localpass>0);
- }
- }
-
- /* Test subcomponents. Look for a child component that has a
- counterpart in the gauge. If one is found, recursively call
- icaldirset_test */
-
- for(subgauge = icalcomponent_get_first_component(gauge,ICAL_ANY_COMPONENT);
- subgauge != 0;
- subgauge = icalcomponent_get_next_component(gauge,ICAL_ANY_COMPONENT)){
-
- gaugekind = icalcomponent_isa(subgauge);
-
- if (gaugekind == ICAL_ANY_COMPONENT){
- child = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- } else {
- child = icalcomponent_get_first_component(comp,gaugekind);
- }
-
- if(child !=0){
- localpass = icalgauge_compare_recurse(child,subgauge);
- pass = pass && localpass;
- } else {
- pass = 0;
- }
- }
-
- return pass;
-}
-
-
-int icalgauge_compare(icalgauge* gauge,icalcomponent* comp)
-{
-
- icalcomponent *inner;
- int local_pass = 0;
- int last_clause = 1, this_clause = 1;
- pvl_elem e;
- icalcomponent_kind kind;
- icalproperty *rrule;
- int compare_recur = 0;
-
-
- icalerror_check_arg_rz( (comp!=0), "comp");
- icalerror_check_arg_rz( (gauge!=0), "gauge");
-
- if (gauge == 0 || comp == 0) return 0;
-
- inner = icalcomponent_get_first_real_component(comp);
-
- if(inner == 0){
- /* Wally Yau: our component is not always wrapped with
- * a <VCALENDAR>. It's not an error.
- * icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- * return 0; */
- kind = icalcomponent_isa(comp);
- if(kind == ICAL_VEVENT_COMPONENT ||
- kind == ICAL_VTODO_COMPONENT ||
- kind == ICAL_VJOURNAL_COMPONENT ||
- kind == ICAL_VQUERY_COMPONENT ||
- kind == ICAL_VAGENDA_COMPONENT){
- inner = comp;
- }
- else {
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return 0;
- }
- inner = comp;
- }
-
- /* Check that this component is one of the FROM types */
- local_pass = 0;
- for(e = pvl_head(gauge->from);e!=0;e=pvl_next(e)){
- icalcomponent_kind k = (icalcomponent_kind)pvl_data(e);
-
- if(k == icalcomponent_isa(inner)){
- local_pass=1;
- }
- }
-
- if(local_pass == 0){
- return 0;
- }
-
-
- /**** Check each where clause against the component ****/
- for(e = pvl_head(gauge->where);e!=0;e=pvl_next(e)){
- struct icalgauge_where *w = pvl_data(e);
- icalcomponent *sub_comp;
- icalvalue *v;
- icalproperty *prop;
- icalvalue_kind vk;
-
- if(w->prop == ICAL_NO_PROPERTY || w->value == 0){
- icalerror_set_errno(ICAL_INTERNAL_ERROR);
- return 0;
- }
-
- /* First, create a value from the gauge */
- vk = icalenum_property_kind_to_value_kind(w->prop);
-
- if(vk == ICAL_NO_VALUE){
- icalerror_set_errno(ICAL_INTERNAL_ERROR);
- return 0;
- }
-
- if (w->compare == ICALGAUGECOMPARE_ISNULL || w->compare == ICALGAUGECOMPARE_ISNOTNULL)
- v = icalvalue_new(vk);
- else
- v = icalvalue_new_from_string(vk,w->value);
-
- if (v == 0){
- /* Keep error set by icalvalue_from-string*/
- return 0;
- }
-
- /* Now find the corresponding property in the component,
- descending into a sub-component if necessary */
-
- if(w->comp == ICAL_NO_COMPONENT){
- sub_comp = inner;
- } else {
- sub_comp = icalcomponent_get_first_component(inner,w->comp);
- if(sub_comp == 0){
- return 0;
- }
- }
-
- /* check if it is a recurring */
- rrule = icalcomponent_get_first_property(sub_comp,ICAL_RRULE_PROPERTY);
-
- if (gauge->expand
- && rrule) {
-
- if (w->prop == ICAL_DTSTART_PROPERTY ||
- w->prop == ICAL_DTEND_PROPERTY ||
- w->prop == ICAL_DUE_PROPERTY){
- /** needs to use recurrence-id to do comparison */
- compare_recur = 1;
- }
-
- }
-
-
- this_clause = 0;
- local_pass = (w->compare == ICALGAUGECOMPARE_ISNULL) ? 1 : 0;
-
- for(prop = icalcomponent_get_first_property(sub_comp,w->prop);
- prop != 0;
- prop = icalcomponent_get_next_property(sub_comp,w->prop)){
- icalvalue* prop_value;
- icalgaugecompare relation;
-
- if (w->compare == ICALGAUGECOMPARE_ISNULL) {
- local_pass = 0;
- break;
- }
-
- if (w->compare == ICALGAUGECOMPARE_ISNOTNULL) {
- local_pass = 1;
- break;
- }
-
- if (compare_recur) {
- icalproperty *p = icalcomponent_get_first_property(sub_comp, ICAL_RECURRENCEID_PROPERTY);
- prop_value = icalproperty_get_value(p);
- }
- else /* prop value from this component */
- prop_value = icalproperty_get_value(prop);
-
- relation = (icalgaugecompare)icalvalue_compare(prop_value,v);
-
- if (relation == w->compare){
- local_pass++;
- } else if (w->compare == ICALGAUGECOMPARE_LESSEQUAL &&
- ( relation == ICALGAUGECOMPARE_LESS ||
- relation == ICALGAUGECOMPARE_EQUAL)) {
- local_pass++;
- } else if (w->compare == ICALGAUGECOMPARE_GREATEREQUAL &&
- ( relation == ICALGAUGECOMPARE_GREATER ||
- relation == ICALGAUGECOMPARE_EQUAL)) {
- local_pass++;
- } else if (w->compare == ICALGAUGECOMPARE_NOTEQUAL &&
- ( relation == ICALGAUGECOMPARE_GREATER ||
- relation == ICALGAUGECOMPARE_LESS)) {
- local_pass++;
- } else {
- local_pass = 0;
- }
- }
-
-
- this_clause = local_pass > 0 ? 1 : 0;
-
-
- /* Now look at the logic operator for this clause to see how
- the value should be merge with the previous clause */
-
- if(w->logic == ICALGAUGELOGIC_AND){
- last_clause = this_clause && last_clause;
- } else if(w->logic == ICALGAUGELOGIC_OR) {
- last_clause = this_clause || last_clause;
- } else {
- last_clause = this_clause;
- }
-
- icalvalue_free(v);
-
- }/**** check next one in where clause ****/
-
- return last_clause;
-
-}
-
-/** @brief Debug
- * Print gauge information to stdout.
- */
-
-void icalgauge_dump(icalgauge* gauge)
-{
-
- pvl_elem p;
-
- printf("--- Select ---\n");
- for(p = pvl_head(gauge->select);p!=0;p=pvl_next(p)){
- struct icalgauge_where *w = pvl_data(p);
-
- if(w->comp != ICAL_NO_COMPONENT){
- printf("%s ",icalenum_component_kind_to_string(w->comp));
- }
-
- if(w->prop != ICAL_NO_PROPERTY){
- printf("%s ",icalenum_property_kind_to_string(w->prop));
- }
-
- if (w->compare != ICALGAUGECOMPARE_NONE){
- printf("%d ",w->compare);
- }
-
-
- if (w->value!=0){
- printf("%s",w->value);
- }
-
-
- printf("\n");
- }
-
- printf("--- From ---\n");
- for(p = pvl_head(gauge->from);p!=0;p=pvl_next(p)){
- icalcomponent_kind k = (icalcomponent_kind)pvl_data(p);
-
- printf("%s\n",icalenum_component_kind_to_string(k));
- }
-
- printf("--- Where ---\n");
- for(p = pvl_head(gauge->where);p!=0;p=pvl_next(p)){
- struct icalgauge_where *w = pvl_data(p);
-
- if(w->logic != ICALGAUGELOGIC_NONE){
- printf("%d ",w->logic);
- }
-
- if(w->comp != ICAL_NO_COMPONENT){
- printf("%s ",icalenum_component_kind_to_string(w->comp));
- }
-
- if(w->prop != ICAL_NO_PROPERTY){
- printf("%s ",icalenum_property_kind_to_string(w->prop));
- }
-
- if (w->compare != ICALGAUGECOMPARE_NONE){
- printf("%d ",w->compare);
- }
-
-
- if (w->value!=0){
- printf("%s",w->value);
- }
-
-
- printf("\n");
- }
-}
-
diff --git a/libical/src/libicalss/icalgauge.h b/libical/src/libicalss/icalgauge.h
deleted file mode 100644
index 1064b5f41f..0000000000
--- a/libical/src/libicalss/icalgauge.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalgauge.h
- CREATOR: eric 23 December 1999
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALGAUGE_H
-#define ICALGAUGE_H
-
-#include <libical/icalcomponent.h>
-
-/** @file icalgauge.h
- * @brief Routines implementing a filter for ical components
- */
-
-typedef struct icalgauge_impl icalgauge;
-
-icalgauge* icalgauge_new_from_sql(char* sql, int expand);
-
-int icalgauge_get_expand(icalgauge* gauge);
-
-void icalgauge_free(icalgauge* gauge);
-
-char* icalgauge_as_sql(icalcomponent* gauge);
-
-void icalgauge_dump(icalgauge* gauge);
-
-
-/** @brief Return true if comp matches the gauge.
- *
- * The component must be in
- * cannonical form -- a VCALENDAR with one VEVENT, VTODO or VJOURNAL
- * sub component
- */
-int icalgauge_compare(icalgauge* g, icalcomponent* comp);
-
-/** Clone the component, but only return the properties
- * specified in the gauge */
-icalcomponent* icalgauge_new_clone(icalgauge* g, icalcomponent* comp);
-
-#endif /* ICALGAUGE_H*/
diff --git a/libical/src/libicalss/icalgaugeimpl.h b/libical/src/libicalss/icalgaugeimpl.h
deleted file mode 100644
index 4bf13524c4..0000000000
--- a/libical/src/libicalss/icalgaugeimpl.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalgaugeimpl.h
- CREATOR: eric 09 Aug 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-======================================================================*/
-
-#include <libical/ical.h>
-
-typedef enum icalgaugecompare {
- ICALGAUGECOMPARE_EQUAL=ICAL_XLICCOMPARETYPE_EQUAL,
- ICALGAUGECOMPARE_LESS=ICAL_XLICCOMPARETYPE_LESS,
- ICALGAUGECOMPARE_LESSEQUAL=ICAL_XLICCOMPARETYPE_LESSEQUAL,
- ICALGAUGECOMPARE_GREATER=ICAL_XLICCOMPARETYPE_GREATER,
- ICALGAUGECOMPARE_GREATEREQUAL=ICAL_XLICCOMPARETYPE_GREATEREQUAL,
- ICALGAUGECOMPARE_NOTEQUAL=ICAL_XLICCOMPARETYPE_NOTEQUAL,
- ICALGAUGECOMPARE_REGEX=ICAL_XLICCOMPARETYPE_REGEX,
- ICALGAUGECOMPARE_ISNULL=ICAL_XLICCOMPARETYPE_ISNULL,
- ICALGAUGECOMPARE_ISNOTNULL=ICAL_XLICCOMPARETYPE_ISNOTNULL,
- ICALGAUGECOMPARE_NONE=0
-} icalgaugecompare;
-
-typedef enum icalgaugelogic {
- ICALGAUGELOGIC_NONE,
- ICALGAUGELOGIC_AND,
- ICALGAUGELOGIC_OR
-} icalgaugelogic;
-
-
-struct icalgauge_where {
- icalgaugelogic logic;
- icalcomponent_kind comp;
- icalproperty_kind prop;
- icalgaugecompare compare;
- char* value;
-};
-
-struct icalgauge_impl
-{
- pvl_list select; /**< Of icalgaugecompare, using only prop and comp fields*/
- pvl_list from; /**< List of component_kinds, as integers */
- pvl_list where; /**< List of icalgaugecompare */
- int expand;
-};
-
-
diff --git a/libical/src/libicalss/icalmessage.c b/libical/src/libicalss/icalmessage.c
deleted file mode 100644
index 7a64ac5de1..0000000000
--- a/libical/src/libicalss/icalmessage.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalmessage.c
- CREATOR: ebusboom 07 Nov 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalmessage.h"
-#include <libical/icalenums.h>
-#include <ctype.h> /* for tolower()*/
-#include <string.h> /* for strstr */
-#include <stdlib.h> /* for free(), malloc() */
-icalcomponent* icalmessage_get_inner(icalcomponent* comp)
-{
- if (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT){
- return icalcomponent_get_first_real_component(comp);
- } else {
- return comp;
- }
-}
-
-static char* lowercase(const char* str)
-{
- char* p = 0;
- char* n = icalmemory_strdup(str);
-
- if(str ==0){
- return 0;
- }
-
- for(p = n; *p!=0; p++){
- *p = tolower(*p);
- }
-
- return n;
-}
-
-icalproperty* icalmessage_find_attendee(icalcomponent* comp, const char* user)
-{
- icalcomponent *inner = icalmessage_get_inner(comp);
- icalproperty *p,*attendee = 0;
- char* luser = lowercase(user);
-
- for(p = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(inner, ICAL_ATTENDEE_PROPERTY)
- ){
-
- char* lattendee;
-
- lattendee = lowercase(icalproperty_get_attendee(p));
-
- if (strstr(lattendee,user) != 0){
- attendee = p;
- break;
- }
-
- free(lattendee);
-
- }
-
- free(luser);
-
- return attendee;
-
-}
-
-void icalmessage_copy_properties(icalcomponent* to, icalcomponent* from,
- icalproperty_kind kind)
-{
- icalcomponent *to_inner = icalmessage_get_inner(to);
- icalcomponent *from_inner = icalmessage_get_inner(from);
-
- if (to_inner == 0 && from_inner == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- return;
- }
-
- if(!icalcomponent_get_first_property(from_inner,kind)){
- return;
- }
-
- icalcomponent_add_property(to_inner,
- icalproperty_new_clone(
- icalcomponent_get_first_property(
- from_inner,
- kind)
- )
- );
-}
-
-icalcomponent *icalmessage_new_reply_base(icalcomponent* c,
- const char* user,
- const char* msg)
-{
- icalproperty *attendee;
- char tmp[45];
-
- icalcomponent *reply = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_method(ICAL_METHOD_REPLY),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstamp(icaltime_from_timet(time(0),0)),
- 0),
- 0);
-
- icalcomponent *inner = icalmessage_get_inner(reply);
-
- icalerror_check_arg_rz(c,"c");
-
- icalmessage_copy_properties(reply,c,ICAL_UID_PROPERTY);
- icalmessage_copy_properties(reply,c,ICAL_ORGANIZER_PROPERTY);
- icalmessage_copy_properties(reply,c,ICAL_RECURRENCEID_PROPERTY);
- icalmessage_copy_properties(reply,c,ICAL_SUMMARY_PROPERTY);
- icalmessage_copy_properties(reply,c,ICAL_SEQUENCE_PROPERTY);
-
- icalcomponent_set_dtstamp(reply,icaltime_from_timet(time(0),0));
-
- if(msg != 0){
- icalcomponent_add_property(inner,icalproperty_new_comment(msg));
- }
-
- /* Copy this user's attendee property */
-
- attendee = icalmessage_find_attendee(c,user);
-
- if (attendee == 0){
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
- icalcomponent_free(reply);
- return 0;
- }
-
- icalcomponent_add_property(inner,icalproperty_new_clone(attendee));
-
- /* Add PRODID and VERSION */
-
- icalcomponent_add_property(reply,icalproperty_new_version("2.0"));
-
-#ifndef WIN32
- sprintf(tmp,
- "-//SoftwareStudio//NONSGML %s %s //EN",PACKAGE,VERSION);
-#else
- sprintf(tmp,
- "-//SoftwareStudio//NONSGML %s %s //EN",ICAL_PACKAGE,ICAL_VERSION);
-#endif
- icalcomponent_add_property(reply,icalproperty_new_prodid(tmp));
-
- return reply;
-
-}
-
-icalcomponent* icalmessage_new_accept_reply(icalcomponent* c,
- const char* user,
- const char* msg)
-{
-
- icalcomponent *reply;
- icalproperty *attendee;
- icalcomponent *inner;
-
- icalerror_check_arg_rz(c,"c");
-
- reply = icalmessage_new_reply_base(c,user,msg);
-
- if(reply == 0){
- return 0;
- }
-
- inner = icalmessage_get_inner(reply);
-
- attendee = icalcomponent_get_first_property(inner,
- ICAL_ATTENDEE_PROPERTY);
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_partstat(ICAL_PARTSTAT_ACCEPTED));
-
- return reply;
-}
-
-icalcomponent* icalmessage_new_decline_reply(icalcomponent* c,
- const char* user,
- const char* msg)
-{
- icalcomponent *reply;
- icalproperty *attendee;
- icalcomponent *inner;
-
- icalerror_check_arg_rz(c,"c");
-
- reply = icalmessage_new_reply_base(c,user,msg);
- inner = icalmessage_get_inner(reply);
- if(reply == 0){
- return 0;
- }
-
- attendee = icalcomponent_get_first_property(inner,
- ICAL_ATTENDEE_PROPERTY);
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_partstat(ICAL_PARTSTAT_DECLINED));
-
- return reply;
-}
-
-/* New is modified version of old */
-icalcomponent* icalmessage_new_counterpropose_reply(icalcomponent* oldc,
- icalcomponent* newc,
- const char* user,
- const char* msg)
-{
- icalcomponent *reply;
-
- icalerror_check_arg_rz(oldc,"oldc");
- icalerror_check_arg_rz(newc,"newc");
-
- reply = icalmessage_new_reply_base(newc,user,msg);
-
- icalcomponent_set_method(reply,ICAL_METHOD_COUNTER);
-
- return reply;
-
-}
-
-
-icalcomponent* icalmessage_new_delegate_reply(icalcomponent* c,
- const char* user,
- const char* delegatee,
- const char* msg)
-{
-
- icalcomponent *reply;
- icalproperty *attendee;
- icalcomponent *inner;
-
- icalerror_check_arg_rz(c,"c");
-
- reply = icalmessage_new_reply_base(c,user,msg);
- inner = icalmessage_get_inner(reply);
- if(reply == 0){
- return 0;
- }
-
- attendee = icalcomponent_get_first_property(inner,
- ICAL_ATTENDEE_PROPERTY);
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED));
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_delegatedto(delegatee));
-
- return reply;
-
-}
-
-icalcomponent* icalmessage_new_delegate_request(icalcomponent* c,
- const char* user,
- const char* delegatee,
- const char* msg)
-{
-
- icalcomponent *reply;
- icalproperty *attendee;
- icalcomponent *inner;
-
- icalerror_check_arg_rz(c,"c");
-
- reply = icalmessage_new_reply_base(c,user,msg);
- inner = icalmessage_get_inner(reply);
-
- if(reply == 0){
- return 0;
- }
-
- icalcomponent_set_method(reply,ICAL_METHOD_REQUEST);
-
- attendee = icalcomponent_get_first_property(inner,
- ICAL_ATTENDEE_PROPERTY);
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED));
-
- icalproperty_set_parameter(attendee,
- icalparameter_new_delegatedto(delegatee));
-
- icalcomponent_add_property(
- inner,
- icalproperty_vanew_attendee(
- delegatee,
- icalparameter_new_delegatedfrom(
- icalproperty_get_attendee(attendee)
- ),
- 0
- )
- );
-
-
- return reply;
-
-}
-
-
-icalcomponent* icalmessage_new_cancel_event(icalcomponent* c,
- const char* user,
- const char* msg);
-icalcomponent* icalmessage_new_cancel_instance(icalcomponent* c,
- const char* user,
- const char* msg);
-icalcomponent* icalmessage_new_cancel_all(icalcomponent* c,
- const char* user,
- const char* msg);
-
-
-
-icalcomponent* icalmessage_new_error_reply(icalcomponent* c,
- const char* user,
- const char* msg,
- const char* debug,
- icalrequeststatus code)
-{
- icalcomponent *reply;
- icalcomponent *inner, *cinner;
- struct icalreqstattype rs;
-
- icalerror_check_arg_rz(c,"c");
-
- reply = icalmessage_new_reply_base(c,user,msg);
- inner = icalmessage_get_inner(reply);
- cinner = icalmessage_get_inner(c);
- if(reply == 0){
- return 0;
- }
-
- if( code != ICAL_UNKNOWN_STATUS){
- rs.code = code;
- rs.debug = debug;
-
- icalcomponent_add_property(inner,
- icalproperty_new_requeststatus(rs));
- } else { /* code == ICAL_UNKNOWN_STATUS */
-
- /* Copy all of the request status properties */
- icalproperty *p;
- for(p = icalcomponent_get_first_property(cinner,
- ICAL_REQUESTSTATUS_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(cinner,
- ICAL_REQUESTSTATUS_PROPERTY)){
-
-
- icalcomponent_add_property(inner,icalproperty_new_clone(p));
- }
- }
-
- return reply;
-}
diff --git a/libical/src/libicalss/icalmessage.h b/libical/src/libicalss/icalmessage.h
deleted file mode 100644
index 102e467f32..0000000000
--- a/libical/src/libicalss/icalmessage.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalmessage.h
- CREATOR: eric 07 Nov 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- =========================================================================*/
-
-#include <libical/ical.h>
-
-#ifndef ICALMESSAGE_H
-#define ICALMESSAGE_H
-
-
-icalcomponent* icalmessage_new_accept_reply(icalcomponent* c,
- const char* user,
- const char* msg);
-
-icalcomponent* icalmessage_new_decline_reply(icalcomponent* c,
- const char* user,
- const char* msg);
-
-/* New is modified version of old */
-icalcomponent* icalmessage_new_counterpropose_reply(icalcomponent* oldc,
- icalcomponent* newc,
- const char* user,
- const char* msg);
-
-
-icalcomponent* icalmessage_new_delegate_reply(icalcomponent* c,
- const char* user,
- const char* delegatee,
- const char* msg);
-
-
-icalcomponent* icalmessage_new_cancel_event(icalcomponent* c,
- const char* user,
- const char* msg);
-icalcomponent* icalmessage_new_cancel_instance(icalcomponent* c,
- const char* user,
- const char* msg);
-icalcomponent* icalmessage_new_cancel_all(icalcomponent* c,
- const char* user,
- const char* msg);
-
-
-icalcomponent* icalmessage_new_error_reply(icalcomponent* c,
- const char* user,
- const char* msg,
- const char* debug,
- icalrequeststatus rs);
-
-
-#endif /* ICALMESSAGE_H*/
diff --git a/libical/src/libicalss/icalset.c b/libical/src/libicalss/icalset.c
deleted file mode 100644
index 682a404a1e..0000000000
--- a/libical/src/libicalss/icalset.c
+++ /dev/null
@@ -1,493 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalset.c
- CREATOR: eric 17 Jul 2000
-
-
- Icalset is the "base class" for representations of a collection of
- iCal components. Derived classes (actually delegates) include:
-
- icalfileset Store components in a single file
- icaldirset Store components in multiple files in a directory
- icalheapset Store components on the heap
- icalmysqlset Store components in a mysql database.
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#include <libical/ical.h>
-#include "icalset.h"
-#include "icalfileset.h"
-#include "icalfilesetimpl.h"
-#include "icaldirset.h"
-#include "icaldirsetimpl.h"
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#ifdef WITH_BDB4
-#include "icalbdbset.h"
-#include "icalbdbsetimpl.h"
-#endif
-
-/* #define _DLOPEN_TEST */
-#ifdef _DLOPEN_TEST
-#include <sys/types.h>
-#include <dlfcn.h>
-#include <dirent.h>
-#endif
-
-static icalset icalset_dirset_init = {
- ICAL_DIR_SET,
- sizeof(icaldirset),
- NULL,
- icaldirset_init,
- icaldirset_free,
- icaldirset_path,
- icaldirset_mark,
- icaldirset_commit,
- icaldirset_add_component,
- icaldirset_remove_component,
- icaldirset_count_components,
- icaldirset_select,
- icaldirset_clear,
- icaldirset_fetch,
- icaldirset_fetch_match,
- icaldirset_has_uid,
- icaldirset_modify,
- icaldirset_get_current_component,
- icaldirset_get_first_component,
- icaldirset_get_next_component,
- icaldirset_begin_component,
- icaldirsetiter_to_next,
- icaldirsetiter_to_prior
-};
-
-
-static icalset icalset_fileset_init = {
- ICAL_FILE_SET,
- sizeof(icalfileset),
- NULL,
- icalfileset_init,
- icalfileset_free,
- icalfileset_path,
- icalfileset_mark,
- icalfileset_commit,
- icalfileset_add_component,
- icalfileset_remove_component,
- icalfileset_count_components,
- icalfileset_select,
- icalfileset_clear,
- icalfileset_fetch,
- icalfileset_fetch_match,
- icalfileset_has_uid,
- icalfileset_modify,
- icalfileset_get_current_component,
- icalfileset_get_first_component,
- icalfileset_get_next_component,
- icalfileset_begin_component,
- icalfilesetiter_to_next,
- NULL
-};
-
-#ifdef WITH_BDB4
-static icalset icalset_bdbset_init = {
- ICAL_BDB_SET,
- sizeof(icalbdbset),
- NULL,
- icalbdbset_init,
- icalbdbset_free,
- icalbdbset_path,
- icalbdbset_mark,
- icalbdbset_commit,
- icalbdbset_add_component,
- icalbdbset_remove_component,
- icalbdbset_count_components,
- icalbdbset_select,
- icalbdbset_clear,
- icalbdbset_fetch,
- icalbdbset_fetch_match,
- icalbdbset_has_uid,
- icalbdbset_modify,
- icalbdbset_get_current_component,
- icalbdbset_get_first_component,
- icalbdbset_get_next_component,
- icalbdbset_begin_component,
- icalbdbsetiter_to_next,
- NULL
-};
-#endif
-
-#ifdef _DLOPEN_TEST
-static int icalset_init_done = 0;
-static pvl_list icalset_kinds = 0;
-
-typedef icalset *(*fptr)(void);
-
-/**
- * Try to load the file and register any icalset found within.
- */
-static int load(const char *file) {
-
- void *modh;
- fptr inith;
- icalset *icalset_init_ptr;
-
- if ((modh = dlopen(file, RTLD_NOW)) == 0) {
- perror("dlopen");
- return 0;
- }
-
- if ((inith = (fptr)dlsym(modh, "InitModule")) == 0) {
- perror("dlsym");
- return 0;
- }
-
- while ((icalset_init_ptr = ((inith)())) != 0) {
- pvl_push(icalset_kinds, &icalset_init_ptr);
- }
-
- return 1;
-}
-
-/**
- * Look in the given directory for files called mod_*.o and try to
- * load them.
- */
-int icalset_loaddir(const char *path) {
- DIR *d;
- struct dirent *dp;
- char buf[PATH_MAX],
- *bufptr;
- int tot = 0;
-
- strcpy(buf, path);
- bufptr = buf + strlen(buf);
-
- if (*(bufptr-1) != '/')
- *bufptr++ = '/';
-
- if ((d = opendir(path)) == 0) {
- perror("opendir");
- return 0;
- }
-
- while ((dp = readdir(d)) != 0) {
- if (strncmp(dp->d_name, "mod_", 4)) continue;
-
- strcpy(bufptr, dp->d_name);
-
- load(buf);
- tot++;
- }
- (void)closedir(d);
-
- return 1;
-}
-
-int icalset_register_class(icalset *set);
-
-static void icalset_init(void) {
- assert(icalset_kinds == 0);
- icalset_kinds = pvl_newlist();
-
- pvl_push(icalset_kinds, &icalset_fileset_init);
- pvl_push(icalset_kinds, &icalset_dirset_init);
-#ifdef WITH_BDB4
- pvl_push(icalset_kinds, &icalset_bdb4set_init);
-#endif
-
-#ifdef EXT_PATH
- icalset_loaddir(EXT_PATH);
-#endif
-
- icalset_init_done++;
-}
-
-int icalset_register_class(icalset *set) {
-
- if (!icalset_init_done)
- icalset_init();
-
- pvl_push(icalset_kinds, set);
- return 1;
-}
-
-#endif
-
-icalset* icalset_new(icalset_kind kind, const char* dsn, void* options) {
- icalset *data = NULL;
- icalset *ret = NULL;
-
-#ifdef _DLOPEN_TEST
- pvl_elem e;
- icalset *impl;
-
- if (!icalset_init_done)
- icalset_init();
-
- for(e = pvl_head(icalset_kinds); e!=0; e = pvl_next(e)) {
- impl = (icalset*)pvl_data(e);
- if (impl->kind == kind)
- break;
- }
- if (e == 0) {
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- return(NULL);
- }
-
- data = (icalset*)malloc(impl->size);
- if (data == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- errno = ENOMEM;
- return 0;
- }
-
- /* The first member of the derived class must be an icalset. */
- memset(data,0,impl->size);
- /* *data = *impl; */
- memcpy(data, impl, sizeof(icalset));
-
- data->dsn = strdup(dsn);
-#else
- switch(kind) {
- case ICAL_FILE_SET:
- data = (icalset*) malloc(sizeof(icalfileset));
- if (data == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- errno = ENOMEM;
- return 0;
- }
- memset(data,0,sizeof(icalfileset));
- *data = icalset_fileset_init;
- break;
- case ICAL_DIR_SET:
- data = (icalset*) malloc(sizeof(icaldirset));
- if (data == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- errno = ENOMEM;
- return 0;
- }
- memset(data,0,sizeof(icaldirset));
- *data = icalset_dirset_init;
- break;
-#ifdef WITH_BDB4
- case ICAL_BDB_SET:
- data = (icalset*) malloc(sizeof(icalbdbset));
- if (data == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- errno = ENOMEM;
- return 0;
- }
- memset(data,0,sizeof(icalbdbset));
- *data = icalset_bdbset_init;
- break;
-#endif
-
- default:
- icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR);
- /** unimplemented **/
- return(NULL);
- }
-
- if ( data == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
- data->kind = kind;
- data->dsn = strdup(dsn);
-#endif
-
- /** call the implementation specific initializer **/
- if ((ret = data->init(data, dsn, options)) == NULL)
- icalset_free(data);
-
- return ret;
-}
-
-icalset* icalset_new_file(const char* path)
-{
- return icalset_new(ICAL_FILE_SET, path, NULL);
-}
-
-icalset* icalset_new_file_writer(const char* path)
-{
- return icalfileset_new_writer(path);
-}
-
-icalset* icalset_new_file_reader(const char* path)
-{
- return icalfileset_new_reader(path);
-}
-
-
-icalset* icalset_new_dir(const char* path)
-{
- return icalset_new(ICAL_DIR_SET, path, NULL);
-}
-
-icalset* icalset_new_dir_writer(const char* path)
-{
- return icaldirset_new_writer(path);
-}
-
-icalset* icalset_new_dir_reader(const char* path)
-{
- return icaldirset_new_reader(path);
-}
-
-
-
-/* Functions for built-in methods */
-
-/**
- * free memory associated with this icalset
- * automatically calls the implementation specific free routine
- */
-
-void icalset_free(icalset* set)
-{
- if (set->free)
- set->free(set);
-
- if (set->dsn)
- free(set->dsn);
-
- free(set);
-}
-
-
-const char* icalset_path(icalset* set) {
- return set->path(set);
-}
-
-void icalset_mark(icalset* set) {
- set->mark(set);
-}
-
-icalerrorenum icalset_commit(icalset* set) {
- return set->commit(set);
-}
-
-icalerrorenum icalset_add_component(icalset* set, icalcomponent* comp) {
- return set->add_component(set,comp);
-}
-
-icalerrorenum icalset_remove_component(icalset* set, icalcomponent* comp) {
- return set->remove_component(set,comp);
-}
-
-int icalset_count_components(icalset* set,icalcomponent_kind kind) {
- return set->count_components(set,kind);
-}
-
-icalerrorenum icalset_select(icalset* set, icalgauge* gauge) {
- return set->select(set, gauge);
-}
-
-void icalset_clear(icalset* set) {
- set->clear(set);
-}
-
-icalcomponent* icalset_fetch(icalset* set, const char* uid) {
- return set->fetch(set, uid);
-}
-
-icalcomponent* icalset_fetch_match(icalset* set, icalcomponent *comp) {
- return set->fetch_match(set, comp);
-}
-
-int icalset_has_uid(icalset* set, const char* uid) {
- return set->has_uid(set, uid);
-}
-
-icalerrorenum icalset_modify(icalset* set, icalcomponent *old,
- icalcomponent *new) {
- return set->modify(set, old, new);
-}
-
-icalcomponent* icalset_get_current_component(icalset* set) {
- return set->get_current_component(set);
-}
-
-icalcomponent* icalset_get_first_component(icalset* set) {
- return set->get_first_component(set);
-}
-
-icalcomponent* icalset_get_next_component(icalset* set) {
- return set->get_next_component(set);
-}
-
-icalsetiter icalsetiter_null = {{ICAL_NO_COMPONENT, 0}, 0};
-
-icalsetiter icalset_begin_component(icalset* set,
- icalcomponent_kind kind, icalgauge* gauge) {
- return set->icalset_begin_component(set, kind, gauge);
-}
-
-icalcomponent* icalsetiter_next(icalsetiter* itr) {
-
- icalcomponent* c = 0;
- icalerror_check_arg_rz( (itr != NULL), "i");
-
- do {
- c = icalcompiter_next(&(itr->iter));
- if(c != 0 && (itr->gauge == 0 ||
- icalgauge_compare(itr->gauge, c) == 1)){
- return c;
- }
- } while (c != 0);
-
- return 0;
-}
-
-icalcomponent* icalsetiter_prior(icalsetiter* i) {
-
- icalcomponent* c = 0;
- icalerror_check_arg_rz( (i != NULL), "i" );
-
- do {
- c = icalcompiter_prior(&(i->iter));
- if(c != 0 && (i->gauge == 0 ||
- icalgauge_compare(i->gauge, c) == 1)){
- return c;
- }
- } while (c != 0);
-
- return 0;
-}
-
-icalcomponent* icalsetiter_deref(icalsetiter* i) {
- icalerror_check_arg_rz( (i != NULL), "i" );
- return (icalcompiter_deref(&(i->iter)));
-}
-
-/* for subclasses that use multiple clusters that require specialized cluster traversal */
-icalcomponent* icalsetiter_to_next(icalset* set, icalsetiter* i)
-{
- return set->icalsetiter_to_next(set, i);
-}
-
-icalcomponent* icalsetiter_to_prior(icalset* set, icalsetiter* i)
-{
- return set->icalsetiter_to_prior(set, i);
-}
diff --git a/libical/src/libicalss/icalset.h b/libical/src/libicalss/icalset.h
deleted file mode 100644
index dd550e2690..0000000000
--- a/libical/src/libicalss/icalset.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* -*- Mode: C -*- */
-/**
- @file icalset.h
- @author eric 28 November 1999
-
- Icalset is the "base class" for representations of a collection of
- iCal components. Derived classes (actually delegatees) include:
-
- icalfileset Store components in a single file
- icaldirset Store components in multiple files in a directory
- icalbdbset Store components in a Berkeley DB File
- icalheapset Store components on the heap
- icalmysqlset Store components in a mysql database.
-**/
-
-/*
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
-======================================================================*/
-
-#ifndef ICALSET_H
-#define ICALSET_H
-
-#include <limits.h> /* For PATH_MAX */
-#include <libical/ical.h>
-#include <libicalss/icalgauge.h>
-
-#ifdef PATH_MAX
-#define ICAL_PATH_MAX PATH_MAX
-#else
-#define ICAL_PATH_MAX 1024
-#endif
-
-
-typedef struct icalset_impl icalset;
-
-typedef enum icalset_kind {
- ICAL_FILE_SET,
- ICAL_DIR_SET,
- ICAL_BDB_SET
-} icalset_kind;
-
-typedef struct icalsetiter
-{
- icalcompiter iter; /* icalcomponent_kind, pvl_elem iter */
- icalgauge* gauge;
- icalrecur_iterator* ritr; /*the last iterator*/
- icalcomponent* last_component; /*the pending recurring component to be processed */
- const char* tzid; /* the calendar's timezone id */
-} icalsetiter;
-
-struct icalset_impl {
- icalset_kind kind;
- int size;
- char *dsn;
- icalset* (*init)(icalset* set, const char *dsn, void *options);
- void (*free)(icalset* set);
- const char* (*path)(icalset* set);
- void (*mark)(icalset* set);
- icalerrorenum (*commit)(icalset* set);
- icalerrorenum (*add_component)(icalset* set, icalcomponent* comp);
- icalerrorenum (*remove_component)(icalset* set, icalcomponent* comp);
- int (*count_components)(icalset* set,
- icalcomponent_kind kind);
- icalerrorenum (*select)(icalset* set, icalgauge* gauge);
- void (*clear)(icalset* set);
- icalcomponent* (*fetch)(icalset* set, const char* uid);
- icalcomponent* (*fetch_match)(icalset* set, icalcomponent *comp);
- int (*has_uid)(icalset* set, const char* uid);
- icalerrorenum (*modify)(icalset* set, icalcomponent *old,
- icalcomponent *newc);
- icalcomponent* (*get_current_component)(icalset* set);
- icalcomponent* (*get_first_component)(icalset* set);
- icalcomponent* (*get_next_component)(icalset* set);
- icalsetiter (*icalset_begin_component)(icalset* set,
- icalcomponent_kind kind, icalgauge* gauge);
- icalcomponent* (*icalsetiter_to_next)(icalset* set, icalsetiter* i);
- icalcomponent* (*icalsetiter_to_prior)(icalset* set, icalsetiter* i);
-};
-
-/** @brief Register a new derived class */
-int icalset_register_class(icalset *set);
-
-
-/** @brief Generic icalset constructor
- *
- * @param kind The type of icalset to create
- * @param dsn Data Source Name - usually a pathname or DB handle
- * @param options Any implementation specific options
- *
- * @return A valid icalset reference or NULL if error.
- *
- * This creates any of the icalset types available.
- */
-
-icalset* icalset_new(icalset_kind kind, const char* dsn, void* options);
-
-icalset* icalset_new_file(const char* path);
-icalset* icalset_new_file_reader(const char* path);
-icalset* icalset_new_file_writer(const char* path);
-
-icalset* icalset_new_dir(const char* path);
-icalset* icalset_new_file_reader(const char* path);
-icalset* icalset_new_file_writer(const char* path);
-
-void icalset_free(icalset* set);
-
-const char* icalset_path(icalset* set);
-
-/** Mark the cluster as changed, so it will be written to disk when it
- is freed. **/
-void icalset_mark(icalset* set);
-
-/** Write changes to disk immediately */
-icalerrorenum icalset_commit(icalset* set);
-
-icalerrorenum icalset_add_component(icalset* set, icalcomponent* comp);
-icalerrorenum icalset_remove_component(icalset* set, icalcomponent* comp);
-
-int icalset_count_components(icalset* set,
- icalcomponent_kind kind);
-
-/** Restrict the component returned by icalset_first, _next to those
- that pass the gauge. */
-icalerrorenum icalset_select(icalset* set, icalgauge* gauge);
-
-/** Clears the gauge defined by icalset_select() */
-void icalset_clear_select(icalset* set);
-
-/** Get a component by uid */
-icalcomponent* icalset_fetch(icalset* set, const char* uid);
-
-int icalset_has_uid(icalset* set, const char* uid);
-icalcomponent* icalset_fetch_match(icalset* set, icalcomponent *c);
-
-/** Modify components according to the MODIFY method of CAP. Works on
- the currently selected components. */
-icalerrorenum icalset_modify(icalset* set, icalcomponent *oldc,
- icalcomponent *newc);
-
-/** Iterate through the components. If a guage has been defined, these
- will skip over components that do not pass the gauge */
-
-icalcomponent* icalset_get_current_component(icalset* set);
-icalcomponent* icalset_get_first_component(icalset* set);
-icalcomponent* icalset_get_next_component(icalset* set);
-
-/** External Iterator with gauge - for thread safety */
-extern icalsetiter icalsetiter_null;
-
-icalsetiter icalset_begin_component(icalset* set,
- icalcomponent_kind kind, icalgauge* gauge);
-
-/** Default _next, _prior, _deref for subclasses that use single cluster */
-icalcomponent* icalsetiter_next(icalsetiter* i);
-icalcomponent* icalsetiter_prior(icalsetiter* i);
-icalcomponent* icalsetiter_deref(icalsetiter* i);
-
-/** for subclasses that use multiple clusters that require specialized cluster traversal */
-icalcomponent* icalsetiter_to_next(icalset* set, icalsetiter* i);
-icalcomponent* icalsetiter_to_prior(icalset* set, icalsetiter* i);
-
-#endif /* !ICALSET_H */
-
-
-
diff --git a/libical/src/libicalss/icalspanlist.c b/libical/src/libicalss/icalspanlist.c
deleted file mode 100644
index 6c366fa5ba..0000000000
--- a/libical/src/libicalss/icalspanlist.c
+++ /dev/null
@@ -1,567 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalspanlist.c
- CREATOR: ebusboom 23 aug 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <libical/ical.h>
-#include "icalspanlist.h"
-
-#include <stdlib.h> /* for free and malloc */
-#include <string.h>
-
-struct icalspanlist_impl {
- pvl_list spans; /**< list of icaltime_span data **/
- struct icaltimetype start; /**< start time of span **/
- struct icaltimetype end; /**< end time of span **/
-};
-
-/** @brief Internal comparison function for two spans
- *
- * @param a a spanlist.
- * @param b another spanlist.
- *
- * @return -1, 0, 1 depending on the comparison of the start times.
- *
- * Used to insert spans into the tree in sorted order.
- */
-
-static int compare_span(void* a, void* b)
-{
- struct icaltime_span *span_a = (struct icaltime_span *)a ;
- struct icaltime_span *span_b = (struct icaltime_span *)b ;
-
- if(span_a->start == span_b->start){
- return 0;
- } else if(span_a->start < span_b->start){
- return -1;
- } else { /*if(span_a->start > span->b.start)*/
- return 1;
- }
-}
-
-
-/** @brief callback function for collecting spanlists of a
- * series of events.
- *
- * @param comp A valid icalcomponent.
- * @param span The span to insert into data.
- * @param data The actual spanlist to insert into
- *
- * This callback is used by icalcomponent_foreach_recurrence()
- * to build up a spanlist.
- */
-
-static void icalspanlist_new_callback(icalcomponent *comp,
- struct icaltime_span *span,
- void *data)
-{
- icaltime_span *s;
- icalspanlist *sl = (icalspanlist*) data;
-
- if (span->is_busy == 0)
- return;
-
- if ((s=(icaltime_span *) malloc(sizeof(icaltime_span))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- /** copy span data into allocated memory.. **/
- *s = *span;
- pvl_insert_ordered(sl->spans, compare_span, (void*)s);
-}
-
-
-
-/** @brief Make a free list from a set of VEVENT components.
- *
- * @param set A valid icalset containing VEVENTS
- * @param start The free list starts at this date/time
- * @param end The free list ends at this date/time
- *
- * @return A spanlist corresponding to the VEVENTS
- *
- * Given a set of components, a start time and an end time
- * return a spanlist that contains the free/busy times.
- */
-
-icalspanlist* icalspanlist_new(icalset *set,
- struct icaltimetype start,
- struct icaltimetype end)
-{
- struct icaltime_span range;
- pvl_elem itr;
- icalcomponent *c,*inner;
- icalcomponent_kind kind, inner_kind;
- icalspanlist *sl;
- struct icaltime_span *freetime;
-
- if ( ( sl = (struct icalspanlist_impl*)
- malloc(sizeof(struct icalspanlist_impl))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- sl->spans = pvl_newlist();
- sl->start = start;
- sl->end = end;
-
- range.start = icaltime_as_timet(start);
- range.end = icaltime_as_timet(end);
-
- /* Get a list of spans of busy time from the events in the set
- and order the spans based on the start time */
-
- for(c = icalset_get_first_component(set);
- c != 0;
- c = icalset_get_next_component(set)){
-
- kind = icalcomponent_isa(c);
- inner = icalcomponent_get_inner(c);
-
- if(!inner){
- continue;
- }
-
- inner_kind = icalcomponent_isa(inner);
-
- if( kind != ICAL_VEVENT_COMPONENT &&
- inner_kind != ICAL_VEVENT_COMPONENT){
- continue;
- }
-
- icalerror_clear_errno();
-
- icalcomponent_foreach_recurrence(c, start, end,
- icalspanlist_new_callback,
- (void*)sl);
-
- }
-
- /* Now Fill in the free time spans. loop through the spans. if the
- start of the range is not within the span, create a free entry
- that runs from the start of the range to the start of the
- span. */
-
- for( itr = pvl_head(sl->spans);
- itr != 0;
- itr = pvl_next(itr))
- {
- struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr);
-
- if ((freetime=(struct icaltime_span *)
- malloc(sizeof(struct icaltime_span))) == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- if(range.start < s->start){
- freetime->start = range.start;
- freetime->end = s->start;
-
- freetime->is_busy = 0;
-
-
- pvl_insert_ordered(sl->spans,compare_span,(void*)freetime);
- } else {
- free(freetime);
- }
-
- range.start = s->end;
- }
-
- /* If the end of the range is null, then assume that everything
- after the last item in the calendar is open and add a span
- that indicates this */
-
- if( icaltime_is_null_time(end)){
- struct icaltime_span* last_span;
-
- last_span = (struct icaltime_span*)pvl_data(pvl_tail(sl->spans));
-
- if (last_span != 0){
-
- if ((freetime=(struct icaltime_span *)
- malloc(sizeof(struct icaltime_span))) == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- freetime->is_busy = 0;
- freetime->start = last_span->end;
- freetime->end = freetime->start;
- pvl_insert_ordered(sl->spans,compare_span,(void*)freetime);
- }
- }
-
-
- return sl;
-}
-
-/** @brief Destructor.
- * @param s A valid icalspanlist
- *
- * Free memory associated with the spanlist
- */
-
-void icalspanlist_free(icalspanlist* s)
-{
- struct icaltime_span *span;
-
- if (s == NULL)
- return;
-
- while( (span=pvl_pop(s->spans)) != 0){
- free(span);
- }
-
- pvl_free(s->spans);
-
- s->spans = 0;
-
- free(s);
-}
-
-
-/** @brief (Debug) print out spanlist to stdout.
- * @param sl A valid icalspanlist.
- */
-
-void icalspanlist_dump(icalspanlist* sl){
- int i = 0;
- pvl_elem itr;
-
- for( itr = pvl_head(sl->spans);
- itr != 0;
- itr = pvl_next(itr))
- {
- struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr);
-
- printf("#%02d %d start: %s",++i,s->is_busy,ctime(&s->start));
- printf(" end : %s",ctime(&s->end));
-
- }
-}
-
-icalcomponent* icalspanlist_make_free_list(icalspanlist* sl);
-icalcomponent* icalspanlist_make_busy_list(icalspanlist* sl);
-
-
-/** @brief Find next free time span in a spanlist.
- *
- * @param sl The spanlist to search.
- * @param t The time to start looking.
- *
- * Given a spanlist and a time, find the next period of time
- * that is free
- */
-
-struct icalperiodtype icalspanlist_next_free_time(icalspanlist* sl,
- struct icaltimetype t)
-{
- pvl_elem itr;
- struct icalperiodtype period;
- struct icaltime_span *s;
-
- time_t rangett= icaltime_as_timet(t);
-
- period.start = icaltime_null_time();
- period.end = icaltime_null_time();
-
- itr = pvl_head(sl->spans);
- s = (struct icaltime_span *)pvl_data(itr);
-
- if (s == 0){
- /* No elements in span */
- return period;
- }
-
- /* Is the reference time before the first span? If so, assume
- that the reference time is free */
- if(rangett <s->start ){
- /* End of period is start of first span if span is busy, end
- of the span if it is free */
- period.start = t;
-
- if (s->is_busy == 1){
- period.end = icaltime_from_timet(s->start,0);
- } else {
- period.end = icaltime_from_timet(s->end,0);
- }
-
- return period;
- }
-
- /* Otherwise, find the first free span that contains the
- reference time. */
- for( itr = pvl_head(sl->spans);
- itr != 0;
- itr = pvl_next(itr))
- {
- s = (struct icaltime_span *)pvl_data(itr);
-
- if(s->is_busy == 0 && s->start >= rangett &&
- ( rangett < s->end || s->end == s->start)){
-
- if (rangett < s->start){
- period.start = icaltime_from_timet(s->start,0);
- } else {
- period.start = icaltime_from_timet(rangett,0);
- }
-
- period.end = icaltime_from_timet(s->end,0);
-
- return period;
- }
-
- }
-
- period.start = icaltime_null_time();
- period.end = icaltime_null_time();
-
- return period;
-}
-
-struct icalperiodtype icalspanlist_next_busy_time(icalspanlist* sl,
- struct icaltimetype t);
-
-
-/** @brief Returns an hour-by-hour array of free/busy times over a
- * given period.
- *
- * @param sl A valid icalspanlist
- * @param delta_t The time slice to divide by, in seconds. Default 3600.
- *
- * @return A pointer to an array of integers containing the number of
- * busy events in each delta_t time period. The final entry
- * contains the value -1.
- *
- * This calculation is somewhat tricky. This is due to the fact that
- * the time range contains the start time, but does not contain the
- * end time. To perform a proper calculation we subtract one second
- * off the end times to get a true containing time.
- *
- * Also note that if you supplying a spanlist that does not start or
- * end on a time boundary divisible by delta_t you may get results
- * that are not quite what you expect.
- */
-
-int* icalspanlist_as_freebusy_matrix(icalspanlist* sl, int delta_t) {
- pvl_elem itr;
- int spanduration_secs;
- int *matrix;
- int matrix_slots;
- time_t sl_start, sl_end;
-
- icalerror_check_arg_rz( (sl!=0), "spanlist");
-
- if (!delta_t)
- delta_t = 3600;
-
- /** calculate the start and end time as time_t **/
- sl_start = icaltime_as_timet_with_zone(sl->start, icaltimezone_get_utc_timezone());
- sl_end = icaltime_as_timet_with_zone(sl->end, icaltimezone_get_utc_timezone());
-
-
- /** insure that the time period falls on a time boundary divisable
- by delta_t */
-
- sl_start /= delta_t;
- sl_start *= delta_t;
-
- sl_end /= delta_t;
- sl_end *= delta_t;
-
-
- /** find the duration of this spanlist **/
- spanduration_secs = sl_end - sl_start;
-
-
- /** malloc our matrix, add one extra slot for a final -1 **/
- matrix_slots = spanduration_secs/delta_t + 1;
-
- matrix = (int*) malloc(sizeof(int) * matrix_slots);
- if (matrix == NULL) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return NULL;
- }
- memset(matrix, 0, sizeof(int) * matrix_slots);
- matrix[matrix_slots-1] = -1;
-
- /* loop through each span and mark the slots in the array */
-
- for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) {
- struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr);
-
- if (s->is_busy == 1) {
- int offset_start = s->start/delta_t - sl_start/delta_t;
- int offset_end = (s->end - 1) /delta_t - sl_start/delta_t + 1;
- int i;
-
- if (offset_end >= matrix_slots)
- offset_end = matrix_slots - 1;
-
- i = offset_start;
- for (i=offset_start; i < offset_end; i++) {
- matrix[i]++;
- }
- }
- }
- return matrix;
-}
-
-
-/** @brief Return a VFREEBUSY component for the corresponding spanlist
- *
- * @param sl A valid icalspanlist, from icalspanlist_new()
- * @param organizer The organizer specified as MAILTO:user@domain
- * @param attendee The attendee specified as MAILTO:user@domain
- *
- * @return A valid icalcomponent or NULL.
- *
- * This function returns a VFREEBUSY component for the given spanlist.
- * The start time is mapped to DTSTART, the end time to DTEND.
- * Each busy span is represented as a separate FREEBUSY entry.
- * An attendee parameter is required, and organizer parameter is
- * optional.
- */
-
-icalcomponent *icalspanlist_as_vfreebusy(icalspanlist* sl,
- const char* organizer,
- const char* attendee) {
- icalcomponent *comp;
- icalproperty *p;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
- pvl_elem itr;
- icaltimezone *utc_zone;
- icalparameter *param;
-
- if (!attendee) {
- icalerror_set_errno(ICAL_USAGE_ERROR);
- return 0;
- }
-
- utc_zone = icaltimezone_get_utc_timezone ();
-
- comp = icalcomponent_new_vfreebusy();
-
- icalcomponent_add_property(comp, icalproperty_new_dtstart(sl->start));
- icalcomponent_add_property(comp, icalproperty_new_dtend(sl->end));
- icalcomponent_add_property(comp, icalproperty_new_dtstamp(atime));
-
- if (organizer) {
- icalcomponent_add_property(comp, icalproperty_new_organizer(organizer));
- }
- icalcomponent_add_property(comp, icalproperty_new_attendee(attendee));
-
- /* now add the freebusy sections.. */
-
- for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) {
- struct icalperiodtype period;
- struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr);
-
- if (s->is_busy == 1) {
-
- period.start = icaltime_from_timet_with_zone (s->start, 0, utc_zone);
- period.end = icaltime_from_timet_with_zone (s->end, 0, utc_zone);
- period.duration = icaldurationtype_null_duration();
-
-
- p = icalproperty_new_freebusy(period);
- param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSY);
- icalproperty_add_parameter(p, param);
-
- icalcomponent_add_property(comp, p);
- }
-
- }
-
- return comp;
-}
-
-
-/** @brief Return a spanlist corresponding to the VFREEBUSY portion of
- * an icalcomponent.
- *
- * @param c A valid icalcomponent.
- *
- * @return A valid icalspanlist or NULL if no VFREEBUSY section.
- *
- */
-
-
-icalspanlist *icalspanlist_from_vfreebusy(icalcomponent* comp)
-{
- icalcomponent *inner;
- icalproperty *prop;
- icalspanlist *sl;
-
- icalerror_check_arg_rz((comp != NULL), "comp");
-
- inner = icalcomponent_get_inner(comp);
- if (!inner) return NULL;
-
- if ( ( sl = (icalspanlist*) malloc(sizeof(icalspanlist))) == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
- sl->spans = pvl_newlist();
-
- /* cycle through each FREEBUSY property, adding to the spanlist */
- for (prop = icalcomponent_get_first_property(inner, ICAL_FREEBUSY_PROPERTY);
- prop != NULL;
- prop = icalcomponent_get_next_property(inner, ICAL_FREEBUSY_PROPERTY)) {
- icaltime_span *s = (icaltime_span *) malloc(sizeof(icaltime_span));
- icalparameter *param;
- struct icalperiodtype period;
- icalparameter_fbtype fbtype;
-
- if (s == 0) {
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return 0;
- }
-
- param = icalproperty_get_first_parameter(prop, ICAL_FBTYPE_PARAMETER);
- fbtype = (param) ? icalparameter_get_fbtype(param) : ICAL_FBTYPE_BUSY;
-
- switch (fbtype) {
- case ICAL_FBTYPE_FREE:
- case ICAL_FBTYPE_NONE:
- case ICAL_FBTYPE_X:
- s->is_busy = 1;
- default:
- s->is_busy = 0;
- }
-
- period = icalproperty_get_freebusy(prop);
- s->start = icaltime_as_timet_with_zone(period.start, icaltimezone_get_utc_timezone());
- s->end = icaltime_as_timet_with_zone(period.end, icaltimezone_get_utc_timezone());
-;
- pvl_insert_ordered(sl->spans, compare_span, (void*)s);
- }
- /** @todo calculate start/end limits.. fill in holes? **/
- return sl;
-}
diff --git a/libical/src/libicalss/icalspanlist.h b/libical/src/libicalss/icalspanlist.h
deleted file mode 100644
index 084cb9afeb..0000000000
--- a/libical/src/libicalss/icalspanlist.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalspanlist.h
- CREATOR: eric 21 Aug 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- =========================================================================*/
-#ifndef ICALSPANLIST_H
-#define ICALSPANLIST_H
-
-#include <libical/ical.h>
-#include <libicalss/icalset.h>
-
-/** @file icalspanlist.h
- * @brief Code that supports collections of free/busy spans of time
- */
-
-typedef struct icalspanlist_impl icalspanlist;
-
-
-/** @brief Constructor
- * Make a free list from a set of component. Start and end should be in UTC
- */
-
-icalspanlist* icalspanlist_new(icalset *set,
- struct icaltimetype start,
- struct icaltimetype end);
-
-/** @brief Destructor
- */
-void icalspanlist_free(icalspanlist* spl);
-
-/* Unimplemented functions */
-icalcomponent* icalspanlist_make_free_list(icalspanlist* sl);
-icalcomponent* icalspanlist_make_busy_list(icalspanlist* sl);
-
-/** Get first next free time after time t. all times are in UTC. */
-struct icalperiodtype icalspanlist_next_free_time(icalspanlist* sl,
- struct icaltimetype t);
-/** Get first next busy time after time t. all times are in UTC. */
-struct icalperiodtype icalspanlist_next_busy_time(icalspanlist* sl,
- struct icaltimetype t);
-
-void icalspanlist_dump(icalspanlist* s);
-
-/** @brief Return a valid VFREEBUSY component for this span */
-icalcomponent *icalspanlist_as_vfreebusy(icalspanlist* s_in,
- const char* organizer,
- const char* attendee);
-
-/** @brief Return an integer matrix of total events per delta_t timespan */
-int *icalspanlist_as_freebusy_matrix(icalspanlist* span, int delta_t);
-
-/** @brief Construct an icalspanlist from a VFREEBUSY component */
-icalspanlist *icalspanlist_from_vfreebusy(icalcomponent* c);
-
-#endif
-
-
-
diff --git a/libical/src/libicalss/icalspanlist_cxx.cpp b/libical/src/libicalss/icalspanlist_cxx.cpp
deleted file mode 100644
index 38761af4c6..0000000000
--- a/libical/src/libicalss/icalspanlist_cxx.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "icalspanlist_cxx.h"
-#include <exception>
-
-/** @brief Construct an ICalSpanList from an icalset
- @param set The icalset containing the VEVENTS
- @param start Designated start of the spanlist
- @param end Designated end of the spanlist
-*/
-
-ICalSpanList::ICalSpanList(icalset *set, icaltimetype start, icaltimetype end) throw(icalerrorenum)
-{
- data = icalspanlist_new(set, start, end);
- if (!data) throw icalerrno;
-};
-
-
-/** @brief Constructor
- @param comp A valid icalcomponent with a VFREEBUSY section
-*/
-
-ICalSpanList::ICalSpanList(icalcomponent *comp) throw(icalerrorenum)
-{
- data = icalspanlist_from_vfreebusy(comp);
- if (!data) throw icalerrno;
-}
-
-/** @brief Constructor
- @param comp A valid VComponent with a VFREEBUSY section
-*/
-ICalSpanList::ICalSpanList(VComponent &comp) throw(icalerrorenum)
-{
- data = icalspanlist_from_vfreebusy((icalcomponent*) comp);
- if (!data) throw icalerrno;
-}
-
-/** Destructor */
-ICalSpanList::~ICalSpanList() {
- if (data)
- icalspanlist_free(data);
-}
-
-
-/**
- * @brief Returns a VFREEBUSY component for the object.
- *
- * @see icalspanlist_as_vfreebusy()
- */
-
-VComponent*
-ICalSpanList::get_vfreebusy(const char *organizer, const char *attendee) throw(icalerrorenum)
-{
- icalcomponent *comp;
- VComponent *vcomp;
-
- comp = icalspanlist_as_vfreebusy(data, organizer, attendee);
- if (comp == 0) throw icalerrno;
-
- vcomp = new VComponent(comp);
- if (vcomp == 0) throw icalerrno;
-
- return vcomp;
-}
-
-
-/**
- * @brief Returns a summary of events over delta_t
- *
- * @param delta_t Number of seconds to divide the spanlist time period
- * into.
- *
- * This method calculates the total number of events in each time slot
- * of delta_t seconds.
- *
- * @see icalspanlist_as_freebusy_matrix()
- */
-
-std::vector<int> ICalSpanList::as_vector(int delta_t) throw(icalerrorenum)
-{
- int *matrix;
- int i = 0;
- std::vector<int> event_vec;
-
- matrix = icalspanlist_as_freebusy_matrix(data, delta_t);
-
- if (!matrix) throw ICAL_USAGE_ERROR;
-
- while (matrix[i] != -1) {
- event_vec.push_back(matrix[i]); // Add item at end of vector
- }
-
- return(event_vec);
-}
diff --git a/libical/src/libicalss/icalspanlist_cxx.h b/libical/src/libicalss/icalspanlist_cxx.h
deleted file mode 100644
index cf81f13003..0000000000
--- a/libical/src/libicalss/icalspanlist_cxx.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C++ -*- */
-
-/**
- * @file icalspanlist_cxx.h
- * @author Critical Path
- * @brief C++ class wrapping the icalspanlist data structure
- *
- * This class wraps the icalspanlist routines in libicalss
- *
- * Errors within libicalss are propagated via exceptions of type
- * icalerrorenum. See icalerror.h for the complete list of exceptions
- * that might be thrown.
- */
-
-#ifndef ICALSPANLIST_CXX_H
-#define ICALSPANLIST_CXX_H
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-#include "vcomponent.h"
-#include <vector> /* For as_matrix.. */
-
-class ICalSpanList {
- public:
- /** Construct an ICalSpanList from an icalset */
- ICalSpanList(icalset *set, icaltimetype start, icaltimetype end) throw(icalerrorenum);
-
- /** Construct an ICalSpanList from the VFREEBUSY chunk of a icalcomponent */
- ICalSpanList(icalcomponent *comp) throw(icalerrorenum);
-
- /** Construct an ICalSpanList from the VFREEBUSY chunk of a vcomponent */
- ICalSpanList(VComponent &comp) throw(icalerrorenum);
-
- /** Destructor */
- ~ICalSpanList();
-
- /** Return a VFREEBUSY icalcomponent */
- VComponent* get_vfreebusy(const char *organizer, const char *attendee) throw(icalerrorenum);
-
- /** Return the base data when casting */
- operator icalspanlist*() {return data;}
-
- /** Return a vector of the number of events over delta t */
- std::vector<int> as_vector(int delta_t) throw(icalerrorenum);
-
- /** Dump the spanlist to stdout */
- void dump() {icalspanlist_dump(data);}
-
- private:
- icalspanlist *data;
-};
-
-#endif
diff --git a/libical/src/libicalss/icalss.h b/libical/src/libicalss/icalss.h
deleted file mode 100644
index f2e543a260..0000000000
--- a/libical/src/libicalss/icalss.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#include <libicalss/icalgauge.h>
-#include <libicalss/icalcluster.h>
-#include <libicalss/icalfileset.h>
-#include <libicalss/icaldirset.h>
-#include <libicalss/icalcalendar.h>
-#include <libicalss/icalclassify.h>
-#include <libicalss/icalspanlist.h>
-#include <libicalss/icalmessage.h>
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
diff --git a/libical/src/libicalss/icalsslexer.l b/libical/src/libicalss/icalsslexer.l
deleted file mode 100644
index b6bc4dee05..0000000000
--- a/libical/src/libicalss/icalsslexer.l
+++ /dev/null
@@ -1,134 +0,0 @@
-%{
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalsslexer.l
- CREATOR: eric 8 Aug 2000
-
- DESCRIPTION:
-
- $Id: icalsslexer.l,v 1.5 2003/10/21 18:28:18 ettore Exp $
- $Locker: $
-
-(C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
- ======================================================================*/
-
-#include "icalssyacc.h"
-#include "icalgaugeimpl.h"
-#include "assert.h"
-
-#include <string.h> /* For strdup() */
-
-const char* input_buffer;
-const char* input_buffer_p;
-
-#define min(a,b) ((a) < (b) ? (a) : (b))
-
-int icalss_input(char* buf, int max_size)
-{
- int n = min(max_size,strlen(input_buffer_p));
-
- if (n > 0){
- memcpy(buf, input_buffer_p, n);
- input_buffer_p += n;
- return n;
- } else {
- return 0;
- }
-}
-
-#undef YY_INPUT
-#define YY_INPUT(b,r,ms) ( r= icalss_input(b,ms))
-
-#undef SS_FATAL_ERROR
-#define SS_FATAL_ERROR(msg) sserror(msg)
-
-%}
-
-crlf \x0D?\x0A
-space [ ]
-qsafechar [^\x00-\x1F\"]
-safechar [^\x00-\x1F\"\:\;\,]
-tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E]
-valuechar [^\x00-\x08\x10-\x1F]
-xname X-[a-zA-Z0-9\-]+
-xname2 [a-zA-Z0-9\-\ ]
-paramtext {safechar}+
-value {valuechar}+
-quotedstring \"{qsafechar}+\"
-digit [0-9]
-
-%array /* Make yytext an array. Slow, but handy. HACK */
-
-%option caseless
-
-%s sql string_value
-
-
-
-%%
-
-%{
-%}
-
-
-SELECT { return SELECT; }
-FROM { return FROM; }
-WHERE { return WHERE; }
-, { return COMMA; }
-"=" { return EQUALS; }
-"==" { return EQUALS; }
-"!=" { return NOTEQUALS; }
-"<" { return LESS; }
-">" { return GREATER; }
-"<=" { return LESSEQUALS; }
-">=" { return GREATEREQUALS; }
-AND { return AND; }
-OR { return OR; }
-IS { return IS; }
-NOT { return NOT; }
-NULL { return SQLNULL; }
-\' { return QUOTE; }
-[ \t\n\r]+ ;
-; { return EOL; }
-
-\'[\@\*A-Za-z0-9\-\.\:\ ]+\' {
- int c = input();
- unput(c);
- if(c!='\''){
- sslval.v_string= icalmemory_tmp_copy(yytext);
- return STRING;
- } else {
- /*ssmore();*/
- }
-}
-
-[\@\*A-Za-z0-9\-\.]+ {
- sslval.v_string= icalmemory_tmp_copy(yytext);
- return STRING;
-}
-
-
-. { return yytext[0]; }
-
-%%
-
-int yywrap()
-{
- return 1;
-}
-
diff --git a/libical/src/libicalss/icalssutil.c b/libical/src/libicalss/icalssutil.c
deleted file mode 100644
index 8db141d41d..0000000000
--- a/libical/src/libicalss/icalssutil.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalssutil.c
- CREATOR: ebusboom 23 aug 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-
diff --git a/libical/src/libicalss/icalssutil.h b/libical/src/libicalss/icalssutil.h
deleted file mode 100644
index 22be0202b1..0000000000
--- a/libical/src/libicalss/icalssutil.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C -*- */
-/*======================================================================
- FILE: icalssutil.h
- CREATOR: eric 21 Aug 2000
-
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
-
- =========================================================================*/
-
-#include <libical/ical.h>
-
diff --git a/libical/src/libicalss/icalssyacc.h b/libical/src/libicalss/icalssyacc.h
deleted file mode 100644
index 192f4f76b5..0000000000
--- a/libical/src/libicalss/icalssyacc.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef BISON_Y_TAB_H
-# define BISON_Y_TAB_H
-
-#ifndef YYSTYPE
-typedef union {
- char* v_string;
-} yystype;
-# define YYSTYPE yystype
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-# define STRING 257
-# define SELECT 258
-# define FROM 259
-# define WHERE 260
-# define COMMA 261
-# define QUOTE 262
-# define EQUALS 263
-# define NOTEQUALS 264
-# define LESS 265
-# define GREATER 266
-# define LESSEQUALS 267
-# define GREATEREQUALS 268
-# define AND 269
-# define OR 270
-# define EOL 271
-# define END 272
-# define IS 273
-# define NOT 274
-# define SQLNULL 275
-
-
-extern YYSTYPE sslval;
-
-#endif /* not BISON_Y_TAB_H */
diff --git a/libical/src/libicalss/icalssyacc.y b/libical/src/libicalss/icalssyacc.y
deleted file mode 100644
index 101adc8383..0000000000
--- a/libical/src/libicalss/icalssyacc.y
+++ /dev/null
@@ -1,249 +0,0 @@
-%{
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icalssyacc.y
- CREATOR: eric 08 Aug 2000
-
- DESCRIPTION:
-
- $Id: icalssyacc.y,v 1.4 2003/10/21 18:28:18 ettore Exp $
- $Locker: $
-
-(C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Original Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
- ======================================================================*/
-/*#define YYDEBUG 1*/
-#include <stdlib.h>
-#include <string.h> /* for strdup() */
-#include <limits.h> /* for SHRT_MAX*/
-#include <libical/ical.h>
-#include "icalgauge.h"
-#include "icalgaugeimpl.h"
-
-extern struct icalgauge_impl *icalss_yy_gauge;
-
-#define YYPARSE_PARAM yy_globals
-#define YYLEX_PARAM yy_globals
-#define YY_EXTRA_TYPE icalgauge_impl*
-
-
-static void ssyacc_add_where(struct icalgauge_impl* impl, char* prop,
- icalgaugecompare compare , char* value);
-static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1);
-static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1);
-static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l);
-void sserror(char *s); /* Don't know why I need this.... */
-
-%}
-
-%union {
- char* v_string;
-}
-
-
-%token <v_string> STRING
-%token SELECT FROM WHERE COMMA QUOTE EQUALS NOTEQUALS LESS GREATER LESSEQUALS
-%token GREATEREQUALS AND OR EOL END IS NOT SQLNULL
-
-%%
-
-query_min: SELECT select_list FROM from_list WHERE where_list
- | SELECT select_list FROM from_list
- | error {
- yyclearin;
- YYABORT;
- }
- ;
-
-select_list:
- STRING {ssyacc_add_select(icalss_yy_gauge,$1);}
- | select_list COMMA STRING {ssyacc_add_select(icalss_yy_gauge,$3);}
- ;
-
-
-from_list:
- STRING {ssyacc_add_from(icalss_yy_gauge,$1);}
- | from_list COMMA STRING {ssyacc_add_from(icalss_yy_gauge,$3);}
- ;
-
-where_clause:
- /* Empty */
- | STRING EQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_EQUAL,$3); }
- | STRING IS SQLNULL {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_ISNULL,""); }
- | STRING IS NOT SQLNULL {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_ISNOTNULL,""); }
- | STRING NOTEQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_NOTEQUAL,$3); }
- | STRING LESS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_LESS,$3); }
- | STRING GREATER STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_GREATER,$3); }
- | STRING LESSEQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_LESSEQUAL,$3); }
- | STRING GREATEREQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_GREATEREQUAL,$3); }
- ;
-
-where_list:
- where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_NONE);}
- | where_list AND where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_AND);}
- | where_list OR where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_OR);}
- ;
-
-
-%%
-
-static void ssyacc_add_where(struct icalgauge_impl* impl, char* str1,
- icalgaugecompare compare , char* value_str)
-{
-
- struct icalgauge_where *where;
- char *compstr, *propstr, *c, *s,*l;
-
- if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- memset(where,0,sizeof(struct icalgauge_where));
- where->logic = ICALGAUGELOGIC_NONE;
- where->compare = ICALGAUGECOMPARE_NONE;
- where->comp = ICAL_NO_COMPONENT;
- where->prop = ICAL_NO_PROPERTY;
-
- /* remove enclosing quotes */
- s = value_str;
- if(*s == '\''){
- s++;
- }
- l = s+strlen(s)-1;
- if(*l == '\''){
- *l=0;
- }
-
- where->value = strdup(s);
-
- /* Is there a period in str1 ? If so, the string specified both a
- component and a property*/
- if( (c = strrchr(str1,'.')) != 0){
- compstr = str1;
- propstr = c+1;
- *c = '\0';
- } else {
- compstr = 0;
- propstr = str1;
- }
-
-
- /* Handle the case where a component was specified */
- if(compstr != 0){
- where->comp = icalenum_string_to_component_kind(compstr);
- } else {
- where->comp = ICAL_NO_COMPONENT;
- }
-
- where->prop = icalenum_string_to_property_kind(propstr);
-
- where->compare = compare;
-
- if(where->value == 0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- free(where->value);
- return;
- }
-
- pvl_push(impl->where,where);
-}
-
-static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l)
-{
- pvl_elem e = pvl_tail(impl->where);
- struct icalgauge_where *where = pvl_data(e);
-
- where->logic = l;
-
-}
-
-
-
-static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1)
-{
- char *c, *compstr, *propstr;
- struct icalgauge_where *where;
-
- /* Uses only the prop and comp fields of the where structure */
- if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){
- icalerror_set_errno(ICAL_NEWFAILED_ERROR);
- return;
- }
-
- memset(where,0,sizeof(struct icalgauge_where));
- where->logic = ICALGAUGELOGIC_NONE;
- where->compare = ICALGAUGECOMPARE_NONE;
- where->comp = ICAL_NO_COMPONENT;
- where->prop = ICAL_NO_PROPERTY;
-
- /* Is there a period in str1 ? If so, the string specified both a
- component and a property*/
- if( (c = strrchr(str1,'.')) != 0){
- compstr = str1;
- propstr = c+1;
- *c = '\0';
- } else {
- compstr = 0;
- propstr = str1;
- }
-
-
- /* Handle the case where a component was specified */
- if(compstr != 0){
- where->comp = icalenum_string_to_component_kind(compstr);
- } else {
- where->comp = ICAL_NO_COMPONENT;
- }
-
-
- /* If the property was '*', then accept all properties */
- if(strcmp("*",propstr) == 0) {
- where->prop = ICAL_ANY_PROPERTY;
- } else {
- where->prop = icalenum_string_to_property_kind(propstr);
- }
-
-
- if(where->prop == ICAL_NO_PROPERTY){
- free(where);
- icalerror_set_errno(ICAL_BADARG_ERROR);
- return;
- }
-
- pvl_push(impl->select,where);
-}
-
-static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1)
-{
- icalcomponent_kind ckind;
-
- ckind = icalenum_string_to_component_kind(str1);
-
- if(ckind == ICAL_NO_COMPONENT){
- assert(0);
- }
-
- pvl_push(impl->from,(void*)ckind);
-
-}
-
-
-void sserror(char *s){
- fprintf(stderr,"Parse error \'%s\'\n", s);
- icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
-}
diff --git a/libical/src/libicalvcal/.cvsignore b/libical/src/libicalvcal/.cvsignore
deleted file mode 100644
index 6e5ca7ed41..0000000000
--- a/libical/src/libicalvcal/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/src/libicalvcal/Makefile.am b/libical/src/libicalvcal/Makefile.am
deleted file mode 100644
index b57a020049..0000000000
--- a/libical/src/libicalvcal/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-noinst_LTLIBRARIES = libicalvcal-evolution.la
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/src
-
-libicalvcal_evolution_la_LDFLAGS = -version-info 0:0:0
-
-if DEV
-libicalvcal_evolution_la_DEVSOURCES = vcc.y
-else
-libicalvcal_evolution_la_DEVSOURCES = vcc.c
-endif
-
-
-libicalvcal_evolution_la_SOURCES = \
- icalvcal.h \
- icalvcal.c \
- port.h \
- vcc.h \
- vobject.h \
- vobject.c \
- vcaltmp.h \
- vcaltmp.c \
- $(libicalvcal_evolution_la_DEVSOURCES)
-
-libicalvcal_evolutionincludedir = $(privincludedir)/libical
-
-libicalvcal_evolutioninclude_HEADERS = \
- icalvcal.h \
- port.h \
- vcc.h \
- vobject.h \
- vcaltmp.h
-
-EXTRA_DIST = \
- README.TXT \
- vcaltest.c \
- vctest.c
diff --git a/libical/src/libicalvcal/README.TXT b/libical/src/libicalvcal/README.TXT
deleted file mode 100644
index c8ce8b0979..0000000000
--- a/libical/src/libicalvcal/README.TXT
+++ /dev/null
@@ -1,951 +0,0 @@
-NOTE: If you used the earlier APIs released by Versit
-then you will want to look at the document "migrate.doc"
-included with this package. It contains a discussion of
-the differences between the old API and this one.
-
-----------------------------------------------------------------
-
-The vCard/vCalendar C interface is implemented in the set
-of files as follows:
-
-vcc.y, yacc source, and vcc.c, the yacc output you will use
-implements the core parser
-
-vobject.c implements an API that insulates the caller from
-the parser and changes in the vCard/vCalendar BNF
-
-port.h defines compilation environment dependent stuff
-
-vcc.h and vobject.h are header files for their .c counterparts
-
-vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions
-which you may find useful.
-
-test.c is a standalone test driver that exercises some of
-the features of the APIs provided. Invoke test.exe on a
-VCARD/VCALENDAR input text file and you will see the pretty
-print output of the internal representation (this pretty print
-output should give you a good idea of how the internal
-representation looks like -- there is one such output in the
-following too). Also, a file with the .out suffix is generated
-to show that the internal representation can be written back
-in the original text format.
-
------------------------------------------------------------------
-
-
- VObject for VCard/VCalendar
-
-Table of Contents
-=================
-1. VObject
-2. Internal Representations of VCard/VCalendar
-3. Iterating Through VObject's Properties or Values
-4. Pretty Printing a VObject Tree
-5. Building A VObject Representation of A VCard/VCalendar
-6. Converting A VObject Representation Into Its Textual Representation
-7. Miscellaneous Notes On VObject APIs usages
-8. Brief descriptions of each APIs
-9. Additional Programming Notes.
-
-This document is mainly about the VObject and its APIs. The main
-use of a VObject is to represent a VCard or a VCalendar inside
-a program. However, its use is not limited to aforemention as it
-can represent an arbitrary information that makes up of a tree or
-forest of properties/values.
-
-1. VObject
- =======
-A VObject can have a name (id) and a list of associated properties and
-a value. Each property is itself a VObject.
-
-2. Internal Representations of VCard/VCalendar
- ===========================================
-A list of VCard or a VCalendar is represented by a list of VObjects.
-The name (id) of the VObjects in the list is either VCCardProp or
-VCCalProp. Each of these VObjects can have a list of properties.
-Since a property is represented as a VObject, each of these properties
-can have a name, a list of properties, and a value.
-
-For example, the input file "vobject.vcf":
-
-BEGIN:VCARD
-N:Alden;Roland
-FN:Roland H. Alden
-ORG:AT&T;Versit Project Office
-TITLE:Consultant
-EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com
-EMAIL;INTERNET:ralden@sfgate.com
-EMAIL;MCIMail:242-2200
-LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A=
-Suite 2208=0A=
-One Pine Street=0A=
-San Francisco, CA 94111
-LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A=
-Suite 2208=0A=
-One Pine Street=0A=
-San Francisco, CA 94111=0A=
-U.S.A.
-TEL;WORK;PREF;MSG:+1 415 296 9106
-TEL;WORK;FAX:+1 415 296 9016
-TEL;MSG;CELL:+1 415 608 5981
-ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A.
-SOUND:ROW-LAND H ALL-DIN
-LOGO;GIF;BASE64:
- R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC
- QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO
- 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv
- /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw
- cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu
- ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW
- ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf
- MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM
- 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E
- +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW
- gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm
- LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s
- JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6
- mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA
- 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj
- GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim
- DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo
- 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f
- hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR
- BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL
- thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7
- asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5
- fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04
- UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe
- eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C
- z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI
- ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4
- wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY
- gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA
- i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4
- I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7
-
-BEGIN:VCALENDAR
-DCREATED:19960523T100522
-PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN
-VERSION:0.3
-BEGIN:VEVENT
-START:19960523T120000
-END:19960523T130000
-SUBTYPE:PHONE CALL
-SUMMARY:VERSIT PDI PR Teleconference/Interview
-DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland
-END:VEVENT
-BEGIN:VEVENT
-START:19960523T113000
-END:19960523T115500
-SUBTYPE:LUNCH
-SUMMARY:Eat in the cafeteria today
-END:VEVENT
-END:VCALENDAR
-
-END:VCARD
-
-
-will conceptually be be represented as
- vcard
- VCNameProp
- VCFamilyNameProp=Alden
- VCGivenNameProp=Roland
- VCFullNameProp=Roland H.Alden
- ....
-
-note that
- EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com
-will be represented as:
- VCEmailAddress=sf!rincon!ralden@alden.attmail.com
- VCWork
- VCPreferred
- VCInternet
-where the lower level properties are properties of the property
-VCEmailAddress.
-
-Groupings are flattened out in the VObject representation such
-that:
- a.b:blah
- a.c:blahblah
-are represented as:
- b=blah
- VCGrouping=a
- c=blahblah
- VCGrouping=a
-i.e. one can read the above as:
- the property "b" has value "blah" and property "VCGrouping"
- with the value "a".
- the property "c" has value "blahblah" and property "VCGrouping"
- with the value "a".
-likewise, multi-level groupings are flatten similarly. e.g.
- a.b.c:blah
- a.b.e:blahblah
--->
- c=blah
- VCGrouping=b
- VCGrouping=a
- e=blahblah
- VCGrouping=b
- VCGrouping=a
-which read:
- the property "c" has value "blah" and property "VCGrouping"
- with the value "b" which has property "VCGrouping"
- with value "a".
- the property "e" has value "blahblah" and property "VCGrouping"
- with the value "b" which has property "VCGrouping"
- with value "a".
-
-3. Iterating Through VObject's Properties or Values
- ================================================
-The following is a skeletal form of iterating through
-all properties of a vobject, o:
-
- // assume the object of interest, o, is of type VObject
- VObjectIterator i;
- initPropIterator(&i,o);
- while (moreIteration(&i)) {
- VObject *each = nextVObject(&i);
- // ... do something with "each" property
- }
-
-Use the API vObjectName() to access a VObject's name.
-Use the API vObjectValueType() to determine if a VObject has
- a value. For VCard/VCalendar application, you
- should not need this function as practically
- all values are either of type VCVT_USTRINGZ or
- VCVT_RAW (i.e set by setVObjectUStringZValue and
- setVObjectAnyValue APIs respectively), and the
- value returned by calls to vObjectUStringZValue
- and vObjectAnyValue are 0 if a VObject has no
- value. (There is a minor exception where VObject with
- VCDataSizeProp has value that is set by
- setVObjectLongValue).
-Use the APIs vObject???Value() to access a VObject's value.
- where ??? is the expected type.
-Use the APIs setvObject???Value() to set or modify a VObject's value.
- where ??? is the expected type.
-Use the API isAPropertyOf() to query if a name match the name of
- a property of a VObject. Since isAPropertyOf() return
- the matching property, we can use that to retrieve
- a property and subsequently the value of the property.
-
-4. Pretty Printing a VObject Tree
- ==============================
-VObject tree can be pretty printed with the printVObject() function.
-The output of pretty printing a VObject representation of the input
-test file "vobject.vcf" is shown below. Note that the indentation
-indicates the tree hirerarchy where the immediate children nodes
-of a parent node is all at the same indentation level and the
-immediate children nodes are the immediate properties of the
-associated parent nodes. In the following, {N,FN,ORG,TITLE,...}
-are immediate properties of VCARD. {F and G} are properties of N
-with value {"Alden" and "Roland"} respectively; FN has no property
-but has the value "Roland H. Alden"; EMAIL has value and
-the properties WORK, PREF, and INTERNET.
-
-
-VCARD
- N
- F="Alden"
- G="Roland"
- FN="Roland H. Alden"
- ORG
- ORGNAME="AT&T"
- OUN="Versit Project Office"
- TITLE="Consultant"
- EMAIL="sf!rincon!ralden@alden.attmail.com"
- WORK
- PREF
- INTERNET
- EMAIL="ralden@sfgate.com"
- INTERNET
- EMAIL="242-2200"
- MCIMail
- LABEL="Roland H. Alden
- Suite 2208
- One Pine Street
- San Francisco, CA 94111"
- DOM
- POSTAL
- PARCEL
- HOME
- WORK
- QP
- LABEL="Roland H. Alden
- Suite 2208
- One Pine Street
- San Francisco, CA 94111
- U.S.A."
- POSTAL
- PARCEL
- HOME
- WORK
- QP
- TEL="+1 415 296 9106"
- WORK
- PREF
- MSG
- TEL="+1 415 296 9016"
- WORK
- FAX
- TEL="+1 415 608 5981"
- MSG
- CELL
- ADR
- EXT ADD="Suite 2208"
- STREET="One Pine Street"
- L="San Francisco"
- R="CA"
- PC="94111"
- C="U.S.A."
- SOUND="ROW-LAND H ALL-DIN"
- LOGO=[raw data]
- GIF
- BASE64
- DataSize=1482
-VCALENDAR
- DCREATED="19960523T100522"
- PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN"
- VERSION="0.3"
- VEVENT
- START="19960523T120000"
- END="19960523T130000"
- SUBTYPE="PHONE CALL"
- SUMMARY="VERSIT PDI PR Teleconference/Interview"
- DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland"
- VEVENT
- START="19960523T113000"
- END="19960523T115500"
- SUBTYPE="LUNCH"
- SUMMARY="Eat in the cafeteria today"
-
-5. Building A VObject Representation of A VCard/VCalendar
- ======================================================
-The parser in vcc.y converts an input file with one or more
-VCard/VCalendar that is in their textual representation
-into their corresponding VObject representation.
-
-VObject representation of a VCard/VCalendar can also be built
-directly with calls to the VObject building APIs. e.g.
-
- VObject *prop;
- VObject *vcard = newVObject(VCCardProp);
- prop = addProp(vcard,VCNameProp);
- addPropValue(prop,VCFamilyNameProp,"Alden");
- addPropValue(prop,VCGivenNameProp,"Roland");
- addPropValue(vcard,VCFullNameProp,"Roland H. Alden");
- ....
-
-6. Converting A VObject Representation Into Its Textual Representation
- ===================================================================
-The VObject representation can be converted back to its textual
-representation via the call to writeVObject() or writeMemVObject()
-API. e.g.
- a. to write to a file:
- // assume vcard is of type VObject
- FILE *fp = fopen("alden.vcf","w");
- writeVObject(fp,vcard);
- a. to write to memory, and let the API allocate the required memory.
- char* clipboard = writeVObject(0,0,vcard);
- ... do something to clipboard
- free(clipboard);
- b. to write to a user allocated buffer:
- char clipboard[16384];
- int len = 16384;
- char *buf = writeVObject(clipboard,&len,vcard);
- ... buf will be equal to clipboard if the write
- is successful otherwise 0.
-
-In the case of writing to memory, the memory buffer can be either
-allocated by the API or the user. If the user allocate the
-memory for the buffer, then the length of the buffer needs to be
-communicated to the API via a variable. The variable passed as
-the length argument will be overwritten with the actual size
-of the text output. A 0 return value from writeMemVObject()
-indicates an error which could be caused by overflowing the
-size of the buffer or lack of heap memory.
-
-7. Miscellaneous Notes On VObject APIs usages
- ==========================================
-a. vcc.h -- contains basic interfaces to the parser:
- VObject* Parse_MIME(const char *input, unsigned long len);
- VObject* Parse_MIME_FromFile(FILE *file);
- -- both of this return a null-terminated list of
- VObject that is either a VCARD or VCALENDAR.
- To iterate through this list, do
- VObject *t, *v;
- v = Parse_Mime_FromFile(fp);
- while (v) {
- // ... do something to v.
- t = v;
- v = nextVObjectInList(v);
- cleanVObject(t);
- }
- note that call to cleanVObject will release
- resource used to represent the VObject.
-
-b. vobject.h -- contains basic interfaces to the VObject APIs.
- see the header for more details.
- The structure of VObject is purposely (hiddened) not exposed
- to the user. Every access has to be done via
- the APIs. This way, if we need to change the
- structure or implementation, the client need not
- recompile as long as the interfaces remain the
- same.
-
-c. values of a property is determined by the property definition
- itself. The vobject APIs does not attempt to enforce
- any of such definition. It is the consumer responsibility
- to know what value is expected from a property. e.g
- most properties have unicode string value, so to access
- the value of these type of properties, you will use
- the vObjectUStringZValue() to read the value and
- setVObjectUStringZValue() to set or modify the value.
- Refer to the VCard and VCalendar specifications for
- the definition of each property.
-
-d. properties name (id) are case incensitive.
-
-8. Brief descriptions of each APIs
- ===============================
- * the predefined properties' names (id) are listed under vobject.h
- each is of the form VC*Prop. e.g.
- #define VC7bitProp "7BIT"
- #define VCAAlarmProp "AALARM"
- ....
-
- * consumer of a VObject can only define pointers to VObject.
-
- * a variable of type VObjectIterator, say "i", can be used to iterate
- through a VObject's properties, say "o". The APIs related to
- VObjectIterator are:
- void initPropIterator(VObjectIterator *i, VObject *o);
- -- e.g. usage
- initPropIterator(&i,o);
- int moreIteration(VObjectIterator *i);
- -- e.g. usage
- while (moreIteration(&i)) { ... }
- VObject* nextVObject(VObjectIterator *i);
- -- e.g. usage
- while (moreIteration(&i)) {
- VObject *each = nextVObject(&i);
- }
-
- * VObject can be chained together to form a list. e.g. of such
- use is in the parser where the return value of the parser is
- a link list of VObject. A link list of VObject can be
- built by:
- void addList(VObject **o, VObject *p);
- and iterated by
- VObject* nextVObjectInList(VObject *o);
- -- next VObjectInList return 0 if the list
- is exhausted.
-
- * the following APIs are mainly used to construct a VObject tree:
- VObject* newVObject(const char *id);
- -- used extensively internally by VObject APIs but when
- used externally, its use is mainly limited to the
- construction of top level object (e.g. an object
- with VCCardProp or VCCalendarProp id).
-
- void deleteVObject(VObject *p);
- -- to deallocate single VObject, for most user, use
- cleanVObject(VObject *o) instead for freeing all
- resources associated with the VObject.
-
- char* dupStr(const char *s, unsigned int size);
- -- duplicate a string s. If size is 0, the string is
- assume to be a null-terminated.
-
- void deleteStr(const char *p);
- -- used to deallocate a string allocated by dupStr();
-
- void setVObjectName(VObject *o, const char* id);
- -- set the id of VObject o. This function is not
- normally used by the user. The setting of id
- is normally done as part of other APIs (e.g.
- addProp()).
-
- void setVObjectStringZValue(VObject *o, const char *s);
- -- set a string value of a VObject.
-
- void setVObjectUStringZValue(VObject *o, const wchar_t *s);
- -- set a Unicode string value of a VObject.
-
- void setVObjectIntegerValue(VObject *o, unsigned int i);
- -- set an integer value of a VObject.
-
- void setVObjectLongValue(VObject *o, unsigned long l);
- -- set an long integer value of a VObject.
-
- void setVObjectAnyValue(VObject *o, void *t);
- -- set any value of a VObject. The value type is
- unspecified.
-
- VObject* setValueWithSize(VObject *prop, void *val, unsigned int size);
- -- set a raw data (stream of bytes) value of a VObject
- whose size is size. The internal VObject representation
- is
- this object = val
- VCDataSizeProp=size
- i.e. the value val will be attached to the VObject prop
- and a property of VCDataSize whose value is size
- is also added to the object.
-
- void setVObjectVObjectValue(VObject *o, VObject *p);
- -- set a VObject as the value of another VObject.
-
- const char* vObjectName(VObject *o);
- -- retrieve the VObject's Name (i.e. id).
-
- const char* vObjectStringZValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- null-terminated string.
-
- const wchar_t* vObjectUStringZValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- null-terminated unicode string.
-
- unsigned int vObjectIntegerValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- integer.
-
- unsigned long vObjectLongValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- long integer.
-
- void* vObjectAnyValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- any value.
-
- VObject* vObjectVObjectValue(VObject *o);
- -- retrieve the VObject's value interpreted as
- a VObject.
-
- VObject* addVObjectProp(VObject *o, VObject *p);
- -- add a VObject p as a property of VObject o.
- (not normally used externally for building a
- VObject).
-
- VObject* addProp(VObject *o, const char *id);
- -- add a property whose name is id to VObject o.
-
- VObject* addPropValue(VObject *o, const char *id, const char *v);
- -- add a property whose name is id and whose value
- is a null-terminated string to VObject o.
-
- VObject* addPropSizedValue(VObject *o, const char *id,
- const char *v, unsigned int size);
- -- add a property whose name is id and whose value
- is a stream of bytes of size size, to VObject o.
-
- VObject* addGroup(VObject *o, const char *g);
- -- add a group g to VObject o.
- e.g. if g is a.b.c, you will have
- o
- c
- VCGroupingProp=b
- VCGroupingProp=a
- and the object c is returned.
-
- VObject* isAPropertyOf(VObject *o, const char *id);
- -- query if a property by the name id is in o and
- return the VObject that represent that property.
-
- void printVObject(VObject *o);
- -- pretty print VObject o to stdout (for debugging use).
-
- void writeVObject(FILE *fp, VObject *o);
- -- convert VObject o to its textual representation and
- write it to file.
-
- char* writeMemVObject(char *s, int *len, VObject *o);
- -- convert VObject o to its textual representation and
- write it to memory. If s is 0, then memory required
- to hold the textual representation will be allocated
- by this API. If a variable len is passed, len will
- be overwriten with the byte size of the textual
- representation. If s is non-zero, then s has to
- be a user allocated buffer whose size has be passed
- in len as a variable. Memory allocated by the API
- has to be freed with call to free. The return value
- of this API is either the user supplied buffer,
- the memory allocated by the API, or 0 (in case of
- failure).
-
- void cleanStrTbl();
- -- this function has to be called when all
- VObject has been destroyed.
-
- void cleanVObject(VObject *o);
- -- release all resources used by VObject o.
-
- wchar_t* fakeUnicode(const char *ps, int *bytes);
- -- convert char* to wchar_t*.
-
- extern int uStrLen(const wchar_t *u);
- -- length of unicode u.
-
- char *fakeCString(const wchar_t *u);
- -- convert wchar_t to CString (blindly assumes that
- this could be done).
-
-9. Additional Programming Notes
- ============================
-In the following notes, please refers to the listing
-of Example.vcf and its VObject Representation
-(shown at the end of this section).
-
-* Handling the Return Value of the VCard/VCalendar Parser
- The example input text file contains two root VObjects
- (a VCalendar and a VCard). The output of the VCard/VCalendar
- parser is a null-terminated list of VObjects. For this
- particular input file, the list will have two VObjects.
- The following shows a template for iterating through the
- output of the Parser:
-
- VObject *t, *v;
- v = Parse_Mime_fromFileName("example.vcf");
- while (v) {
- // currently, v will either be a VCard or a VCalendar
- // do whatever your application need to do to
- // v here ...
- t = v;
- v = nextVObjectInList(v);
- cleanVObject(t);
- }
-
-* Iterating Through a VCard/VCalendar VObject
- From the VObject APIs point of view, a VCard VObject
- is the same as a VCalendar VObject. However, the application
- needs to know what are in a VCard or a VCalendar.
- For example, A VCalendar VObject can have VCDCreatedProp,
- a VCGEOLocationProp, etc, and one or more VCEventProp and
- or VCTodoProp. The VCEventProp and VCTodoProp can have
- many properties of their own, which in turn could have
- more properties (e.g. VCDAlarmProp can be a VCEventProp
- VObject's property, and VCRunTimeProp can be a
- VCDAlarmProp VObject's property. Because a VObject tree
- can be arbitrarily complex, in general, to process all
- properties and values of a VObject tree, a recursive walk
- is desirable. An example recursive VObject tree walk
- can be found in the vobject.c source lines for printVObject*
- and writeVObject* APIs. Depending on what the application need
- to do with a VCard or a VCalendar, a recursive walk
- of the VObject tree may or may not be desirable. An example
- template of a non-recursive walk is shown below:
-
- void processVCardVCalendar(char *inputFile)
- {
- VObject *t, *v;
- v = Parse_Mime_fromFileName(inputFile);
- while (v) {
- char *n = vObjectName(v);
- if (strcmp(n,VCCardProp) == 0) {
- do_VCard(v);
- }
- else if (strcmp(n,VCCalendarProp) == 0) {
- do_VCalendar(v);
- }
- else {
- // don't know how to handle anything else!
- }
- t = v;
- v = nextVObjectInList(v);
- cleanVObject(t);
- }
- }
-
- void do_VCard(VObject *vcard)
- {
- VObjectIterator t;
- initPropIterator(&t,vcard);
- while (moreIteration(&t)) {
- VObject *eachProp = nextVObject(&t);
- // The primarly purpose of this example is to
- // show how to iterate through a VCard VObject,
- // it is not meant to be efficient at all.
- char *n = vObjectName(eachProp);
- if (strcmp(n,VCNameProp)==0) {
- do_name(eachProp);
- }
- else if (strcmp(n,VCEmailProp)==0) {
- do_email(eachProp);
- }
- else if (strcmp(n,VCLabelProp)==0) {
- do_label(eachProp);
- }
- else if ....
- }
- }
-
- void do_VCalendar(VObject *vcal)
- {
- VObjectIterator t;
- initPropIterator(&t,vcard);
- while (moreIteration(&t)) {
- VObject *eachProp = nextVObject(&t);
- // The primarly purpose of this example is to
- // show how to iterate through a VCalendar VObject,
- // it is not meant to be efficient at all.
- char *n = vObjectName(eachProp);
- if (strcmp(n,VCDCreatedProp)==0) {
- do_DCreated(eachProp);
- }
- else if (strcmp(n,VCVersionProp)==0) {
- do_Version(eachProp);
- }
- else if (strcmp(n,VCTodoProp)==0) {
- do_Todo(eachProp);
- }
- else if (strcmp(n,VCEventProp)==0) {
- do_Event(eachProp);
- }
- else if ....
- }
- }
-
- void do_Todo(VObject *vtodo) { ... }
-
- void do_Event(VObject *vevent) { ... }
-
- ...
-
-* Property's Values and Properties
- The VObject APIs do not attempt to check for the
- correctness of the values of a property. Nor do they
- will prevent the user from attaching a non-VCard/VCalendar
- standard property to a VCard/VCalendar property. Take
- the example of line [11] of the example, "O.K" is not
- a valid value of VCStatusProp. It is up to the application
- to accept or reject the value of a property.
-
-* Output of printVObject
- PrintVObject pretty prints a VObject tree in human
- readable form. See the listing at the end of the file
- for an example output of printVObject on the example
- input file "Example.vcf".
-
- Note that binary data are not shown in the output of
- printVObject. Instead, a note is made ([raw data]) to
- indicate that there exists such a binary data.
-
-* Note on Binary Data
- When the value of a property is a binary data, it is only
- useful to know the size of the binary data.
-
- In the case of the VCard/VCalendar parser, it chooses
- to represent the size information as a separate property
- called VCDataSizeProp whose value is the size of the binary
- data. The APIs sequence to construct the VObject subtree
- of line [44] of Example.vcf is
-
- // VObject *vcard;
- VObject *p1 = addProp(vcard,VCLogoProp);
- (void) addProp(p1,VCGIFProp);
- (void) addProp(p1,VCBASE64Prop);
- VObject *p2 = addProp(p1,VCDataSizeProp);
- (void) setVObjectLongValue(p2,1482);
- setVObjectAnyValue(vcard,...pointer to binary data);
-
- Note the presence of VCBase64Prop will cause the
- writeVObject API to output the binary data as BASE64 text.
- For VCard/VCalendar application, having the VCBase64Prop
- property is pratically always neccessary for property with
- binary data as its value.
-
-* Note on Quoted-Printable String
- String value with embedded newline are written out as
- quoted-prinatable string. It is therefore important
- to mark a property with a string value that has
- one or more embedded newlines, with the VCQutedPrintableProp
- property. e.g.
-
- // VObject *root;
- char *msg="To be\nor\nnot to be";
- VObject *p = addPropValue(root,VCDescriptionProp,msg);
- // the following is how you mark a property with
- // a property. In this case, the marker is
- // VCQuotedPrintableProp
- addProp(p,VCQuotedPrintableProp);
-
-* Note on Unicode
- Although, the current parser takes ASCII text file only,
- string values are all stored as Unicode in the VObject tree.
- For now, when using the VObject APIs to construct a
- VObject tree, one should always convert ASCII string value
- to a Unicode string value:
-
- // VObject *root;
- VObject *p = addProp(root,VCSomeProp);
- setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue));
-
- An API is provided to simplify the above process:
-
- addPropValue(root,VCSomeProp,someASCIIStringZValue);
-
- Note that someASCIISTringZValue is automatically converted to
- Unicode by addPropValue API, where as, the former code
- sequence do an explicit call to fakeUnicode.
-
- To read back the value, one should use the vObjectUStringZValue
- API not vObjectStringZValue API. The value returned by the
- vObjectUStringZValue API is a Unicode string. If the application
- do not know how to handle Unicode string, it can use the
- fakeCString API to convert it back to ASCII string (as long
- as the conversion is meaningful).
-
- Note that fakeCString return a heap allocated memory. It is
- important to call deleteStr on fakeCString return value if
- it is not longer required (or there will be memory leak).
-
- NOTE: Unfortunately, at the point when this document is written,
- there is still no consensus on how Unicode is to be handled
- in the textual representation of VCard/VCalendar. So, there
- is no version of writeVObject and the parser to output and
- input Unicode textual representation of VCard/VCalendar.
-
-
-Example.vcf
------------
-line
-number Input Text (example.vcf)
------- ----------
-1 BEGIN:VCALENDAR
-2 DCREATED:19961102T100522
-3 GEO:0,0
-4 VERSION:1.0
-5 BEGIN:VEVENT
-6 DTSTART:19961103T000000
-7 DTEND:20000101T000000
-8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A=
-9 or =0A=
-10 not to be
-11 STATUS:O.K.
-12 X-ACTION:No action required
-13 DALARM:19961103T114500;5;3;Enjoy
-14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom.
-15 END:VEVENT
-16
-17 BEGIN:VTODO
-18 DUE:19960614T0173000
-19 DESCRIPTION:Relex.
-20 END:VTODO
-21
-22 END:VCALENDAR
-23
-24 BEGIN:VCARD
-25 N:Alden;Roland
-26 FN:Roland H. Alden
-27 ORG:AT&T;Versit Project Office
-28 TITLE:Consultant
-29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com
-30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A=
-31 Suite 2208=0A=
-32 One Pine Street=0A=
-33 San Francisco, CA 94111
-34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A=
-35 Suite 2208=0A=
-36 One Pine Street=0A=
-37 San Francisco, CA 94111=0A=
-38 U.S.A.
-39 TEL;WORK;PREF;MSG:+1 415 296 9106
-40 TEL;WORK;FAX:+1 415 296 9016
-41 TEL;MSG;CELL:+1 415 608 5981
-42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A.
-43 SOUND:ROW-LAND H ALL-DIN
-44 LOGO;GIF;BASE64:
-45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC
- ... 30 lines of BASE64 data not shown here.
-76 END:VCARD
-
-
-VObject Representation of Example.vcf:
--------------------------------------
-line
-in
-text
-file VObject Tree as Printed by printVObject API
----- -------------------------------------------
-1 VCALENDAR
-2 DCREATED="19961102T100522"
-3 GEO="0,0"
-4 VERSION="1.0"
-5 VEVENT
-6 DTSTART="19961103T000000"
-7 DTEND="20000101T000000"
-8 DESCRIPTION="To be
-9 or
-10 not to be"
-8 QUOTED-PRINTABLE
-11 STATUS="O.K."
-12 X-ACTION="No action required"
-13 DALARM
-13 RUNTIME="19961103T114500"
-13 SNOOZETIME="5"
-13 REPEATCOUNT="3"
-13 DISPLAYSTRING="Enjoy"
-14 MALARM
-14 RUNTIME="19970101T120000"
-14 EMAIL="johny@nowhere.com"
-14 NOTE="Call Mom"
-17 VTODO
-18 DUE="19960614T0173000"
-19 DESCRIPTION="Relex."
-24 VCARD
-25 N
-25 F="Alden"
-25 G="Roland"
-26 FN="Roland H. Alden"
-27 ORG
-27 ORGNAME="AT&T"
-27 OUN="Versit Project Office"
-28 TITLE="Consultant"
-29 EMAIL="ralden@alden.com"
-29 WORK
-29 PREF
-29 INTERNET
-30 LABEL="Roland H. Alden
-31 Suite 2208
-32 One Pine Street
-33 San Francisco, CA 94111"
-30 DOM
-30 POSTAL
-30 PARCEL
-30 HOME
-30 WORK
-30 QUOTED-PRINTABLE
-34 LABEL="Roland H. Alden
-35 Suite 2208
-36 One Pine Street
-37 San Francisco, CA 94111
-38 U.S.A."
-34 POSTAL
-34 PARCEL
-34 HOME
-34 WORK
-34 QUOTED-PRINTABLE
-39 TEL="+1 415 296 9106"
-39 WORK
-39 PREF
-39 MSG
-40 TEL="+1 415 296 9016"
-40 WORK
-40 FAX
-41 TEL="+1 415 608 5981"
-41 MSG
-41 CELL
-42 ADR
-42 EXT ADD="Suite 2208"
-42 STREET="One Pine Street"
-42 L="San Francisco"
-42 R="CA"
-42 PC="94111"
-42 C="U.S.A."
-43 SOUND="ROW-LAND H ALL-DIN"
-44 LOGO=[raw data]
-44 GIF
-44 BASE64
-44 DATASIZE=1482
-
diff --git a/libical/src/libicalvcal/icalvcal.c b/libical/src/libicalvcal/icalvcal.c
deleted file mode 100644
index 76c87898af..0000000000
--- a/libical/src/libicalvcal/icalvcal.c
+++ /dev/null
@@ -1,1646 +0,0 @@
-/*======================================================================
- FILE: icalvcal.c
- CREATOR: eric 25 May 00
-
- $Id$
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvcal.c
-
-
-
- The icalvcal_convert routine calls icalvcal_traverse_objects to do
- its work.s his routine steps through through all of the properties
- and components of a VObject. For each name of a property or a
- component, icalvcal_traverse_objects looks up the name in
- conversion_table[]. This table indicates wether the name is of a
- component or a property, lists a routine to handle conversion, and
- has extra data for the conversion.
-
- The conversion routine will create new iCal components or properties
- and add them to the iCal component structure.
-
- The most common conversion routine is dc_prop. This routine converts
- properties for which the text representation of the vCal component
- is identical the iCal representation.
-
- ======================================================================*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "icalvcal.h"
-#include <string.h>
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-enum datatype {
- COMPONENT,
- PROPERTY,
- PARAMETER,
- UNSUPPORTED,
- IGNORE
-};
-
-/* The indices must match between the strings and the codes. */
-char *weekdays[] = { "SU", "MO", "TU", "WE", "TH", "FR", "SA" };
-int weekday_codes[] = {
- ICAL_SUNDAY_WEEKDAY,
- ICAL_MONDAY_WEEKDAY,
- ICAL_TUESDAY_WEEKDAY,
- ICAL_WEDNESDAY_WEEKDAY,
- ICAL_THURSDAY_WEEKDAY,
- ICAL_FRIDAY_WEEKDAY,
- ICAL_SATURDAY_WEEKDAY
-};
-
-
-struct conversion_table_struct {
- char* vcalname;
- enum datatype type;
- void* (*conversion_func)(int icaltype, VObject *o, icalcomponent *comp,
- icalvcal_defaults *defaults);
- int icaltype;
-};
-
-struct conversion_table_struct conversion_table[];
-void* dc_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults);
-
-
-
-/* Creates an error property with the given message. */
-static icalproperty* create_parse_error_property (const char *message,
- const char *property_name,
- const char *property_value)
-{
- char temp[4096];
- icalparameter *error_param;
- icalproperty *error_prop;
-
- snprintf (temp, 1024, "%s: %s:%s", message, property_name, property_value);
-
- error_param = icalparameter_new_xlicerrortype (ICAL_XLICERRORTYPE_VCALPROPPARSEERROR);
- error_prop = icalproperty_new_xlicerror (temp);
- icalproperty_add_parameter (error_prop, error_param);
-
- return error_prop;
-}
-
-
-char* get_string_value (VObject *object, int *free_string)
-{
- switch (vObjectValueType(object)) {
- case VCVT_USTRINGZ:
- *free_string = 1;
- return fakeCString(vObjectUStringZValue(object));
-
- case VCVT_STRINGZ:
- *free_string = 0;
- return (char*) vObjectStringZValue(object);
- }
-
- *free_string = 0;
-
- /* We return "" here, to cut down on the risk of crashing. */
- return "";
-}
-
-
-static void convert_floating_time_to_utc (struct icaltimetype *itt)
-{
- struct tm tmp_tm = { 0 }, *utc_tm;
- time_t t;
-
- /* We assume the floating time is using the current Unix timezone.
- So we convert to a time_t using mktime(), and then back to a struct tm
- using gmtime, so it is the UTC time. */
- tmp_tm.tm_year = itt->year - 1900;
- tmp_tm.tm_mon = itt->month - 1;
- tmp_tm.tm_mday = itt->day;
- tmp_tm.tm_hour = itt->hour;
- tmp_tm.tm_min = itt->minute;
- tmp_tm.tm_sec = itt->second;
- tmp_tm.tm_isdst = -1;
-
- /* Convert to a time_t. */
- t = mktime (&tmp_tm);
-
- /* Now convert back to a struct tm, but with a UTC time. */
- utc_tm = gmtime (&t);
-
- /* Now put it back into the icaltime. */
- itt->year = utc_tm->tm_year + 1900;
- itt->month = utc_tm->tm_mon + 1;
- itt->day = utc_tm->tm_mday;
- itt->hour = utc_tm->tm_hour;
- itt->minute = utc_tm->tm_min;
- itt->second = utc_tm->tm_sec;
-
- /* Set the is_utc flag. */
- itt->is_utc = 1;
-}
-
-
-static void icalvcal_traverse_objects(VObject *object,
- icalcomponent* last_comp,
- icalproperty* last_prop,
- icalvcal_defaults *defaults)
-{
- VObjectIterator iterator;
- char* name = "[No Name]";
- icalcomponent* subc = 0;
- int i;
-
- if ( vObjectName(object)== 0){
- printf("ERROR, object has no name");
- assert(0);
- return;
- }
-
- name = (char*)vObjectName(object);
-
- /* Lookup this object in the conversion table */
- for (i = 0; conversion_table[i].vcalname != 0; i++){
- if(strcmp(conversion_table[i].vcalname, name) == 0){
- break;
- }
- }
-
- /* Did not find the object. It may be an X-property, or an unknown
- property */
- if (conversion_table[i].vcalname == 0){
-
- /* Handle X properties */
- if(strncmp(name, "X-",2) == 0){
- icalproperty* prop = (icalproperty*)dc_prop(ICAL_X_PROPERTY,object,
- last_comp, defaults);
- icalproperty_set_x_name(prop,name);
- icalcomponent_add_property(last_comp,prop);
- } else {
- assert(0);
- return;
- }
-
- } else {
-
- /* The vCal property is in the table, and it is not an X
- property, so try to convert it to an iCal component,
- property or parameter. */
-
- switch(conversion_table[i].type){
-
-
- case COMPONENT: {
- subc =
- (icalcomponent*)(conversion_table[i].conversion_func
- (conversion_table[i].icaltype,
- object, last_comp, defaults));
-
- if (subc) {
- icalcomponent_add_component(last_comp,subc);
- }
- break;
- }
-
- case PROPERTY: {
-
- if (vObjectValueType(object) &&
- conversion_table[i].conversion_func != 0 ) {
-
- icalproperty* prop =
- (icalproperty*)(conversion_table[i].conversion_func
- (conversion_table[i].icaltype,
- object, last_comp, defaults));
-
- if (prop)
- icalcomponent_add_property(last_comp,prop);
-
- last_prop = prop;
-
- }
- break;
- }
-
- case PARAMETER: {
- break;
- }
-
- case UNSUPPORTED: {
-
- /* If the property is listed as UNSUPPORTED, insert a
- X_LIC_ERROR property to note this fact. */
-
- char temp[1024];
- char* message = "Unsupported vCal property";
- icalparameter *error_param;
- icalproperty *error_prop;
-
- snprintf(temp,1024,"%s: %s",message,name);
-
- error_param = icalparameter_new_xlicerrortype(
- ICAL_XLICERRORTYPE_UNKNOWNVCALPROPERROR
- );
-
- error_prop = icalproperty_new_xlicerror(temp);
- icalproperty_add_parameter(error_prop, error_param);
-
- icalcomponent_add_property(last_comp,error_prop);
-
- break;
- }
-
- case IGNORE: {
- /* Do Nothing. */
- break;
- }
-
- }
- }
-
-
- /* Now, step down into the next vCalproperty */
-
- initPropIterator(&iterator,object);
- while (moreIteration(&iterator)) {
- VObject *eachProp = nextVObject(&iterator);
-
- /* If 'object' is a component, then the next traversal down
- should use it as the 'last_comp' */
-
- if(subc!=0){
- icalvcal_traverse_objects(eachProp,subc,last_prop,defaults);
-
- } else {
- icalvcal_traverse_objects(eachProp,last_comp,last_prop,defaults);
- }
- }
-}
-
-icalcomponent* icalvcal_convert_with_defaults (VObject *object,
- icalvcal_defaults *defaults)
-{
- char* name = (char*)vObjectName(object);
- icalcomponent* container = icalcomponent_new(ICAL_XROOT_COMPONENT);
- icalcomponent* root;
- icalproperty *prop;
-
- icalerror_check_arg_rz( (object!=0),"Object");
-
- /* The root object must be a VCALENDAR */
- if(*name==0 || strcmp(name,VCCalProp) != 0){
- return 0; /* HACK. Should return an error */
- }
-
-#if 0
- /* Just for testing. */
- printf ("This is the internal VObject representation:\n");
- printf ("===========================================\n");
- printVObject(stdout, object);
- printf ("===========================================\n");
-#endif
-
- icalvcal_traverse_objects(object,container,0,defaults);
-
- /* HACK. I am using the extra 'container' component because I am
- lazy. I know there is a way to get rid of it, but I did not care
- to find it. */
-
- root = icalcomponent_get_first_component(container,ICAL_ANY_COMPONENT);
-
- icalcomponent_remove_component(container, root);
- icalcomponent_free(container);
-
- /* We add a VERSION and PRODID here, to make it a valid iCalendar object,
- but the application may change them if necessary. */
- prop = icalproperty_new_prodid ("-//Softwarestudio.org//" PACKAGE
- " version " VERSION "//EN");
- icalcomponent_add_property (root, prop);
-
- prop = icalproperty_new_version ("2.0");
- icalcomponent_add_property (root, prop);
-
- return root;
-
-}
-
-icalcomponent* icalvcal_convert (VObject *object)
-{
- return icalvcal_convert_with_defaults (object, NULL);
-}
-
-
-/* comp() is useful for most components, but alarm, daylight and
- * timezone are different. In vcal, they are properties, and in ical,
- * they are components. Although because of the way that vcal treats
- * everything as a property, alarm_comp() daylight_comp() and
- * timezone_comp() may not really be necessary, I think it would be
- * easier to use them. */
-
-void* comp(int icaltype, VObject *o, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalcomponent_kind kind = (icalcomponent_kind)icaltype;
-
- icalcomponent* c = icalcomponent_new(kind);
-
- return (void* )c;
-}
-
-/* vCalendar has 4 properties for alarms: AALARM, DALARM, MALARM, PALARM
- (for audio, display, mail, and procedure alarms).
-
- AALARM has Run Time, Snooze Time, Repeat Count, Audio Content.
- It may also have a TYPE parameter specifying the MIME type, e.g.
- AALARM;TYPE=WAVE;VALUE=URL:19960415T235959; ; ; file:///mmedia/taps.wav
- AALARM;TYPE=WAVE;VALUE=CONTENT-ID:19960903T060000;PT15M;4;<jsmith.part2.=
- 960901T083000.xyzMail@host1.com>
-
- DALARM has Run Time, Snooze Time, Repeat Count, Display String.
- DALARM:19960415T235000;PT5M;2;Your Taxes Are Due !!!
-
- MALARM has Run Time, Snooze Time, Repeat Count, Email Address, Note.
- MALARM:19960416T000000;PT1H;24;IRS@us.gov;The Check Is In The Mail!
-
- PALARM has Run Time, Snooze Time, Repeat Count, Procedure Name.
- PALARM;VALUE=URL:19960415T235000;PT5M;2;file:///myapps/shockme.exe
-
- AALARM and PALARM: Check the VALUE is a URL. We won't support CONTENT-ID.
-
-
- iCalendar uses one component, VALARM, for all of these, and uses an ACTION
- property of "AUDIO", "DISPLAY", "EMAIL" or "PROCEDURE".
-
- The Run Time value can be copied into the iCalendar TRIGGER property,
- except it must be UTC in iCalendar. If it is floating, we'll convert to
- UTC using the current Unix timezone.
-
- The Snooze Time becomes DURATION, and the Repeat Count becomes REPEAT.
-
- For AALARM, the Audio Content becomes the ATTACH property, and the TYPE
- becomes a FMTTYPE of this property (PCM -> 'audio/basic' (?),
- WAVE -> 'audio/x-wav', AIFF -> 'audio/x-aiff'), e.g.
- ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud
-
- For DALARM, Display String becomes the DESCRIPTION property.
-
- For MALARM, Email Address becomes an ATTENDEE property, e.g.
- ATTENDEE:MAILTO:john_doe@host.com
-
- For PALARM, the Procedure Name becomes an ATTACH property, like AALARM, e.g.
- ATTACH;FMTTYPE=application/binary:ftp://host.com/novo-procs/felizano.exe
-*/
-
-/* This converts the vCalendar alarm properties into iCalendar properties and
- adds them to the component. It returns 1 if the alarm is valid, 0 if not. */
-static int get_alarm_properties (icalcomponent *comp, VObject *object,
- int icaltype, icalvcal_defaults *defaults)
-{
- VObjectIterator iterator;
- icalproperty *trigger_prop = NULL, *duration_prop = NULL;
- icalproperty *repeat_prop = NULL, *attach_prop = NULL;
- icalproperty *summary_prop = NULL, *description_prop = NULL;
- icalproperty *action_prop, *attendee_prop = NULL;
- icalparameter *fmttype_param = NULL;
- enum icalproperty_action action;
- int value_is_url = 0, is_valid_alarm = 1;
-
- initPropIterator (&iterator, object);
- while (moreIteration (&iterator)) {
- VObject *eachProp = nextVObject (&iterator);
- const char *name = vObjectName (eachProp);
- char *s;
- int free_string;
-
- s = get_string_value (eachProp, &free_string);
-
- /* Common properties. */
- if (!strcmp (name, VCRunTimeProp)) {
- if (*s) {
- struct icaltriggertype t;
- icalparameter *param;
-
- /* Convert it to an icaltimetype. */
- t.time = icaltime_from_string (s);
-
- /* If it is a floating time, convert it to a UTC time. */
- if (!t.time.is_utc)
- convert_floating_time_to_utc (&t.time);
-
- /* Create a TRIGGER property. */
- trigger_prop = icalproperty_new_trigger (t);
-
- /* vCalendar triggers are always specific DATE-TIME values. */
- param = icalparameter_new_value (ICAL_VALUE_DATETIME);
- icalproperty_add_parameter (trigger_prop, param);
-
- icalcomponent_add_property (comp, trigger_prop);
- }
-
- } else if (!strcmp (name, VCSnoozeTimeProp)) {
- struct icaldurationtype d;
-
- /* Parse the duration string.
- FIXME: vCalendar also permits 'Y' (Year) and 'M' (Month) here,
- which we don't handle at present. Though it is unlikely they
- will be used as a snooze time between repeated alarms! */
- d = icaldurationtype_from_string (s);
-
- duration_prop = icalproperty_new_duration (d);
- icalcomponent_add_property (comp, duration_prop);
-
- } else if (!strcmp (name, VCRepeatCountProp)) {
- /* If it starts with a digit convert it into a REPEAT property. */
- if (*s && *s >= '0' && *s <= '9') {
- repeat_prop = icalproperty_new_repeat (atoi (s));
- icalcomponent_add_property (comp, repeat_prop);
- }
-
- } else if (!strcmp (name, VCValueProp)) {
- /* We just remember if the value is a URL. */
- if (!strcmp (s, "URL")) {
- value_is_url = 1;
- }
-
- /* Audio properties && Procedure properties. */
- } else if (!strcmp (name, VCAudioContentProp)
- || !strcmp (name, VCProcedureNameProp)) {
- if (*s && !attach_prop) {
- icalattach *attach;
-
- attach = icalattach_new_from_url (s);
- attach_prop = icalproperty_new_attach (attach);
- icalcomponent_add_property (comp, attach_prop);
-
- /* We output a "application/binary" FMTTYPE for Procedure
- alarms. */
- if (!strcmp (name, VCProcedureNameProp) && !fmttype_param)
- fmttype_param = icalparameter_new_fmttype ("application/binary");
- }
-
- } else if (!strcmp (name, "TYPE")) {
- char *fmttype = NULL;
-
- if (!strcmp (s, "PCM"))
- fmttype = "audio/basic";
- else if (!strcmp (s, "AIFF"))
- fmttype = "audio/x-aiff";
- else if (!strcmp (s, "WAVE"))
- fmttype = "audio/x-wav";
-
- if (fmttype)
- fmttype_param = icalparameter_new_fmttype (fmttype);
-
- /* Display properties. */
- } else if (!strcmp (name, VCDisplayStringProp)) {
- if (!description_prop) {
- description_prop = icalproperty_new_description (s);
- icalcomponent_add_property (comp, description_prop);
- }
-
- /* Mail properties. */
- } else if (!strcmp (name, VCEmailAddressProp)) {
- if (*s && strlen (s) < 1000) {
- char buffer[1024];
-
- /* We need to add 'MAILTO:' before the email address, to make
- it valid iCalendar. */
- sprintf (buffer, "MAILTO:%s", s);
- attendee_prop = icalproperty_new_attendee (buffer);
- icalcomponent_add_property (comp, attendee_prop);
- }
-
- } else if (!strcmp (name, VCNoteProp)) {
- if (!description_prop) {
- description_prop = icalproperty_new_description (s);
- icalcomponent_add_property (comp, description_prop);
- }
-
- /* We also copy the Note to the SUMMARY property, since that is
- required in iCalendar. */
- if (!summary_prop) {
- summary_prop = icalproperty_new_summary (s);
- icalcomponent_add_property (comp, summary_prop);
- }
- }
-
- if (free_string)
- deleteStr (s);
- }
-
- /* Add the FMTTYPE parameter to the ATTACH property if it exists. */
- if (fmttype_param) {
- if (attach_prop) {
- icalproperty_add_parameter (attach_prop, fmttype_param);
- } else {
- icalparameter_free (fmttype_param);
- }
- }
-
-
- /* Now check if the alarm is valid, i.e. it has the required properties
- according to its type. */
-
- /* All alarms must have a trigger. */
- if (!trigger_prop)
- is_valid_alarm = 0;
-
- /* If there is a Duration but not a Repeat Count, we just remove the
- Duration so the alarm only occurs once. */
- if (duration_prop && !repeat_prop) {
- icalcomponent_remove_property (comp, duration_prop);
- icalproperty_free (duration_prop);
- duration_prop = NULL;
- }
-
- /* Similarly if we have a Repeat Count but no Duration, we remove it. */
- if (repeat_prop && !duration_prop) {
- icalcomponent_remove_property (comp, repeat_prop);
- icalproperty_free (repeat_prop);
- repeat_prop = NULL;
- }
-
- switch (icaltype) {
- case ICAL_XAUDIOALARM_COMPONENT:
- action = ICAL_ACTION_AUDIO;
-
- /* Audio alarms must have an ATTACH property, which is a URL.
- If they don't have one, we use the default alarm URL. */
- if (!attach_prop || !value_is_url) {
- if (defaults && defaults->alarm_audio_url
- && defaults->alarm_audio_fmttype) {
- icalattach *attach;
-
- if (attach_prop) {
- icalcomponent_remove_property (comp, attach_prop);
- icalproperty_free (attach_prop);
- }
-
- attach = icalattach_new_from_url (defaults->alarm_audio_url);
- attach_prop = icalproperty_new_attach (attach);
- icalcomponent_add_property (comp, attach_prop);
-
- fmttype_param = icalparameter_new_fmttype (defaults->alarm_audio_fmttype);
- icalproperty_add_parameter (attach_prop, fmttype_param);
- } else {
- is_valid_alarm = 0;
- }
- }
- break;
-
- case ICAL_XDISPLAYALARM_COMPONENT:
- action = ICAL_ACTION_DISPLAY;
-
- /* Display alarms must have a DESCRIPTION. */
- if (!description_prop) {
- if (defaults && defaults->alarm_description) {
- description_prop = icalproperty_new_description (defaults->alarm_description);
- icalcomponent_add_property (comp, description_prop);
- } else {
- is_valid_alarm = 0;
- }
- }
- break;
-
- case ICAL_XEMAILALARM_COMPONENT:
- action = ICAL_ACTION_EMAIL;
-
- /* Email alarms must have a SUMMARY, a DESCRIPTION, and an ATTENDEE. */
- if (!attendee_prop) {
- is_valid_alarm = 0;
- } else if (!summary_prop || !description_prop) {
- if (!summary_prop && defaults->alarm_description) {
- summary_prop = icalproperty_new_summary (defaults->alarm_description);
- icalcomponent_add_property (comp, summary_prop);
- }
-
- if (!description_prop && defaults->alarm_description) {
- description_prop = icalproperty_new_description (defaults->alarm_description);
- icalcomponent_add_property (comp, description_prop);
- }
-
- if (!summary_prop || !description_prop)
- is_valid_alarm = 0;
- }
- break;
-
- case ICAL_XPROCEDUREALARM_COMPONENT:
- action = ICAL_ACTION_PROCEDURE;
-
- /* Procedure alarms must have an ATTACH property, which is a URL.
- We don't support inline data. */
- if (!attach_prop) {
- is_valid_alarm = 0;
- } else if (!value_is_url) {
- icalattach *attach;
- const char *url;
-
- attach = icalproperty_get_attach (attach_prop);
- url = icalattach_get_url (attach);
-
- /* Check for Gnome Calendar, which will just save a pathname. */
- if (url && url[0] == '/') {
- int len;
- char *new_url;
- icalattach *new_attach;
-
- /* Turn it into a proper file: URL. */
- len = strlen (url) + 12;
-
- new_url = malloc (len);
- strcpy (new_url, "file://");
- strcat (new_url, url);
-
- new_attach = icalattach_new_from_url (new_url);
- free (new_url);
-
- icalproperty_set_attach (attach_prop, new_attach);
-
- } else {
- is_valid_alarm = 0;
- }
- }
- break;
-
- default:
- /* Shouldn't reach here ever. */
- assert(0);
- break;
- }
-
- action_prop = icalproperty_new_action (action);
- icalcomponent_add_property (comp, action_prop);
-
- return is_valid_alarm;
-}
-
-
-void* alarm_comp(int icaltype, VObject *o, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalcomponent_kind kind = (icalcomponent_kind)icaltype;
- int is_valid_alarm;
-
- icalcomponent* c = icalcomponent_new(ICAL_VALARM_COMPONENT);
-
- is_valid_alarm = get_alarm_properties (c, o, icaltype, defaults);
-
- if (is_valid_alarm) {
- return (void*)c;
- } else {
- icalcomponent_free (c);
- return NULL;
- }
-}
-
-
-/* These #defines indicate conversion routines that are not defined yet. */
-
-#define parameter 0
-#define rsvp_parameter 0
-
-void* transp_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty *prop = NULL;
- char *s;
- int free_string;
-
- s = get_string_value (object, &free_string);
-
-
- /* In vCalendar "0" means opaque, "1" means transparent, and >1 is
- implementation-specific. So we just check for "1" and output
- TRANSPARENT. For anything else, the default OPAQUE will be used. */
- if (!strcmp (s, "1")) {
- prop = icalproperty_new_transp (ICAL_TRANSP_TRANSPARENT);
- }
-
- if (free_string)
- deleteStr (s);
-
- return (void*)prop;
-}
-
-void* sequence_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty *prop = NULL;
- char *s;
- int free_string, sequence;
-
- s = get_string_value (object, &free_string);
-
- /* GnomeCalendar outputs '-1' for this. I have no idea why.
- So we just check it is a valid +ve integer, and output 0 if it isn't. */
- sequence = atoi (s);
- if (sequence < 0)
- sequence = 0;
-
- prop = icalproperty_new_sequence (sequence);
-
- if (free_string)
- deleteStr (s);
-
- return (void*)prop;
-}
-
-
-/* This handles properties which have multiple values, which are separated by
- ';' in vCalendar but ',' in iCalendar. So we just switch those. */
-void* multivalued_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty_kind kind = (icalproperty_kind)icaltype;
- icalproperty *prop = NULL;
- icalvalue *value;
- icalvalue_kind value_kind;
- char *s, *tmp_copy, *p;
- int free_string;
-
- s = get_string_value (object, &free_string);
-
- tmp_copy = strdup (s);
-
- if (free_string)
- deleteStr (s);
-
- if (tmp_copy) {
- prop = icalproperty_new(kind);
-
- value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa (prop));
-
- for (p = tmp_copy; *p; p++) {
- if (*p == ';')
- *p = ',';
- }
-
- value = icalvalue_new_from_string (value_kind, tmp_copy);
- icalproperty_set_value (prop, value);
-
- free (tmp_copy);
- }
-
- return (void*)prop;
-}
-
-
-void* status_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty *prop = NULL;
- char *s;
- int free_string;
- icalcomponent_kind kind;
-
- kind = icalcomponent_isa (comp);
-
- s = get_string_value (object, &free_string);
-
- /* In vCalendar:
- VEVENT can have: "NEEDS ACTION" (default), "SENT", "TENTATIVE",
- "CONFIRMED", "DECLINED", "DELEGATED".
- VTODO can have: "ACCEPTED", "NEEDS ACTION" (default), "SENT",
- "DECLINED", "COMPLETED", "DELEGATED".
- (Those are the only 2 components - there is no VJOURNAL)
-
- In iCalendar:
- VEVENT can have: "TENTATIVE", "CONFIRMED", "CANCELLED".
- VTODO can have: "NEEDS-ACTION", "COMPLETED", "IN-PROCESS", "CANCELLED".
-
- So for VEVENT if it is "TENTATIVE" or "CONFIRMED" we keep it, otherwise
- we skip it.
-
- For a VTODO if it is "NEEDS ACTION" we convert to "NEEDS-ACTION", if it
- is "COMPLETED" we keep it, otherwise we skip it.
- */
- if (kind == ICAL_VEVENT_COMPONENT) {
- if (!strcmp (s, "TENTATIVE"))
- prop = icalproperty_new_status (ICAL_STATUS_TENTATIVE);
- else if (!strcmp (s, "CONFIRMED"))
- prop = icalproperty_new_status (ICAL_STATUS_CONFIRMED);
-
- } else if (kind == ICAL_VTODO_COMPONENT) {
- if (!strcmp (s, "NEEDS ACTION"))
- prop = icalproperty_new_status (ICAL_STATUS_NEEDSACTION);
- else if (!strcmp (s, "COMPLETED"))
- prop = icalproperty_new_status (ICAL_STATUS_COMPLETED);
-
- }
-
- if (free_string)
- deleteStr (s);
-
- return (void*)prop;
-}
-
-
-void* utc_datetime_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty_kind kind = (icalproperty_kind)icaltype;
- icalproperty *prop;
- icalvalue *value;
- icalvalue_kind value_kind;
- char *s;
- int free_string;
- struct icaltimetype itt;
-
- prop = icalproperty_new(kind);
-
- value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa(prop));
-
- s = get_string_value (object, &free_string);
-
- /* Convert it to an icaltimetype. */
- itt = icaltime_from_string (s);
-
- /* If it is a floating time, convert it to a UTC time. */
- if (!itt.is_utc)
- convert_floating_time_to_utc (&itt);
-
- value = icalvalue_new_datetime (itt);
- icalproperty_set_value(prop,value);
-
- if (free_string)
- deleteStr (s);
-
- return (void*)prop;
-}
-
-
-/* Parse the interval from the RRULE, returning a pointer to the first char
- after the interval and any whitespace. s points to the start of the
- interval. error_message is set if an error occurs. */
-static char* rrule_parse_interval (char *s, struct icalrecurrencetype *recur,
- char **error_message)
-{
- int interval = 0;
-
- /* It must start with a digit. */
- if (*s < '0' || *s > '9') {
- *error_message = "Invalid Interval";
- return NULL;
- }
-
- while (*s >= '0' && *s <= '9')
- interval = (interval * 10) + (*s++ - '0');
-
- /* It must be followed by whitespace. I'm not sure if anything else is
- allowed. */
- if (*s != ' ' && *s != '\t') {
- *error_message = "Invalid Interval";
- return NULL;
- }
-
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
-
- recur->interval = interval;
- return s;
-}
-
-
-/* Parse the duration from the RRULE, either a COUNT, e.g. '#5', or an UNTIL
- date, e.g. 20020124T000000. error_message is set if an error occurs.
- If no duration is given, '#2' is assumed. */
-static char* rrule_parse_duration (char *s, struct icalrecurrencetype *recur,
- char **error_message)
-{
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- if (!s || *s == '\0') {
- /* If we are at the end of the string, assume '#2'. */
- recur->count = 2;
-
- } else if (*s == '#') {
- /* If it starts with a '#' it is the COUNT. Note that in vCalendar
- #0 means forever, and setting recur->count to 0 means the same. */
- int count = 0;
-
- s++;
- while (*s >= '0' && *s <= '9')
- count = (count * 10) + (*s++ - '0');
-
- recur->count = count;
-
- } else if (*s >= '0' && *s <= '9') {
- /* If it starts with a digit it must be the UNTIL date. */
- char *e, buffer[20];
- int len;
-
- /* Find the end of the date. */
- e = s;
- while ((*e >= '0' && *e <= '9') || *e == 'T' || *e == 'Z')
- e++;
-
- /* Check it is a suitable length. */
- len = e - s;
- if (len != 8 && len != 15 && len != 16) {
- *error_message = "Invalid End Date";
- return NULL;
- }
-
- /* Copy the date to our buffer and null-terminate it. */
- strncpy (buffer, s, len);
- buffer[len] = '\0';
-
- /* Parse it into the until field. */
- recur->until = icaltime_from_string (buffer);
-
- /* In iCalendar UNTIL must be UTC if it is a DATE-TIME. But we
- don't really know what timezone the vCalendar times are in. So if
- it can be converted to a DATE value, we do that. Otherwise we just
- use the current Unix timezone. Should be OK 99% of the time. */
- if (!recur->until.is_utc) {
- if (recur->until.hour == 0 && recur->until.minute == 0
- && recur->until.second == 0)
- recur->until.is_date = 1;
- else
- convert_floating_time_to_utc (&recur->until);
- }
-
- s = e;
-
- } else {
- *error_message = "Invalid Duration";
- return NULL;
- }
-
-
- /* It must be followed by whitespace or the end of the string.
- I'm not sure if anything else is allowed. */
- if (*s != '\0' && *s != ' ' && *s != '\t') {
- *error_message = "Invalid Duration";
- return NULL;
- }
-
- return s;
-}
-
-
-static char* rrule_parse_weekly_days (char *s,
- struct icalrecurrencetype *recur,
- char **error_message)
-{
- int i;
-
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- for (i = 0; i < ICAL_BY_DAY_SIZE; i++) {
- char *e;
- int found_day, day;
-
- found_day = -1;
- for (day = 0; day < 7; day++) {
- if (!strncmp (weekdays[day], s, 2)) {
- /* Check the next char is whitespace or the end of string. */
- e = s + 2;
- if (*e == ' ' || *e == '\t' || *e == '\0') {
- found_day = day;
- break;
- }
- }
- }
-
- if (found_day == -1)
- break;
-
- recur->by_day[i] = weekday_codes[day];
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
-
- /* Terminate the array, if it isn't full. */
- if (i < ICAL_BY_DAY_SIZE)
- recur->by_day[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- return s;
-}
-
-
-static char* rrule_parse_monthly_days (char *s,
- struct icalrecurrencetype *recur,
- char **error_message)
-{
- int i;
-
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- for (i = 0; i < ICAL_BY_MONTHDAY_SIZE; i++) {
- char *e;
- int month_day;
-
- if (!strncmp (s, "LD", 2)) {
- month_day = -1;
- e = s + 2;
- } else {
- month_day = strtol (s, &e, 10);
-
- /* Check we got a valid day. */
- if (month_day < 1 || month_day > 31)
- break;
-
- /* See if it is followed by a '+' or '-'. */
- if (*e == '+') {
- e++;
- } else if (*e == '-') {
- e++;
- month_day = -month_day;
- }
- }
-
- /* Check the next char is whitespace or the end of the string. */
- if (*e != ' ' && *e != '\t' && *e != '\0')
- break;
-
- recur->by_month_day[i] = month_day;
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
-
- /* Terminate the array, if it isn't full. */
- if (i < ICAL_BY_MONTHDAY_SIZE)
- recur->by_month_day[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- return s;
-}
-
-
-static char* rrule_parse_monthly_positions (char *s,
- struct icalrecurrencetype *recur,
- char **error_message)
-{
- int occurrences[ICAL_BY_DAY_SIZE];
- int found_weekdays[7] = { 0 };
- int i, num_positions, elems, month_position, day;
- int num_weekdays, only_weekday;
- char *e;
-
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- /* First read the month position into our local occurrences array. */
- for (i = 0; i < ICAL_BY_DAY_SIZE; i++) {
- int month_position;
-
- /* Check we got a valid position number. */
- month_position = *s - '0';
- if (month_position < 0 || month_position > 5)
- break;
-
- /* See if it is followed by a '+' or '-'. */
- e = s + 1;
- if (*e == '+') {
- e++;
- } else if (*e == '-') {
- e++;
- month_position = -month_position;
- }
-
- /* Check the next char is whitespace or the end of the string. */
- if (*e != ' ' && *e != '\t' && *e != '\0')
- break;
-
- occurrences[i] = month_position;
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
- num_positions = i;
-
- /* Now read the weekdays in. */
- for (;;) {
- char *e;
- int found_day, day;
-
- found_day = -1;
- for (day = 0; day < 7; day++) {
- if (!strncmp (weekdays[day], s, 2)) {
- /* Check the next char is whitespace or the end of string. */
- e = s + 2;
- if (*e == ' ' || *e == '\t' || *e == '\0') {
- found_day = day;
- break;
- }
- }
- }
-
- if (found_day == -1)
- break;
-
- found_weekdays[found_day] = 1;
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
-
- /* Now merge them together into the recur->by_day array. If there is a
- single position & weekday we output something like
- 'BYDAY=TU;BYSETPOS=2', so Outlook will understand it. */
- num_weekdays = 0;
- for (day = 0; day < 7; day++) {
- if (found_weekdays[day]) {
- num_weekdays++;
- only_weekday = day;
- }
- }
- if (num_positions == 1 && num_weekdays == 1) {
- recur->by_day[0] = weekday_codes[only_weekday];
- recur->by_day[1] = ICAL_RECURRENCE_ARRAY_MAX;
-
- recur->by_set_pos[0] = occurrences[0];
- recur->by_set_pos[1] = ICAL_RECURRENCE_ARRAY_MAX;
- } else {
- elems = 0;
- for (i = 0; i < num_positions; i++) {
- month_position = occurrences[i];
-
- for (day = 0; day < 7; day++) {
- if (found_weekdays[day]) {
- recur->by_day[elems] = (abs (month_position) * 8 + weekday_codes[day]) * ((month_position < 0) ? -1 : 1);
- elems++;
- if (elems == ICAL_BY_DAY_SIZE)
- break;
- }
- }
-
- if (elems == ICAL_BY_DAY_SIZE)
- break;
- }
-
- /* Terminate the array, if it isn't full. */
- if (elems < ICAL_BY_DAY_SIZE)
- recur->by_day[elems] = ICAL_RECURRENCE_ARRAY_MAX;
- }
-
- return s;
-}
-
-
-static char* rrule_parse_yearly_months (char *s,
- struct icalrecurrencetype *recur,
- char **error_message)
-{
- int i;
-
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- for (i = 0; i < ICAL_BY_MONTH_SIZE; i++) {
- char *e;
- int month;
-
- month = strtol (s, &e, 10);
-
- /* Check we got a valid month. */
- if (month < 1 || month > 12)
- break;
-
- /* Check the next char is whitespace or the end of the string. */
- if (*e != ' ' && *e != '\t' && *e != '\0')
- break;
-
- recur->by_month[i] = month;
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
-
- /* Terminate the array, if it isn't full. */
- if (i < ICAL_BY_MONTH_SIZE)
- recur->by_month[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- return s;
-}
-
-
-static char* rrule_parse_yearly_days (char *s,
- struct icalrecurrencetype *recur,
- char **error_message)
-{
- int i;
-
- /* If we've already found an error, just return. */
- if (*error_message)
- return NULL;
-
- for (i = 0; i < ICAL_BY_YEARDAY_SIZE; i++) {
- char *e;
- int year_day;
-
- year_day = strtol (s, &e, 10);
-
- /* Check we got a valid year_day. */
- if (year_day < 1 || year_day > 366)
- break;
-
- /* Check the next char is whitespace or the end of the string. */
- if (*e != ' ' && *e != '\t' && *e != '\0')
- break;
-
- recur->by_year_day[i] = year_day;
-
- s = e;
- /* Skip any whitespace. */
- while (*s == ' ' || *s == '\t')
- s++;
- }
-
- /* Terminate the array, if it isn't full. */
- if (i < ICAL_BY_YEARDAY_SIZE)
- recur->by_year_day[i] = ICAL_RECURRENCE_ARRAY_MAX;
-
- return s;
-}
-
-
-
-
-/* Converts an RRULE/EXRULE property.
- NOTE: There are a few things that this doesn't handle:
- 1) vCalendar RRULE properties can contain an UNTIL date and a COUNT, and
- the first to occur specifies the end of the recurrence. However they
- are mutually exclusive in iCalendar. For now we just use the COUNT.
- 2) For MONTHLY By Position recurrences, if no modifiers are given they
- are to be calculated based on the DTSTART, e.g. if DTSTART is on the
- 3rd Wednesday of the month then all occurrences are on the 3rd Wed.
- This is awkward to do as we need to access the DTSTART property, which
- may be after the RRULE property. So we don't do this at present.
- 3) The Extended Recurrence Rule Grammar - we only support the Basic rules.
- The extended grammar supports rules embedded in other rules, MINUTELY
- recurrences, time modifiers in DAILY rules and maybe other stuff.
-*/
-
-void* rule_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty_kind kind = (icalproperty_kind)icaltype;
- icalproperty *prop = NULL;
- icalvalue *value;
- icalvalue_kind value_kind;
- char *s, *p, *error_message = NULL;
- const char *property_name;
- int free_string;
- struct icalrecurrencetype recur;
-
- s = get_string_value (object, &free_string);
-
- property_name = vObjectName (object);
-
- icalrecurrencetype_clear (&recur);
-
- if (*s == 'D') {
- /* The DAILY RRULE only has an interval and duration (COUNT/UNTIL). */
- recur.freq = ICAL_DAILY_RECURRENCE;
- p = rrule_parse_interval (s + 1, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else if (*s == 'W') {
- /* The WEEKLY RRULE has weekday modifiers - MO TU WE. */
- recur.freq = ICAL_WEEKLY_RECURRENCE;
- p = rrule_parse_interval (s + 1, &recur, &error_message);
- p = rrule_parse_weekly_days (p, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else if (*s == 'M' && *(s + 1) == 'D') {
- /* The MONTHLY By Day RRULE has day number modifiers - 1 1- LD. */
- recur.freq = ICAL_MONTHLY_RECURRENCE;
- p = rrule_parse_interval (s + 2, &recur, &error_message);
- p = rrule_parse_monthly_days (p, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else if (*s == 'M' && *(s + 1) == 'P') {
- /* The MONTHLY By Position RRULE has position modifiers - 1 2- and
- weekday modifiers - MO TU. */
- recur.freq = ICAL_MONTHLY_RECURRENCE;
- p = rrule_parse_interval (s + 2, &recur, &error_message);
- p = rrule_parse_monthly_positions (p, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else if (*s == 'Y' && *(s + 1) == 'M') {
- /* The YEARLY By Month RRULE has month modifiers - 1 3 12. */
- recur.freq = ICAL_YEARLY_RECURRENCE;
- p = rrule_parse_interval (s + 2, &recur, &error_message);
- p = rrule_parse_yearly_months (p, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else if (*s == 'Y' && *(s + 1) == 'D') {
- /* The YEARLY By Day RRULE has day number modifiers - 100 200. */
- recur.freq = ICAL_YEARLY_RECURRENCE;
- p = rrule_parse_interval (s + 2, &recur, &error_message);
- p = rrule_parse_yearly_days (p, &recur, &error_message);
- p = rrule_parse_duration (p, &recur, &error_message);
- } else {
- error_message = "Invalid RRULE Frequency";
- }
-
- if (error_message) {
- prop = create_parse_error_property (error_message, property_name, s);
- } else {
- if (!strcmp (property_name, "RRULE"))
- prop = icalproperty_new_rrule (recur);
- else
- prop = icalproperty_new_exrule (recur);
- }
-
- if (free_string)
- deleteStr (s);
-
- return (void*)prop;
-}
-
-
-
-/* directly convertable property. The string representation of vcal is
- the same as ical */
-
-void* dc_prop(int icaltype, VObject *object, icalcomponent *comp,
- icalvcal_defaults *defaults)
-{
- icalproperty_kind kind = (icalproperty_kind)icaltype;
- icalproperty *prop;
- icalvalue *value;
- icalvalue_kind value_kind;
- char *s,*t=0;
- int free_string;
-
-
- prop = icalproperty_new(kind);
-
- value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa(prop));
-
- s = get_string_value (object, &free_string);
-
- value = icalvalue_new_from_string(value_kind,s);
-
- if (free_string)
- deleteStr (s);
-
- icalproperty_set_value(prop,value);
-
- return (void*)prop;
-}
-
-
-/* My extraction program screwed up, so this table does not have all
-of the vcal properties in it. I didn't feel like re-doing the entire
-table, so you'll have to find the missing properties the hard way --
-the code will assert */
-
-struct conversion_table_struct conversion_table[] =
-{
-{VCCalProp, COMPONENT, comp, ICAL_VCALENDAR_COMPONENT},
-{VCTodoProp, COMPONENT, comp, ICAL_VTODO_COMPONENT},
-{VCEventProp, COMPONENT, comp, ICAL_VEVENT_COMPONENT},
-{VCAAlarmProp, COMPONENT, alarm_comp, ICAL_XAUDIOALARM_COMPONENT},
-{VCDAlarmProp, COMPONENT, alarm_comp, ICAL_XDISPLAYALARM_COMPONENT},
-{VCMAlarmProp, COMPONENT, alarm_comp, ICAL_XEMAILALARM_COMPONENT},
-{VCPAlarmProp, COMPONENT, alarm_comp, ICAL_XPROCEDUREALARM_COMPONENT},
-
-/* These can all be converted directly by parsing the string into a libical
- value. */
-{VCClassProp, PROPERTY, dc_prop, ICAL_CLASS_PROPERTY},
-{VCDescriptionProp, PROPERTY, dc_prop, ICAL_DESCRIPTION_PROPERTY},
-{VCAttendeeProp, PROPERTY, dc_prop, ICAL_ATTENDEE_PROPERTY},
-{VCDTendProp, PROPERTY, dc_prop, ICAL_DTEND_PROPERTY},
-{VCDTstartProp, PROPERTY, dc_prop, ICAL_DTSTART_PROPERTY},
-{VCDueProp, PROPERTY, dc_prop, ICAL_DUE_PROPERTY},
-{VCLocationProp, PROPERTY, dc_prop, ICAL_LOCATION_PROPERTY},
-{VCSummaryProp, PROPERTY, dc_prop, ICAL_SUMMARY_PROPERTY},
-{VCUniqueStringProp, PROPERTY, dc_prop, ICAL_UID_PROPERTY},
-{VCURLProp, PROPERTY, dc_prop, ICAL_URL_PROPERTY},
-{VCPriorityProp, PROPERTY, dc_prop, ICAL_PRIORITY_PROPERTY},
-
-/* These can contain multiple values, which are separated in ';' in vCalendar
- but ',' in iCalendar. */
-{VCCategoriesProp, PROPERTY, multivalued_prop,ICAL_CATEGORIES_PROPERTY},
-{VCRDateProp, PROPERTY, multivalued_prop,ICAL_RDATE_PROPERTY},
-{VCExpDateProp, PROPERTY, multivalued_prop,ICAL_EXDATE_PROPERTY},
-
-/* These can be in floating time in vCalendar, but must be in UTC in iCalendar.
- */
-{VCDCreatedProp, PROPERTY, utc_datetime_prop,ICAL_CREATED_PROPERTY},
-{VCLastModifiedProp, PROPERTY, utc_datetime_prop,ICAL_LASTMODIFIED_PROPERTY},
-{VCCompletedProp, PROPERTY, utc_datetime_prop,ICAL_COMPLETED_PROPERTY},
-
-{VCTranspProp, PROPERTY, transp_prop, ICAL_TRANSP_PROPERTY},
-{VCSequenceProp, PROPERTY, sequence_prop, ICAL_SEQUENCE_PROPERTY},
-{VCStatusProp, PROPERTY, status_prop, ICAL_STATUS_PROPERTY},
-{VCRRuleProp, PROPERTY, rule_prop, ICAL_RRULE_PROPERTY},
-{VCXRuleProp, PROPERTY, rule_prop, ICAL_EXRULE_PROPERTY},
-
-{VCRSVPProp, UNSUPPORTED, rsvp_parameter,ICAL_RSVP_PARAMETER },
-{VCEncodingProp, UNSUPPORTED, parameter, ICAL_ENCODING_PARAMETER},
-{VCRoleProp, UNSUPPORTED, parameter, ICAL_ROLE_PARAMETER},
-
-/* We don't want the old VERSION or PRODID properties copied across as they
- are now incorrect. New VERSION & PRODID properties are added instead. */
-{VCVersionProp, IGNORE, 0, 0},
-{VCProdIdProp, IGNORE, 0, 0},
-
-/* We ignore DAYLIGHT and TZ properties of the toplevel object, since we can't
- really do much with them. */
-{VCDayLightProp, IGNORE, 0, 0},
-{VCTimeZoneProp, IGNORE, 0, 0},
-
-/* These are all alarm properties. We handle these when the alarm component
- is created, so we ignore them when doing the automatic conversions.
- "TYPE" is used in AALARM, but doesn't seem to have a name in vobject.h. */
-{"TYPE", IGNORE,0, 0},
-{VCRunTimeProp, IGNORE,0, 0},
-{VCSnoozeTimeProp, IGNORE,0, 0},
-{VCRepeatCountProp, IGNORE,0, 0},
-{VCValueProp, IGNORE,0, 0},
-{VCProcedureNameProp, IGNORE,0, 0},
-{VCDisplayStringProp, IGNORE,0, 0},
-{VCEmailAddressProp, IGNORE,0, 0},
-{VCNoteProp, IGNORE,0, 0},
-
-{VCQuotedPrintableProp,UNSUPPORTED,0, 0},
-{VC7bitProp, UNSUPPORTED,0, 0},
-{VC8bitProp, UNSUPPORTED,0, 0},
-{VCAdditionalNamesProp,UNSUPPORTED,0, 0},
-{VCAdrProp, UNSUPPORTED,0, 0},
-{VCAgentProp, UNSUPPORTED,0, 0},
-{VCAIFFProp, UNSUPPORTED,0, 0},
-{VCAOLProp, UNSUPPORTED,0, 0},
-{VCAppleLinkProp, UNSUPPORTED,0, 0},
-{VCAttachProp, UNSUPPORTED,0, 0},
-{VCATTMailProp, UNSUPPORTED,0, 0},
-{VCAudioContentProp, UNSUPPORTED,0, 0},
-{VCAVIProp, UNSUPPORTED,0, 0},
-{VCBase64Prop, UNSUPPORTED,0, 0},
-{VCBBSProp, UNSUPPORTED,0, 0},
-{VCBirthDateProp, UNSUPPORTED,0, 0},
-{VCBMPProp, UNSUPPORTED,0, 0},
-{VCBodyProp, UNSUPPORTED,0, 0},
-{VCCaptionProp, UNSUPPORTED,0, 0},
-{VCCarProp, UNSUPPORTED,0, 0},
-{VCCellularProp, UNSUPPORTED,0, 0},
-{VCCGMProp, UNSUPPORTED,0, 0},
-{VCCharSetProp, UNSUPPORTED,0, 0},
-{VCCIDProp, UNSUPPORTED,0, 0},
-{VCCISProp, UNSUPPORTED,0, 0},
-{VCCityProp, UNSUPPORTED,0, 0},
-{VCCommentProp, UNSUPPORTED,0, 0},
-{VCCountryNameProp, UNSUPPORTED,0, 0},
-{VCDataSizeProp, UNSUPPORTED,0, 0},
-{VCDeliveryLabelProp, UNSUPPORTED,0, 0},
-{VCDIBProp, UNSUPPORTED,0, 0},
-{VCDomesticProp, UNSUPPORTED,0, 0},
-{VCEndProp, UNSUPPORTED,0, 0},
-{VCEWorldProp, UNSUPPORTED,0, 0},
-{VCExNumProp, UNSUPPORTED,0, 0},
-{VCExpectProp, UNSUPPORTED,0, 0},
-{VCFamilyNameProp, UNSUPPORTED,0, 0},
-{VCFaxProp, UNSUPPORTED,0, 0},
-{VCFullNameProp, UNSUPPORTED,0, 0},
-{VCGeoProp, UNSUPPORTED,0, 0},
-{VCGeoLocationProp, UNSUPPORTED,0, 0},
-{VCGIFProp, UNSUPPORTED,0, 0},
-{VCGivenNameProp, UNSUPPORTED,0, 0},
-{VCGroupingProp, UNSUPPORTED,0, 0},
-{VCHomeProp, UNSUPPORTED,0, 0},
-{VCIBMMailProp, UNSUPPORTED,0, 0},
-{VCInlineProp, UNSUPPORTED,0, 0},
-{VCInternationalProp, UNSUPPORTED,0, 0},
-{VCInternetProp, UNSUPPORTED,0, 0},
-{VCISDNProp, UNSUPPORTED,0, 0},
-{VCJPEGProp, UNSUPPORTED,0, 0},
-{VCLanguageProp, UNSUPPORTED,0, 0},
-{VCLastRevisedProp, UNSUPPORTED,0, 0},
-{VCLogoProp, UNSUPPORTED,0, 0},
-{VCMailerProp, UNSUPPORTED,0, 0},
-{VCMCIMailProp, UNSUPPORTED,0, 0},
-{VCMessageProp, UNSUPPORTED,0, 0},
-{VCMETProp, UNSUPPORTED,0, 0},
-{VCModemProp, UNSUPPORTED,0, 0},
-{VCMPEG2Prop, UNSUPPORTED,0, 0},
-{VCMPEGProp, UNSUPPORTED,0, 0},
-{VCMSNProp, UNSUPPORTED,0, 0},
-{VCNamePrefixesProp, UNSUPPORTED,0, 0},
-{VCNameProp, UNSUPPORTED,0, 0},
-{VCNameSuffixesProp, UNSUPPORTED,0, 0},
-{VCOrgNameProp, UNSUPPORTED,0, 0},
-{VCOrgProp, UNSUPPORTED,0, 0},
-{VCOrgUnit2Prop, UNSUPPORTED,0, 0},
-{VCOrgUnit3Prop, UNSUPPORTED,0, 0},
-{VCOrgUnit4Prop, UNSUPPORTED,0, 0},
-{VCOrgUnitProp, UNSUPPORTED,0, 0},
-{VCPagerProp, UNSUPPORTED,0, 0},
-{VCParcelProp, UNSUPPORTED,0, 0},
-{VCPartProp, UNSUPPORTED,0, 0},
-{VCPCMProp, UNSUPPORTED,0, 0},
-{VCPDFProp, UNSUPPORTED,0, 0},
-{VCPGPProp, UNSUPPORTED,0, 0},
-{VCPhotoProp, UNSUPPORTED,0, 0},
-{VCPICTProp, UNSUPPORTED,0, 0},
-{VCPMBProp, UNSUPPORTED,0, 0},
-{VCPostalBoxProp, UNSUPPORTED,0, 0},
-{VCPostalCodeProp, UNSUPPORTED,0, 0},
-{VCPostalProp, UNSUPPORTED,0, 0},
-{VCPowerShareProp, UNSUPPORTED,0, 0},
-{VCPreferredProp, UNSUPPORTED,0, 0},
-{VCProdigyProp, UNSUPPORTED,0, 0},
-{VCPronunciationProp, UNSUPPORTED,0, 0},
-{VCPSProp, UNSUPPORTED,0, 0},
-{VCPublicKeyProp, UNSUPPORTED,0, 0},
-{VCQPProp, UNSUPPORTED,0, 0},
-{VCQuickTimeProp, UNSUPPORTED,0, 0},
-{VCRegionProp, UNSUPPORTED,0, 0},
-{VCResourcesProp, UNSUPPORTED,0, 0},
-{VCRNumProp, UNSUPPORTED,0, 0},
-{VCStartProp, UNSUPPORTED,0, 0},
-{VCStreetAddressProp, UNSUPPORTED,0, 0},
-{VCSubTypeProp, UNSUPPORTED,0, 0},
-{VCTelephoneProp, UNSUPPORTED,0, 0},
-{VCTIFFProp, UNSUPPORTED,0, 0},
-{VCTitleProp, UNSUPPORTED,0, 0},
-{VCTLXProp, UNSUPPORTED,0, 0},
-{VCURLValueProp, UNSUPPORTED,0, 0},
-{VCVideoProp, UNSUPPORTED,0, 0},
-{VCVoiceProp, UNSUPPORTED,0, 0},
-{VCWAVEProp, UNSUPPORTED,0, 0},
-{VCWMFProp, UNSUPPORTED,0, 0},
-{VCWorkProp, UNSUPPORTED,0, 0},
-{VCX400Prop, UNSUPPORTED,0, 0},
-{VCX509Prop, UNSUPPORTED,0, 0},
-
-{0,0,0,0}
-};
-
-
-#if 0
- switch (vObjectValueType(object)) {
- case VCVT_USTRINGZ: {
- char c;
- char *t,*s;
- s = t = fakeCString(vObjectUStringZValue(object));
- printf(" ustringzstring:%s\n",s);
- deleteStr(s);
- break;
- }
- case VCVT_STRINGZ: {
- char c;
- const char *s = vObjectStringZValue(object);
- printf(" stringzstring:%s\n",s);
- break;
- }
- case VCVT_UINT:
- {
- int i = vObjectIntegerValue(object);
- printf(" int:%d\n",i);
- break;
- }
- case VCVT_ULONG:
- {
- long l = vObjectLongValue(object);
- printf(" int:%d\n",l);
- break;
- }
- case VCVT_VOBJECT:
- {
- printf("ERROR, should not get here\n");
- break;
- }
- case VCVT_RAW:
- case 0:
- default:
- break;
- }
-
-#endif
diff --git a/libical/src/libicalvcal/icalvcal.h b/libical/src/libicalvcal/icalvcal.h
deleted file mode 100644
index e5e0be7831..0000000000
--- a/libical/src/libicalvcal/icalvcal.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C -*-*/
-/*======================================================================
- FILE: icalvcal.h
- CREATOR: eric 25 May 00
-
-
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The original code is icalvcal.h
-
-
-======================================================================*/
-
-#ifndef ICALVCAL_H
-#define ICALVCAL_H
-
-#include <libical/ical.h>
-#include "vcc.h"
-
-/* These are used as default values if the values are missing in the vCalendar
- file. Gnome Calendar, for example, does not save the URL of the audio alarm,
- so we have to add a value here to make a valid iCalendar object. */
-typedef struct _icalvcal_defaults icalvcal_defaults;
-struct _icalvcal_defaults {
- char *alarm_audio_url;
- char *alarm_audio_fmttype;
- char *alarm_description;
-};
-
-
-/* Convert a vObject into an icalcomponent */
-
-icalcomponent* icalvcal_convert(VObject *object);
-
-
-icalcomponent* icalvcal_convert_with_defaults (VObject *object,
- icalvcal_defaults *defaults);
-
-#endif /* !ICALVCAL_H */
-
-
-
diff --git a/libical/src/libicalvcal/port.h b/libical/src/libicalvcal/port.h
deleted file mode 100644
index 1768beebd8..0000000000
--- a/libical/src/libicalvcal/port.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-#ifndef __PORT_H__
-#define __PORT_H__ 1
-
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-extern "C" {
-#endif
-
-/* some of these #defines are commented out because */
-/* Visual C++ sets them on the compiler command line instead */
-
-/* #define _DEBUG */
-/* #define WIN32 */
-/* #define WIN16 */
-/* #define _WINDOWS */
-/* #define __MWERKS__ */
-/* #define INCLUDEMFC */
-
-#define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard"
-#define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar"
-
-/* The above strings vCardClipboardFormat and vCalendarClipboardFormat
-are globally unique IDs which can be used to generate clipboard format
-ID's as per the requirements of a specific platform. For example, in
-Windows they are used as the parameter in a call to RegisterClipboardFormat.
-For example:
-
- CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat);
-
-*/
-
-#define vCardMimeType "text/x-vCard"
-#define vCalendarMimeType "text/x-vCalendar"
-
-#define DLLEXPORT(t) t
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#define stricmp strcasecmp
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-}
-#endif
-
-#endif /* __PORT_H__ */
diff --git a/libical/src/libicalvcal/vcaltest.c b/libical/src/libicalvcal/vcaltest.c
deleted file mode 100644
index 5528aab1d1..0000000000
--- a/libical/src/libicalvcal/vcaltest.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include "vcaltmp.h"
-
-#if 0
-This testcase would generate a file call "frankcal.vcf" with
-the following content:
-
-BEGIN:VCALENDAR
-DCREATED:19960523T100522
-GEO:37.24,-17.87
-PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN
-VERSION:0.3
-BEGIN:VEVENT
-DTSTART:19960523T120000
-DTEND:19960523T130000
-DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A=
-With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A=
-activities with European Press representatives.
-SUMMARY:VERSIT PDI PR Teleconference/Interview
-SUBTYPE:PHONE CALL
-STATUS:CONFIRMED
-TRANSP:19960523T100522-4000F100582713-009251
-UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2
-DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!;
-MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!;
-PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2;
-X-LDC-OR2-OLE:c:\temp\agenda.doc
-END:VEVENT
-
-BEGIN:VTODO
-DUE:19960614T0173000
-DESCRIPTION:Review VCalendar helper API.
-END:VTODO
-
-END:VCALENDAR
-
-#endif
-
-FILE *cfp;
-
-void testVcalAPIs() {
- FILE *fp;
- VObject *vcal, *vevent;
-#if _CONSOLE
- cfp = stdout;
-#else
- cfp = fopen("vcaltest.out","w");
-#endif
- if (cfp == 0) return;
- vcal = vcsCreateVCal(
- "19960523T100522",
- "37.24,-17.87",
- "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN",
- 0,
- "0.3"
- );
-
- vevent = vcsAddEvent(
- vcal,
- "19960523T120000",
- "19960523T130000",
- "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.",
- "VERSIT PDI PR Teleconference/Interview",
- "PHONE CALL",
- 0,
- "CONFIRMED",
- "19960523T100522-4000F100582713-009251",
- "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2",
- 0
- );
-
- vcsAddDAlarm(vevent, "19960523T114500", "5", "3",
- "Your Telecon Starts At Noon!!!");
- vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com",
- "Remember 05/23 Noon Telecon!!!");
- vcsAddPAlarm(vevent, "19960523T115500", 0 ,0,
- "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2");
-
- addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc");
-
- vcsAddTodo(
- vcal,
- 0,
- "19960614T0173000",
- 0,
- "Review VCalendar helper API.",
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- );
-
- /* now do something to the resulting VObject */
- /* pretty print on stdout for fun */
- printVObject(cfp,vcal);
- /* open the output text file */
-
-#define OUTFILE "frankcal.vcf"
-
- fp = fopen(OUTFILE, "w");
- if (fp) {
- /* write it in text form */
- writeVObject(fp,vcal);
- fclose(fp);
- }
- else {
- fprintf(cfp,"open output file '%s' failed\n", OUTFILE);
- }
- if (cfp != stdout) fclose(cfp);
- }
-
-void main() {
- testVcalAPIs();
- }
-
diff --git a/libical/src/libicalvcal/vcaltmp.c b/libical/src/libicalvcal/vcaltmp.c
deleted file mode 100644
index ccb21a649a..0000000000
--- a/libical/src/libicalvcal/vcaltmp.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-This module provides some helper APIs for creating
-a VCalendar object.
-
-Note on APIs:
- 1. The APIs does not attempt to verify if the arguments
- passed are correct.
- 2. Where the argument to an API is not applicable, pass
- the value 0.
- 3. See the test program at the bottom of this file as an
- example of usage.
- 4. This code calls APIs in vobject.c.
-
-*/
-
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-
-#include <stdio.h>
-#include <string.h>
-#include "vcaltmp.h"
-
-
-DLLEXPORT(VObject*) vcsCreateVCal(
- char *date_created,
- char *location,
- char *product_id,
- char *time_zone,
- char *version
- )
- {
- VObject *vcal = newVObject(VCCalProp);
-#define Z(p,v) if (v) addPropValue(vcal,p,v);
- Z(VCDCreatedProp, date_created);
- Z(VCLocationProp, location)
- Z(VCProdIdProp, product_id)
- Z(VCTimeZoneProp, time_zone)
- Z(VCVersionProp, version)
-#undef Z
- return vcal;
- }
-
-
-DLLEXPORT(VObject*) vcsAddEvent(
- VObject *vcal,
- char *start_date_time,
- char *end_date_time,
- char *description,
- char *summary,
- char *categories,
- char *classification,
- char *status,
- char *transparency,
- char *uid,
- char *url
- )
- {
- VObject *vevent = addProp(vcal,VCEventProp);
-#define Z(p,v) if (v) addPropValue(vevent,p,v);
- Z(VCDTstartProp,start_date_time);
- Z(VCDTendProp,end_date_time);
- if (description) {
- VObject *p = addPropValue(vevent,VCDescriptionProp,description);
- if (strchr(description,'\n'))
- addProp(p,VCQuotedPrintableProp);
- }
- Z(VCSummaryProp,summary);
- Z(VCCategoriesProp,categories);
- Z(VCClassProp,classification);
- Z(VCStatusProp,status);
- Z(VCTranspProp,transparency);
- Z(VCUniqueStringProp,uid);
- Z(VCURLProp,url);
-#undef Z
- return vevent;
- }
-
-
-DLLEXPORT(VObject*) vcsAddTodo(
- VObject *vcal,
- char *start_date_time,
- char *due_date_time,
- char *date_time_complete,
- char *description,
- char *summary,
- char *priority,
- char *classification,
- char *status,
- char *uid,
- char *url
- )
- {
- VObject *vtodo = addProp(vcal,VCTodoProp);
-#define Z(p,v) if (v) addPropValue(vtodo,p,v);
- Z(VCDTstartProp,start_date_time);
- Z(VCDueProp,due_date_time);
- Z(VCCompletedProp,date_time_complete);
- if (description) {
- VObject *p = addPropValue(vtodo,VCDescriptionProp,description);
- if (strchr(description,'\n'))
- addProp(p,VCQuotedPrintableProp);
- }
- Z(VCSummaryProp,summary);
- Z(VCPriorityProp,priority);
- Z(VCClassProp,classification);
- Z(VCStatusProp,status);
- Z(VCUniqueStringProp,uid);
- Z(VCURLProp,url);
-#undef Z
- return vtodo;
- }
-
-
-DLLEXPORT(VObject*) vcsAddAAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *audio_content
- )
- {
- VObject *aalarm= addProp(vevent,VCAAlarmProp);
-#define Z(p,v) if (v) addPropValue(aalarm,p,v);
- Z(VCRunTimeProp,run_time);
- Z(VCSnoozeTimeProp,snooze_time);
- Z(VCRepeatCountProp,repeat_count);
- Z(VCAudioContentProp,audio_content);
-#undef Z
- return aalarm;
- }
-
-
-DLLEXPORT(VObject*) vcsAddMAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *email_address,
- char *note
- )
- {
- VObject *malarm= addProp(vevent,VCMAlarmProp);
-#define Z(p,v) if (v) addPropValue(malarm,p,v);
- Z(VCRunTimeProp,run_time);
- Z(VCSnoozeTimeProp,snooze_time);
- Z(VCRepeatCountProp,repeat_count);
- Z(VCEmailAddressProp,email_address);
- Z(VCNoteProp,note);
-#undef Z
- return malarm;
- }
-
-
-DLLEXPORT(VObject*) vcsAddDAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *display_string
- )
- {
- VObject *dalarm= addProp(vevent,VCDAlarmProp);
-#define Z(p,v) if (v) addPropValue(dalarm,p,v);
- Z(VCRunTimeProp,run_time);
- Z(VCSnoozeTimeProp,snooze_time);
- Z(VCRepeatCountProp,repeat_count);
- Z(VCDisplayStringProp,display_string);
-#undef Z
- return dalarm;
- }
-
-
-DLLEXPORT(VObject*) vcsAddPAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *procedure_name
- )
- {
- VObject *palarm= addProp(vevent,VCPAlarmProp);
-#define Z(p,v) if (v) addPropValue(palarm,p,v);
- Z(VCRunTimeProp,run_time);
- Z(VCSnoozeTimeProp,snooze_time);
- Z(VCRepeatCountProp,repeat_count);
- Z(VCProcedureNameProp,procedure_name);
-#undef Z
- return palarm;
- }
-
-
-#ifdef _TEST
-
-#if 0
-This testcase would generate a file call "frankcal.vcf" with
-the following content:
-
-BEGIN:VCALENDAR
-DCREATED:19960523T100522
-GEO:37.24,-17.87
-PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN
-VERSION:0.3
-BEGIN:VEVENT
-DTSTART:19960523T120000
-DTEND:19960523T130000
-DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A=
-With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A=
-activities with European Press representatives.
-SUMMARY:VERSIT PDI PR Teleconference/Interview
-CATEGORIES:PHONE CALL
-STATUS:CONFIRMED
-TRANSP:19960523T100522-4000F100582713-009251
-UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2
-DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!;
-MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!;
-PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2;
-X-LDC-OR2-OLE:c:\temp\agenda.doc
-END:VEVENT
-
-BEGIN:VTODO
-DUE:19960614T0173000
-DESCRIPTION:Review VCalendar helper API.
-END:VTODO
-
-END:VCALENDAR
-
-#endif
-
-void testVcalAPIs() {
- FILE *fp;
- VObject *vcal = vcsCreateVCal(
- "19960523T100522",
- "37.24,-17.87",
- "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN",
- 0,
- "0.3"
- );
-
- VObject *vevent = vcsAddEvent(
- vcal,
- "19960523T120000",
- "19960523T130000",
- "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.",
- "VERSIT PDI PR Teleconference/Interview",
- "PHONE CALL",
- 0,
- "CONFIRMED",
- "19960523T100522-4000F100582713-009251",
- "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2",
- 0
- );
-
- vcsAddDAlarm(vevent, "19960523T114500", "5", "3",
- "Your Telecon Starts At Noon!!!");
- vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com",
- "Remember 05/23 Noon Telecon!!!");
- vcsAddPAlarm(vevent, "19960523T115500", 0 ,0,
- "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2");
-
- addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc");
-
- vcsAddTodo(
- vcal,
- 0,
- "19960614T0173000",
- 0,
- "Review VCalendar helper API.",
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- );
-
- /* now do something to the resulting VObject */
- /* pretty print on stdout for fun */
- printVObject(vcal);
- /* open the output text file */
-
-#define OUTFILE "frankcal.vcf"
-
- fp = fopen(OUTFILE, "w");
- if (fp) {
- /* write it in text form */
- writeVObject(fp,vcal);
- fclose(fp);
- }
- else {
- printf("open output file '%s' failed\n", OUTFILE);
- }
- }
-
-void main() {
- testVcalAPIs();
- }
-
-#endif
-
-
-/* end of source file vcaltmp.c */
diff --git a/libical/src/libicalvcal/vcaltmp.h b/libical/src/libicalvcal/vcaltmp.h
deleted file mode 100644
index 4c4afde963..0000000000
--- a/libical/src/libicalvcal/vcaltmp.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-#include "vcc.h"
-
-#ifndef __VCALTMP_H__
-#define __VCALTMP_H__
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-extern "C" {
-#endif
-
-extern DLLEXPORT(VObject*) vcsCreateVCal(
- char *date_created,
- char *location,
- char *product_id,
- char *time_zone,
- char *version
- );
-
-extern DLLEXPORT(VObject*) vcsAddEvent(
- VObject *vcal,
- char *start_date_time,
- char *end_date_time,
- char *description,
- char *summary,
- char *categories,
- char *classification,
- char *status,
- char *transparency,
- char *uid,
- char *url
- );
-
-
-extern DLLEXPORT(VObject*) vcsAddTodo(
- VObject *vcal,
- char *start_date_time,
- char *due_date_time,
- char *date_time_complete,
- char *description,
- char *summary,
- char *priority,
- char *classification,
- char *status,
- char *uid,
- char *url
- );
-
-
-extern DLLEXPORT(VObject*) vcsAddAAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *audio_content
- );
-
-
-extern DLLEXPORT(VObject*) vcsAddMAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *email_address,
- char *note
- );
-
-
-extern DLLEXPORT(VObject*) vcsAddDAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *display_string
- );
-
-
-extern DLLEXPORT(VObject*) vcsAddPAlarm(
- VObject *vevent,
- char *run_time,
- char *snooze_time,
- char *repeat_count,
- char *procedure_name
- );
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-}
-#endif
-
-#endif /* __VCALTMP_H__ */
-
-
diff --git a/libical/src/libicalvcal/vcc.h b/libical/src/libicalvcal/vcc.h
deleted file mode 100644
index 0e52034710..0000000000
--- a/libical/src/libicalvcal/vcc.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-#ifndef __VCC_H__
-#define __VCC_H__ 1
-
-#include "vobject.h"
-
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-extern "C" {
-#endif
-
-typedef void (*MimeErrorHandler)(char *);
-
-extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler);
-
-extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len);
-extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname);
-
-
-/* NOTE regarding Parse_MIME_FromFile
-The function above, Parse_MIME_FromFile, comes in two flavors,
-neither of which is exported from the DLL. Each version takes
-a CFile or FILE* as a parameter, neither of which can be
-passed across a DLL interface (at least that is my experience).
-If you are linking this code into your build directly then
-you may find them a more convenient API that the other flavors
-that take a file name. If you use them with the DLL LIB you
-will get a link error.
-*/
-
-
-#if INCLUDEMFC
-extern VObject* Parse_MIME_FromFile(CFile *file);
-#else
-extern VObject* Parse_MIME_FromFile(FILE *file);
-#endif
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-}
-#endif
-
-#endif /* __VCC_H__ */
-
diff --git a/libical/src/libicalvcal/vcc.y b/libical/src/libicalvcal/vcc.y
deleted file mode 100644
index 245774f37e..0000000000
--- a/libical/src/libicalvcal/vcc.y
+++ /dev/null
@@ -1,1200 +0,0 @@
-%{
-
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-/*
- * src: vcc.c
- * doc: Parser for vCard and vCalendar. Note that this code is
- * generated by a yacc parser generator. Generally it should not
- * be edited by hand. The real source is vcc.y. The #line directives
- * can be commented out here to make it easier to trace through
- * in a debugger. However, if a bug is found it should
- * be fixed in vcc.y and this file regenerated.
- */
-
-
-/* debugging utilities */
-#if __DEBUG
-#define DBG_(x) printf x
-#else
-#define DBG_(x)
-#endif
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-/**** External Functions ****/
-
-/* assign local name to parser variables and functions so that
- we can use more than one yacc based parser.
-*/
-
-#define yyparse mime_parse
-#define yylex mime_lex
-#define yyerror mime_error
-#define yychar mime_char
-/* #define p_yyval p_mime_val */
-#undef yyval
-#define yyval mime_yyval
-/* #define p_yylval p_mime_lval */
-#undef yylval
-#define yylval mime_yylval
-#define yydebug mime_debug
-#define yynerrs mime_nerrs
-#define yyerrflag mime_errflag
-#define yyss mime_ss
-#define yyssp mime_ssp
-#define yyvs mime_vs
-#define yyvsp mime_vsp
-#define yylhs mime_lhs
-#define yylen mime_len
-#define yydefred mime_defred
-#define yydgoto mime_dgoto
-#define yysindex mime_sindex
-#define yyrindex mime_rindex
-#define yygindex mime_gindex
-#define yytable mime_table
-#define yycheck mime_check
-#define yyname mime_name
-#define yyrule mime_rule
-#define YYPREFIX "mime_"
-
-
-#ifndef _NO_LINE_FOLDING
-#define _SUPPORT_LINE_FOLDING 1
-#endif
-
-/* undef below if compile with MFC */
-/* #define INCLUDEMFC 1 */
-
-#if defined(WIN32) || defined(_WIN32)
-#ifdef INCLUDEMFC
-#include <afx.h>
-#endif
-#endif
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include "vcc.h"
-
-/**** Types, Constants ****/
-
-#define YYDEBUG 1 /* 1 to compile in some debugging code */
-#define MAXTOKEN 256 /* maximum token (line) length */
-#define YYSTACKSIZE 50 /* ~unref ? */
-#define MAXLEVEL 10 /* max # of nested objects parseable */
- /* (includes outermost) */
-
-
-/**** Global Variables ****/
-int mime_lineNum, mime_numErrors; /* yyerror() can use these */
-static VObject* vObjList;
-static VObject *curProp;
-static VObject *curObj;
-static VObject* ObjStack[MAXLEVEL];
-static int ObjStackTop;
-
-
-/* A helpful utility for the rest of the app. */
-#if __CPLUSPLUS__
-extern "C" {
-#endif
-
- extern void Parse_Debug(const char *s);
- static void yyerror(char *s);
-
-#if __CPLUSPLUS__
- };
-#endif
-
-int yyparse();
-
-enum LexMode {
- L_NORMAL,
- L_VCARD,
- L_VCAL,
- L_VEVENT,
- L_VTODO,
- L_VALUES,
- L_BASE64,
- L_QUOTED_PRINTABLE
- };
-
-/**** Private Forward Declarations ****/
-static int pushVObject(const char *prop);
-static VObject* popVObject();
-static void lexPopMode(int top);
-static int lexWithinMode(enum LexMode mode);
-static void lexPushMode(enum LexMode mode);
-static void enterProps(const char *s);
-static void enterAttr(const char *s1, const char *s2);
-static void enterValues(const char *value);
-static void mime_error_(char *s);
-
-%}
-
-/***************************************************************************/
-/*** The grammar ****/
-/***************************************************************************/
-
-%union {
- char *str;
- VObject *vobj;
- }
-
-%token
- EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE
- BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL
- BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO
- ID
-
-/*
- * NEWLINE is the token that would occur outside a vCard,
- * while LINESEP is the token that would occur inside a vCard.
- */
-
-%token <str>
- STRING ID
-
-%type <str> name value
-
-%type <vobj> vcard vcal vobject
-
-%start mime
-
-%%
-
-
-mime: vobjects
- ;
-
-vobjects: vobject
- { addList(&vObjList, $1); curObj = 0; }
- vobjects
- | vobject
- { addList(&vObjList, $1); curObj = 0; }
- ;
-
-vobject: vcard
- | vcal
- ;
-
-vcard:
- BEGIN_VCARD
- {
- lexPushMode(L_VCARD);
- if (!pushVObject(VCCardProp)) YYERROR;
- }
- items END_VCARD
- {
- lexPopMode(0);
- $$ = popVObject();
- }
- | BEGIN_VCARD
- {
- lexPushMode(L_VCARD);
- if (!pushVObject(VCCardProp)) YYERROR;
- }
- END_VCARD
- {
- lexPopMode(0);
- $$ = popVObject();
- }
- ;
-
-items: item items
- | item
- ;
-
-item: prop COLON
- {
- lexPushMode(L_VALUES);
- }
- values LINESEP
- {
- if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE))
- lexPopMode(0);
- lexPopMode(0);
- }
- | error
- ;
-
-prop: name
- {
- enterProps($1);
- }
- attr_params
- | name
- {
- enterProps($1);
- }
- ;
-
-attr_params: attr_param attr_params
- | attr_param
- ;
-
-attr_param: SEMICOLON attr
- ;
-
-attr: name
- {
- enterAttr($1,0);
- }
- | name EQ name
- {
- enterAttr($1,$3);
-
- }
- ;
-
-name: ID
- ;
-
-values: value SEMICOLON { enterValues($1); } values
- | value
- { enterValues($1); }
- ;
-
-value: STRING
- | { $$ = 0; }
- ;
-
-vcal:
- BEGIN_VCAL
- { if (!pushVObject(VCCalProp)) YYERROR; }
- calitems
- END_VCAL
- { $$ = popVObject(); }
- | BEGIN_VCAL
- { if (!pushVObject(VCCalProp)) YYERROR; }
- END_VCAL
- { $$ = popVObject(); }
- ;
-
-calitems: calitem calitems
- | calitem
- ;
-
-calitem:
- eventitem
- | todoitem
- | items
- ;
-
-eventitem:
- BEGIN_VEVENT
- {
- lexPushMode(L_VEVENT);
- if (!pushVObject(VCEventProp)) YYERROR;
- }
- items
- END_VEVENT
- {
- lexPopMode(0);
- popVObject();
- }
- | BEGIN_VEVENT
- {
- lexPushMode(L_VEVENT);
- if (!pushVObject(VCEventProp)) YYERROR;
- }
- END_VEVENT
- {
- lexPopMode(0);
- popVObject();
- }
- ;
-
-todoitem:
- BEGIN_VTODO
- {
- lexPushMode(L_VTODO);
- if (!pushVObject(VCTodoProp)) YYERROR;
- }
- items
- END_VTODO
- {
- lexPopMode(0);
- popVObject();
- }
- | BEGIN_VTODO
- {
- lexPushMode(L_VTODO);
- if (!pushVObject(VCTodoProp)) YYERROR;
- }
- END_VTODO
- {
- lexPopMode(0);
- popVObject();
- }
- ;
-
-%%
-static int pushVObject(const char *prop)
- {
- VObject *newObj;
- if (ObjStackTop == MAXLEVEL)
- return FALSE;
-
- ObjStack[++ObjStackTop] = curObj;
-
- if (curObj) {
- newObj = addProp(curObj,prop);
- curObj = newObj;
- }
- else
- curObj = newVObject(prop);
-
- return TRUE;
- }
-
-
-/* This pops the recently built vCard off the stack and returns it. */
-static VObject* popVObject()
- {
- VObject *oldObj;
- if (ObjStackTop < 0) {
- yyerror("pop on empty Object Stack\n");
- return 0;
- }
- oldObj = curObj;
- curObj = ObjStack[ObjStackTop--];
-
- return oldObj;
- }
-
-
-static void enterValues(const char *value)
- {
- if (fieldedProp && *fieldedProp) {
- if (value) {
- addPropValue(curProp,*fieldedProp,value);
- }
- /* else this field is empty, advance to next field */
- fieldedProp++;
- }
- else {
- if (value) {
- char *p1, *p2;
- wchar_t *p3;
- int i;
-
- /* If the property already has a string value, we append this one,
- using ';' to separate the values. */
- if (vObjectUStringZValue(curProp)) {
- p1 = fakeCString(vObjectUStringZValue(curProp));
- p2 = malloc((strlen(p1)+strlen(value)+1));
- strcpy(p2, p1);
- deleteStr(p1);
-
- i = strlen(p2);
- p2[i] = ';';
- p2[i+1] = '\0';
- p2 = strcat(p2, value);
- p3 = (wchar_t *) vObjectUStringZValue(curProp);
- free(p3);
- setVObjectUStringZValue_(curProp,fakeUnicode(p2,0));
- deleteStr(p2);
- } else {
- setVObjectUStringZValue_(curProp,fakeUnicode(value,0));
- }
- }
- }
- deleteStr(value);
- }
-
-static void enterProps(const char *s)
- {
- curProp = addGroup(curObj,s);
- deleteStr(s);
- }
-
-static void enterAttr(const char *s1, const char *s2)
- {
- const char *p1, *p2;
- p1 = lookupProp_(s1);
- if (s2) {
- VObject *a;
- p2 = lookupProp_(s2);
- a = addProp(curProp,p1);
- setVObjectStringZValue(a,p2);
- }
- else
- addProp(curProp,p1);
- if (stricmp(p1,VCBase64Prop) == 0 || (s2 && stricmp(p2,VCBase64Prop)==0))
- lexPushMode(L_BASE64);
- else if (stricmp(p1,VCQuotedPrintableProp) == 0
- || (s2 && stricmp(p2,VCQuotedPrintableProp)==0))
- lexPushMode(L_QUOTED_PRINTABLE);
- deleteStr(s1); deleteStr(s2);
- }
-
-
-#define MAX_LEX_LOOKAHEAD_0 32
-#define MAX_LEX_LOOKAHEAD 64
-#define MAX_LEX_MODE_STACK_SIZE 10
-#define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop])
-
-struct LexBuf {
- /* input */
-#ifdef INCLUDEMFC
- CFile *inputFile;
-#else
- FILE *inputFile;
-#endif
- char *inputString;
- unsigned long curPos;
- unsigned long inputLen;
- /* lookahead buffer */
- /* -- lookahead buffer is short instead of char so that EOF
- / can be represented correctly.
- */
- unsigned long len;
- short buf[MAX_LEX_LOOKAHEAD];
- unsigned long getPtr;
- /* context stack */
- unsigned long lexModeStackTop;
- enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE];
- /* token buffer */
- unsigned long maxToken;
- char *strs;
- unsigned long strsLen;
- } lexBuf;
-
-static void lexPushMode(enum LexMode mode)
- {
- if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1))
- yyerror("lexical context stack overflow");
- else {
- lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode;
- }
- }
-
-static void lexPopMode(int top)
- {
- /* special case of pop for ease of error recovery -- this
- version will never underflow */
- if (top)
- lexBuf.lexModeStackTop = 0;
- else
- if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--;
- }
-
-static int lexWithinMode(enum LexMode mode) {
- unsigned long i;
- for (i=0;i<lexBuf.lexModeStackTop;i++)
- if (mode == lexBuf.lexModeStack[i]) return 1;
- return 0;
- }
-
-static char lexGetc_()
- {
- /* get next char from input, no buffering. */
- if (lexBuf.curPos == lexBuf.inputLen)
- return EOF;
- else if (lexBuf.inputString)
- return *(lexBuf.inputString + lexBuf.curPos++);
- else {
-#ifdef INCLUDEMFC
- char result;
- return lexBuf.inputFile->Read(&result, 1) == 1 ? result : EOF;
-#else
- return fgetc(lexBuf.inputFile);
-#endif
- }
- }
-
-static int lexGeta()
- {
- ++lexBuf.len;
- return (lexBuf.buf[lexBuf.getPtr] = lexGetc_());
- }
-
-static int lexGeta_(int i)
- {
- ++lexBuf.len;
- return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_());
- }
-
-static void lexSkipLookahead() {
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
- /* don't skip EOF. */
- lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
- lexBuf.len--;
- }
- }
-
-static int lexLookahead() {
- int c = (lexBuf.len)?
- lexBuf.buf[lexBuf.getPtr]:
- lexGeta();
- /* do the \r\n -> \n or \r -> \n translation here */
- if (c == '\r') {
- int a = (lexBuf.len>1)?
- lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]:
- lexGeta_(1);
- if (a == '\n') {
- lexSkipLookahead();
- }
- lexBuf.buf[lexBuf.getPtr] = c = '\n';
- }
- else if (c == '\n') {
- int a = (lexBuf.len>1)?
- lexBuf.buf[lexBuf.getPtr+1]:
- lexGeta_(1);
- if (a == '\r') {
- lexSkipLookahead();
- }
- lexBuf.buf[lexBuf.getPtr] = '\n';
- }
- return c;
- }
-
-static int lexGetc() {
- int c = lexLookahead();
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
- /* EOF will remain in lookahead buffer */
- lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
- lexBuf.len--;
- }
- return c;
- }
-
-static void lexSkipLookaheadWord() {
- if (lexBuf.strsLen <= lexBuf.len) {
- lexBuf.len -= lexBuf.strsLen;
- lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD;
- }
- }
-
-static void lexClearToken()
- {
- lexBuf.strsLen = 0;
- }
-
-static void lexAppendc(int c)
- {
- lexBuf.strs[lexBuf.strsLen] = c;
- /* append up to zero termination */
- if (c == 0) return;
- lexBuf.strsLen++;
- if (lexBuf.strsLen > lexBuf.maxToken) {
- /* double the token string size */
- lexBuf.maxToken <<= 1;
- lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken);
- }
- }
-
-static char* lexStr() {
- return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1);
- }
-
-static void lexSkipWhite() {
- int c = lexLookahead();
- while (c == ' ' || c == '\t') {
- lexSkipLookahead();
- c = lexLookahead();
- }
- }
-
-static char* lexGetWord() {
- int c;
- lexSkipWhite();
- lexClearToken();
- c = lexLookahead();
- while (c != EOF && !strchr("\t\n ;:=",c)) {
- lexAppendc(c);
- lexSkipLookahead();
- c = lexLookahead();
- }
- lexAppendc(0);
- return lexStr();
- }
-
-static void lexPushLookaheadc(int c) {
- int putptr;
- /* can't putback EOF, because it never leaves lookahead buffer */
- if (c == EOF) return;
- putptr = (int)lexBuf.getPtr - 1;
- if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD;
- lexBuf.getPtr = putptr;
- lexBuf.buf[putptr] = c;
- lexBuf.len += 1;
- }
-
-static char* lexLookaheadWord() {
- /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0
- / and thing bigger than that will stop the lookahead and return 0;
- / leading white spaces are not recoverable.
- */
- int c;
- int len = 0;
- int curgetptr = 0;
- lexSkipWhite();
- lexClearToken();
- curgetptr = (int)lexBuf.getPtr; /* remember! */
- while (len < (MAX_LEX_LOOKAHEAD_0)) {
- c = lexGetc();
- len++;
- if (c == EOF || strchr("\t\n ;:=", c)) {
- lexAppendc(0);
- /* restore lookahead buf. */
- lexBuf.len += len;
- lexBuf.getPtr = curgetptr;
- return lexStr();
- }
- else
- lexAppendc(c);
- }
- lexBuf.len += len; /* char that has been moved to lookahead buffer */
- lexBuf.getPtr = curgetptr;
- return 0;
- }
-
-#ifdef _SUPPORT_LINE_FOLDING
-static void handleMoreRFC822LineBreak(int c) {
- /* suport RFC 822 line break in cases like
- * ADR: foo;
- * morefoo;
- * more foo;
- */
- if (c == ';') {
- int a;
- lexSkipLookahead();
- /* skip white spaces */
- a = lexLookahead();
- while (a == ' ' || a == '\t') {
- lexSkipLookahead();
- a = lexLookahead();
- }
- if (a == '\n') {
- lexSkipLookahead();
- a = lexLookahead();
- if (a == ' ' || a == '\t') {
- /* continuation, throw away all the \n and spaces read so
- * far
- */
- lexSkipWhite();
- lexPushLookaheadc(';');
- }
- else {
- lexPushLookaheadc('\n');
- lexPushLookaheadc(';');
- }
- }
- else {
- lexPushLookaheadc(';');
- }
- }
- }
-
-static char* lexGet1Value() {
- int c;
- lexSkipWhite();
- c = lexLookahead();
- lexClearToken();
- while (c != EOF && c != ';') {
- if (c == '\n') {
- int a;
- lexSkipLookahead();
- a = lexLookahead();
- if (a == ' ' || a == '\t') {
- lexAppendc(' ');
- lexSkipLookahead();
- }
- else {
- lexPushLookaheadc('\n');
- break;
- }
- }
- else {
- lexAppendc(c);
- lexSkipLookahead();
- }
- c = lexLookahead();
- }
- lexAppendc(0);
- handleMoreRFC822LineBreak(c);
- return c==EOF?0:lexStr();
- }
-#endif
-
-
-static int match_begin_name(int end) {
- char *n = lexLookaheadWord();
- int token = ID;
- if (n) {
- if (!stricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD;
- else if (!stricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL;
- else if (!stricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT;
- else if (!stricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO;
- deleteStr(n);
- return token;
- }
- return 0;
- }
-
-
-#ifdef INCLUDEMFC
-void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile)
-#else
-void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile)
-#endif
- {
- /* initialize lex mode stack */
- lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL;
-
- /* iniatialize lex buffer. */
- lexBuf.inputString = (char*) inputstring;
- lexBuf.inputLen = inputlen;
- lexBuf.curPos = 0;
- lexBuf.inputFile = inputfile;
-
- lexBuf.len = 0;
- lexBuf.getPtr = 0;
-
- lexBuf.maxToken = MAXTOKEN;
- lexBuf.strs = (char*)malloc(MAXTOKEN);
- lexBuf.strsLen = 0;
-
- }
-
-static void finiLex() {
- free(lexBuf.strs);
- }
-
-
-/* This parses and converts the base64 format for binary encoding into
- * a decoded buffer (allocated with new). See RFC 1521.
- */
-static char * lexGetDataFromBase64()
- {
- unsigned long bytesLen = 0, bytesMax = 0;
- int quadIx = 0, pad = 0;
- unsigned long trip = 0;
- unsigned char b;
- int c;
- unsigned char *bytes = NULL;
- unsigned char *oldBytes = NULL;
-
- DBG_(("db: lexGetDataFromBase64\n"));
- while (1) {
- c = lexGetc();
- if (c == '\n') {
- ++mime_lineNum;
- if (lexLookahead() == '\n') {
- /* a '\n' character by itself means end of data */
- break;
- }
- else continue; /* ignore '\n' */
- }
- else {
- if ((c >= 'A') && (c <= 'Z'))
- b = (unsigned char)(c - 'A');
- else if ((c >= 'a') && (c <= 'z'))
- b = (unsigned char)(c - 'a') + 26;
- else if ((c >= '0') && (c <= '9'))
- b = (unsigned char)(c - '0') + 52;
- else if (c == '+')
- b = 62;
- else if (c == '/')
- b = 63;
- else if (c == '=') {
- b = 0;
- pad++;
- } else if ((c == ' ') || (c == '\t')) {
- continue;
- } else { /* error condition */
- if (bytes) free(bytes);
- else if (oldBytes) free(oldBytes);
- /* error recovery: skip until 2 adjacent newlines. */
- DBG_(("db: invalid character 0x%x '%c'\n", c,c));
- if (c != EOF) {
- c = lexGetc();
- while (c != EOF) {
- if (c == '\n' && lexLookahead() == '\n') {
- ++mime_lineNum;
- break;
- }
- c = lexGetc();
- }
- }
- return NULL;
- }
- trip = (trip << 6) | b;
- if (++quadIx == 4) {
- unsigned char outBytes[3];
- int numOut;
- int i;
- for (i = 0; i < 3; i++) {
- outBytes[2-i] = (unsigned char)(trip & 0xFF);
- trip >>= 8;
- }
- numOut = 3 - pad;
- if (bytesLen + numOut > bytesMax) {
- if (!bytes) {
- bytesMax = 1024;
- bytes = (unsigned char*)malloc((size_t)bytesMax);
- }
- else {
- bytesMax <<= 2;
- oldBytes = bytes;
- bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax);
- }
- if (bytes == 0) {
- mime_error("out of memory while processing BASE64 data\n");
- }
- }
- if (bytes) {
- memcpy(bytes + bytesLen, outBytes, numOut);
- bytesLen += numOut;
- }
- trip = 0;
- quadIx = 0;
- }
- }
- } /* while */
- DBG_(("db: bytesLen = %d\n", bytesLen));
- /* kludge: all this won't be necessary if we have tree form
- representation */
- if (bytes) {
- setValueWithSize(curProp,bytes,(unsigned int)bytesLen);
- free(bytes);
- }
- else if (oldBytes) {
- setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen);
- free(oldBytes);
- }
- return 0;
- }
-
-static int match_begin_end_name(int end) {
- int token;
- lexSkipWhite();
- if (lexLookahead() != ':') return ID;
- lexSkipLookahead();
- lexSkipWhite();
- token = match_begin_name(end);
- if (token == ID) {
- lexPushLookaheadc(':');
- DBG_(("db: ID '%s'\n", yylval.str));
- return ID;
- }
- else if (token != 0) {
- lexSkipLookaheadWord();
- deleteStr(yylval.str);
- DBG_(("db: begin/end %d\n", token));
- return token;
- }
- return 0;
- }
-
-static char* lexGetQuotedPrintable()
- {
- char cur;
-
- lexClearToken();
- do {
- cur = lexGetc();
- switch (cur) {
- case '=': {
- int c = 0;
- int next[2];
- int i;
- for (i = 0; i < 2; i++) {
- next[i] = lexGetc();
- if (next[i] >= '0' && next[i] <= '9')
- c = c * 16 + next[i] - '0';
- else if (next[i] >= 'A' && next[i] <= 'F')
- c = c * 16 + next[i] - 'A' + 10;
- else
- break;
- }
- if (i == 0) {
- /* single '=' follow by LINESEP is continuation sign? */
- if (next[0] == '\n') {
- ++mime_lineNum;
- }
- else {
- lexPushLookaheadc('=');
- goto EndString;
- }
- }
- else if (i == 1) {
- lexPushLookaheadc(next[1]);
- lexPushLookaheadc(next[0]);
- lexAppendc('=');
- } else {
- lexAppendc(c);
- }
- break;
- } /* '=' */
- case '\n': {
- lexPushLookaheadc('\n');
- goto EndString;
- }
- case (char)EOF:
- break;
- default:
- lexAppendc(cur);
- break;
- } /* switch */
- } while (cur != (char)EOF);
-
-EndString:
- lexAppendc(0);
- return lexStr();
- } /* LexQuotedPrintable */
-
-int yylex() {
-
- int lexmode = LEXMODE();
- if (lexmode == L_VALUES) {
- int c = lexGetc();
- if (c == ';') {
- DBG_(("db: SEMICOLON\n"));
- lexPushLookaheadc(c);
-#ifdef _SUPPORT_LINE_FOLDING
- handleMoreRFC822LineBreak(c);
-#endif
- lexSkipLookahead();
- return SEMICOLON;
- }
- else if (strchr("\n",c)) {
- ++mime_lineNum;
- /* consume all line separator(s) adjacent to each other */
- c = lexLookahead();
- while (strchr("\n",c)) {
- lexSkipLookahead();
- c = lexLookahead();
- ++mime_lineNum;
- }
- DBG_(("db: LINESEP\n"));
- return LINESEP;
- }
- else {
- char *p = 0;
- lexPushLookaheadc(c);
- if (lexWithinMode(L_BASE64)) {
- /* get each char and convert to bin on the fly... */
- p = lexGetDataFromBase64();
- yylval.str = p;
- return STRING;
- }
- else if (lexWithinMode(L_QUOTED_PRINTABLE)) {
- p = lexGetQuotedPrintable();
- }
- else {
-#ifdef _SUPPORT_LINE_FOLDING
- p = lexGet1Value();
-#else
- p = lexGetStrUntil(";\n");
-#endif
- }
- if (p) {
- DBG_(("db: STRING: '%s'\n", p));
- yylval.str = p;
- return STRING;
- }
- else return 0;
- }
- }
- else {
- /* normal mode */
- while (1) {
- int c = lexGetc();
- switch(c) {
- case ':': {
- /* consume all line separator(s) adjacent to each other */
- /* ignoring linesep immediately after colon. */
-/* c = lexLookahead();
- while (strchr("\n",c)) {
- lexSkipLookahead();
- c = lexLookahead();
- ++mime_lineNum;
- }*/
- DBG_(("db: COLON\n"));
- return COLON;
- }
- case ';':
- DBG_(("db: SEMICOLON\n"));
- return SEMICOLON;
- case '=':
- DBG_(("db: EQ\n"));
- return EQ;
- /* ignore whitespace in this mode */
- case '\t':
- case ' ': continue;
- case '\n': {
- ++mime_lineNum;
- continue;
- }
- case EOF: return 0;
- break;
- default: {
- lexPushLookaheadc(c);
- if (isalpha(c)) {
- char *t = lexGetWord();
- yylval.str = t;
- if (!stricmp(t, "begin")) {
- return match_begin_end_name(0);
- }
- else if (!stricmp(t,"end")) {
- return match_begin_end_name(1);
- }
- else {
- DBG_(("db: ID '%s'\n", t));
- return ID;
- }
- }
- else {
- /* unknow token */
- return 0;
- }
- break;
- }
- }
- }
- }
- return 0;
- }
-
-
-/***************************************************************************/
-/*** Public Functions ****/
-/***************************************************************************/
-
-static VObject* Parse_MIMEHelper()
- {
- ObjStackTop = -1;
- mime_numErrors = 0;
- mime_lineNum = 1;
- vObjList = 0;
- curObj = 0;
-
- if (yyparse() != 0)
- return 0;
-
- finiLex();
- return vObjList;
- }
-
-DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len)
- {
- initLex(input, len, 0);
- return Parse_MIMEHelper();
- }
-
-
-#if INCLUDEMFC
-
-DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file)
- {
- unsigned long startPos;
- VObject *result;
-
- initLex(0,-1,file);
- startPos = file->GetPosition();
- if (!(result = Parse_MIMEHelper()))
- file->Seek(startPos, CFile::begin);
- return result;
- }
-
-#else
-
-VObject* Parse_MIME_FromFile(FILE *file)
- {
- VObject *result;
- long startPos;
-
- initLex(0,(unsigned long)-1,file);
- startPos = ftell(file);
- if (!(result = Parse_MIMEHelper())) {
- fseek(file,startPos,SEEK_SET);
- }
- return result;
- }
-
-DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname)
- {
- FILE *fp = fopen(fname,"r");
- if (fp) {
- VObject* o = Parse_MIME_FromFile(fp);
- fclose(fp);
- return o;
- }
- else {
- char msg[256];
- snprintf(msg, sizeof(msg), "can't open file '%s' for reading\n", fname);
- mime_error_(msg);
- return 0;
- }
- }
-
-#endif
-
-
-static MimeErrorHandler mimeErrorHandler;
-
-DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me)
- {
- mimeErrorHandler = me;
- }
-
-static void mime_error(char *s)
- {
- char msg[256];
- if (mimeErrorHandler) {
- sprintf(msg,"%s at line %d", s, mime_lineNum);
- mimeErrorHandler(msg);
- }
- }
-
-static void mime_error_(char *s)
- {
- if (mimeErrorHandler) {
- mimeErrorHandler(s);
- }
- }
-
diff --git a/libical/src/libicalvcal/vctest.c b/libical/src/libicalvcal/vctest.c
deleted file mode 100644
index 7975d1e200..0000000000
--- a/libical/src/libicalvcal/vctest.c
+++ /dev/null
@@ -1,95 +0,0 @@
-
-#include <stdio.h>
-#include <string.h>
-#include "vcc.h"
-
-FILE *cfp;
-
-void myMimeErrorHandler(char *s)
-{
- printf("%s\n", s);
-}
-
-void main(int argc, char **argv)
-{
- int testmem = 0;
-
- char * foo[2] = {"foo","alden.vcf"};
-
-argc = 2;
-argv = foo;
-
-#ifdef _CONSOLE
- cfp = stdout;
- registerMimeErrorHandler(myMimeErrorHandler);
-#else
- cfp = fopen("vctest.out", "w");
- if (!cfp) return;
-#endif
- ++argv;
- while (--argc) {
- FILE *fp;
- if (strcmp(*argv,"-testmem") == 0) {
- testmem = 1;
- argv++;
- continue;
- }
- fprintf(cfp,"processing %s\n",*argv);
- fp = fopen(*argv,"r");
- if (!fp) {
- fprintf(cfp,"error opening file\n");
- }
- else {
- VObject *v, *t;
- FILE *ofp;
- char buf[256];
- char *p;
- strcpy(buf,*argv);
- p = strchr(buf,'.');
- if (p) *p = 0;
- strcat(buf,".out");
- fprintf(cfp,"reading text input from '%s'...\n", *argv);
- /*v = Parse_MIME_FromFile(fp); */
- v = Parse_MIME_FromFileName(*argv);
- writeVObjectToFile(buf,v);
- cleanVObject(v);
-
- /*
- fprintf(cfp,"pretty print internal format of '%s'...\n", *argv);
- ofp = fopen(buf,"w");
- while (v) {
- printVObject(cfp,v);
- if (testmem) {
- char *s, *p;
- fprintf(cfp,"test writing to mem...\n");
- p = s = writeMemVObject(0,0,v);
- if (s) {
- while (*s) {
- fputc(*s,ofp);
- s++;
- }
- free(p);
- }
- }
- else {
- writeVObject(ofp,v);
- }
- t = v;
- v = nextVObjectInList(v);
- cleanVObject(t);
- }
-
- fclose(ofp);
- fclose(fp);
- */
- }
-
- cleanStrTbl();
- argv++;
-
- }
-
- if (cfp != stdout) fclose(cfp);
-
-}
-
diff --git a/libical/src/libicalvcal/vobject.c b/libical/src/libicalvcal/vobject.c
deleted file mode 100644
index 616581ffa8..0000000000
--- a/libical/src/libicalvcal/vobject.c
+++ /dev/null
@@ -1,1455 +0,0 @@
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-/*
- * src: vobject.c
- * doc: vobject and APIs to construct vobject, APIs pretty print
- * vobject, and convert a vobject into its textual representation.
- */
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-#include "vobject.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-
-
-#define NAME_OF(o) o->id
-#define VALUE_TYPE(o) o->valType
-#define STRINGZ_VALUE_OF(o) o->val.strs
-#define USTRINGZ_VALUE_OF(o) o->val.ustrs
-#define INTEGER_VALUE_OF(o) o->val.i
-#define LONG_VALUE_OF(o) o->val.l
-#define ANY_VALUE_OF(o) o->val.any
-#define VOBJECT_VALUE_OF(o) o->val.vobj
-
-typedef union ValueItem {
- const char *strs;
- const wchar_t *ustrs;
- unsigned int i;
- unsigned long l;
- void *any;
- VObject *vobj;
- } ValueItem;
-
-struct VObject {
- VObject *next;
- const char *id;
- VObject *prop;
- unsigned short valType;
- ValueItem val;
- };
-
-typedef struct StrItem StrItem;
-
-struct StrItem {
- StrItem *next;
- const char *s;
- unsigned int refCnt;
- };
-
-const char** fieldedProp;
-
-
-
-/*----------------------------------------------------------------------
- The following functions involve with memory allocation:
- newVObject
- deleteVObject
- dupStr
- deleteStr
- newStrItem
- deleteStrItem
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(VObject*) newVObject_(const char *id)
-{
- VObject *p = (VObject*)malloc(sizeof(VObject));
- p->next = 0;
- p->id = id;
- p->prop = 0;
- VALUE_TYPE(p) = 0;
- ANY_VALUE_OF(p) = 0;
- return p;
-}
-
-DLLEXPORT(VObject*) newVObject(const char *id)
-{
- return newVObject_(lookupStr(id));
-}
-
-DLLEXPORT(void) deleteVObject(VObject *p)
-{
- unUseStr(p->id);
- free(p);
-}
-
-DLLEXPORT(char*) dupStr(const char *s, unsigned int size)
-{
- char *t;
- if (size == 0) {
- size = strlen(s);
- }
- t = (char*)malloc(size+1);
- if (t) {
- memcpy(t,s,size);
- t[size] = 0;
- return t;
- }
- else {
- return (char*)0;
- }
-}
-
-DLLEXPORT(void) deleteStr(const char *p)
-{
- if (p) free((void*)p);
-}
-
-
-static StrItem* newStrItem(const char *s, StrItem *next)
-{
- StrItem *p = (StrItem*)malloc(sizeof(StrItem));
- p->next = next;
- p->s = s;
- p->refCnt = 1;
- return p;
-}
-
-static void deleteStrItem(StrItem *p)
-{
- free((void*)p);
-}
-
-
-/*----------------------------------------------------------------------
- The following function provide accesses to VObject's value.
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(const char*) vObjectName(VObject *o)
-{
- return NAME_OF(o);
-}
-
-DLLEXPORT(void) setVObjectName(VObject *o, const char* id)
-{
- NAME_OF(o) = id;
-}
-
-DLLEXPORT(const char*) vObjectStringZValue(VObject *o)
-{
- return STRINGZ_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s)
-{
- STRINGZ_VALUE_OF(o) = dupStr(s,0);
- VALUE_TYPE(o) = VCVT_STRINGZ;
-}
-
-DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s)
-{
- STRINGZ_VALUE_OF(o) = s;
- VALUE_TYPE(o) = VCVT_STRINGZ;
-}
-
-DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o)
-{
- return USTRINGZ_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s)
-{
- USTRINGZ_VALUE_OF(o) = (wchar_t*) dupStr((char*)s,(uStrLen(s)+1)*2);
- VALUE_TYPE(o) = VCVT_USTRINGZ;
-}
-
-DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s)
-{
- USTRINGZ_VALUE_OF(o) = s;
- VALUE_TYPE(o) = VCVT_USTRINGZ;
-}
-
-DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o)
-{
- return INTEGER_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i)
-{
- INTEGER_VALUE_OF(o) = i;
- VALUE_TYPE(o) = VCVT_UINT;
-}
-
-DLLEXPORT(unsigned long) vObjectLongValue(VObject *o)
-{
- return LONG_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l)
-{
- LONG_VALUE_OF(o) = l;
- VALUE_TYPE(o) = VCVT_ULONG;
-}
-
-DLLEXPORT(void*) vObjectAnyValue(VObject *o)
-{
- return ANY_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t)
-{
- ANY_VALUE_OF(o) = t;
- VALUE_TYPE(o) = VCVT_RAW;
-}
-
-DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o)
-{
- return VOBJECT_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p)
-{
- VOBJECT_VALUE_OF(o) = p;
- VALUE_TYPE(o) = VCVT_VOBJECT;
-}
-
-DLLEXPORT(int) vObjectValueType(VObject *o)
-{
- return VALUE_TYPE(o);
-}
-
-
-/*----------------------------------------------------------------------
- The following functions can be used to build VObject.
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p)
-{
- /* circular link list pointed to tail */
- /*
- o {next,id,prop,val}
- V
- pn {next,id,prop,val}
- V
- ...
- p1 {next,id,prop,val}
- V
- pn
- -->
- o {next,id,prop,val}
- V
- pn {next,id,prop,val}
- V
- p {next,id,prop,val}
- ...
- p1 {next,id,prop,val}
- V
- pn
- */
-
- VObject *tail = o->prop;
- if (tail) {
- p->next = tail->next;
- o->prop = tail->next = p;
- }
- else {
- o->prop = p->next = p;
- }
- return p;
-}
-
-DLLEXPORT(VObject*) addProp(VObject *o, const char *id)
-{
- return addVObjectProp(o,newVObject(id));
-}
-
-DLLEXPORT(VObject*) addProp_(VObject *o, const char *id)
-{
- return addVObjectProp(o,newVObject_(id));
-}
-
-DLLEXPORT(void) addList(VObject **o, VObject *p)
-{
- p->next = 0;
- if (*o == 0) {
- *o = p;
- }
- else {
- VObject *t = *o;
- while (t->next) {
- t = t->next;
- }
- t->next = p;
- }
-}
-
-DLLEXPORT(VObject*) nextVObjectInList(VObject *o)
-{
- return o->next;
-}
-
-DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size)
-{
- VObject *sizeProp;
- setVObjectAnyValue(prop, val);
- sizeProp = addProp(prop,VCDataSizeProp);
- setVObjectLongValue(sizeProp, size);
- return prop;
-}
-
-DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size)
-{
- void *p = dupStr((const char *)val,size);
- return setValueWithSize_(prop,p,p?size:0);
-}
-
-DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o)
-{
- i->start = o->prop;
- i->next = 0;
-}
-
-DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o)
-{
- i->start = o->next;
- i->next = 0;
-}
-
-DLLEXPORT(int) moreIteration(VObjectIterator *i)
-{
- return (i->start && (i->next==0 || i->next!=i->start));
-}
-
-DLLEXPORT(VObject*) nextVObject(VObjectIterator *i)
-{
- if (i->start && i->next != i->start) {
- if (i->next == 0) {
- i->next = i->start->next;
- return i->next;
- }
- else {
- i->next = i->next->next;
- return i->next;
- }
- }
- else return (VObject*)0;
-}
-
-DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id)
-{
- VObjectIterator i;
- initPropIterator(&i,o);
- while (moreIteration(&i)) {
- VObject *each = nextVObject(&i);
- if (!stricmp(id,each->id))
- return each;
- }
- return (VObject*)0;
-}
-
-DLLEXPORT(VObject*) addGroup(VObject *o, const char *g)
-{
- /*
- a.b.c
- -->
- prop(c)
- prop(VCGrouping=b)
- prop(VCGrouping=a)
- */
- char *dot = strrchr(g,'.');
- if (dot) {
- VObject *p, *t;
- char *gs, *n = dot+1;
- gs = dupStr(g,0); /* so we can write to it. */
- /* used to be
- * t = p = addProp_(o,lookupProp_(n));
- */
- t = p = addProp_(o,lookupProp(n));
- dot = strrchr(gs,'.');
- *dot = 0;
- do {
- dot = strrchr(gs,'.');
- if (dot) {
- n = dot+1;
- *dot=0;
- }
- else
- n = gs;
- /* property(VCGroupingProp=n);
- * and the value may have VCGrouping property
- */
- t = addProp(t,VCGroupingProp);
- setVObjectStringZValue(t,lookupProp_(n));
- } while (n != gs);
- deleteStr(gs);
- return p;
- }
- else
- return addProp_(o,lookupProp(g));
-}
-
-DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v)
-{
- VObject *prop;
- prop = addProp(o,p);
- setVObjectUStringZValue_(prop, fakeUnicode(v,0));
- return prop;
-}
-
-DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v,
- unsigned int size)
-{
- VObject *prop;
- prop = addProp(o,p);
- setValueWithSize_(prop, (void*)v, size);
- return prop;
-}
-
-DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v,
- unsigned int size)
-{
- return addPropSizedValue_(o,p,dupStr(v,size),size);
-}
-
-
-
-/*----------------------------------------------------------------------
- The following pretty print a VObject
- ----------------------------------------------------------------------*/
-
-static void printVObject_(FILE *fp, VObject *o, int level);
-
-static void indent(FILE *fp, int level)
-{
- int i;
- for (i=0;i<level*4;i++) {
- fputc(' ', fp);
- }
-}
-
-static void printValue(FILE *fp, VObject *o, int level)
-{
- switch (VALUE_TYPE(o)) {
- case VCVT_USTRINGZ: {
- char c;
- char *t,*s;
- s = t = fakeCString(USTRINGZ_VALUE_OF(o));
- fputc('"',fp);
- while (c=*t,c) {
- fputc(c,fp);
- if (c == '\n') indent(fp,level+2);
- t++;
- }
- fputc('"',fp);
- deleteStr(s);
- break;
- }
- case VCVT_STRINGZ: {
- char c;
- const char *s = STRINGZ_VALUE_OF(o);
- fputc('"',fp);
- while (c=*s,c) {
- fputc(c,fp);
- if (c == '\n') indent(fp,level+2);
- s++;
- }
- fputc('"',fp);
- break;
- }
- case VCVT_UINT:
- fprintf(fp,"%d", INTEGER_VALUE_OF(o)); break;
- case VCVT_ULONG:
- fprintf(fp,"%ld", LONG_VALUE_OF(o)); break;
- case VCVT_RAW:
- fprintf(fp,"[raw data]"); break;
- case VCVT_VOBJECT:
- fprintf(fp,"[vobject]\n");
- printVObject_(fp,VOBJECT_VALUE_OF(o),level+1);
- break;
- case 0:
- fprintf(fp,"[none]"); break;
- default:
- fprintf(fp,"[unknown]"); break;
- }
-}
-
-static void printNameValue(FILE *fp,VObject *o, int level)
-{
- indent(fp,level);
- if (NAME_OF(o)) {
- fprintf(fp,"%s", NAME_OF(o));
- }
- if (VALUE_TYPE(o)) {
- fputc('=',fp);
- printValue(fp,o, level);
- }
- fprintf(fp,"\n");
-}
-
-static void printVObject_(FILE *fp, VObject *o, int level)
- {
- VObjectIterator t;
- if (o == 0) {
- fprintf(fp,"[NULL]\n");
- return;
- }
- printNameValue(fp,o,level);
- initPropIterator(&t,o);
- while (moreIteration(&t)) {
- VObject *eachProp = nextVObject(&t);
- printVObject_(fp,eachProp,level+1);
- }
- }
-
-void printVObject(FILE *fp,VObject *o)
-{
- printVObject_(fp,o,0);
-}
-
-DLLEXPORT(void) printVObjectToFile(char *fname,VObject *o)
-{
- FILE *fp = fopen(fname,"w");
- if (fp) {
- printVObject(fp,o);
- fclose(fp);
- }
-}
-
-DLLEXPORT(void) printVObjectsToFile(char *fname,VObject *list)
-{
- FILE *fp = fopen(fname,"w");
- if (fp) {
- while (list) {
- printVObject(fp,list);
- list = nextVObjectInList(list);
- }
- fclose(fp);
- }
-}
-
-DLLEXPORT(void) cleanVObject(VObject *o)
-{
- if (o == 0) return;
- if (o->prop) {
- /* destroy time: cannot use the iterator here.
- Have to break the cycle in the circular link
- list and turns it into regular NULL-terminated
- list -- since at some point of destruction,
- the reference entry for the iterator to work
- will not longer be valid.
- */
- VObject *p;
- p = o->prop->next;
- o->prop->next = 0;
- do {
- VObject *t = p->next;
- cleanVObject(p);
- p = t;
- } while (p);
- }
- switch (VALUE_TYPE(o)) {
- case VCVT_USTRINGZ:
- case VCVT_STRINGZ:
- case VCVT_RAW:
- /* assume they are all allocated by malloc. */
- free((char*)STRINGZ_VALUE_OF(o));
- break;
- case VCVT_VOBJECT:
- cleanVObject(VOBJECT_VALUE_OF(o));
- break;
- }
- deleteVObject(o);
-}
-
-DLLEXPORT(void) cleanVObjects(VObject *list)
-{
- while (list) {
- VObject *t = list;
- list = nextVObjectInList(list);
- cleanVObject(t);
- }
-}
-
-/*----------------------------------------------------------------------
- The following is a String Table Facilities.
- ----------------------------------------------------------------------*/
-
-#define STRTBLSIZE 255
-
-static StrItem *strTbl[STRTBLSIZE];
-
-static unsigned int hashStr(const char *s)
-{
- unsigned int h = 0;
- int i;
- for (i=0;s[i];i++) {
- h += s[i]*i;
- }
- return h % STRTBLSIZE;
-}
-
-DLLEXPORT(const char*) lookupStr(const char *s)
-{
- StrItem *t;
- unsigned int h = hashStr(s);
- if ((t = strTbl[h]) != 0) {
- do {
- if (stricmp(t->s,s) == 0) {
- t->refCnt++;
- return t->s;
- }
- t = t->next;
- } while (t);
- }
- s = dupStr(s,0);
- strTbl[h] = newStrItem(s,strTbl[h]);
- return s;
-}
-
-DLLEXPORT(void) unUseStr(const char *s)
-{
- StrItem *t, *p;
- unsigned int h = hashStr(s);
- if ((t = strTbl[h]) != 0) {
- p = t;
- do {
- if (stricmp(t->s,s) == 0) {
- t->refCnt--;
- if (t->refCnt == 0) {
- if (p == strTbl[h]) {
- strTbl[h] = t->next;
- }
- else {
- p->next = t->next;
- }
- deleteStr(t->s);
- deleteStrItem(t);
- return;
- }
- }
- p = t;
- t = t->next;
- } while (t);
- }
-}
-
-DLLEXPORT(void) cleanStrTbl()
-{
- int i;
- for (i=0; i<STRTBLSIZE;i++) {
- StrItem *t = strTbl[i];
- while (t) {
- StrItem *p;
- deleteStr(t->s);
- p = t;
- t = t->next;
- deleteStrItem(p);
- } while (t);
- strTbl[i] = 0;
- }
-}
-
-
-struct PreDefProp {
- const char *name;
- const char *alias;
- const char** fields;
- unsigned int flags;
- };
-
-/* flags in PreDefProp */
-#define PD_BEGIN 0x1
-#define PD_INTERNAL 0x2
-
-static const char *adrFields[] = {
- VCPostalBoxProp,
- VCExtAddressProp,
- VCStreetAddressProp,
- VCCityProp,
- VCRegionProp,
- VCPostalCodeProp,
- VCCountryNameProp,
- 0
-};
-
-static const char *nameFields[] = {
- VCFamilyNameProp,
- VCGivenNameProp,
- VCAdditionalNamesProp,
- VCNamePrefixesProp,
- VCNameSuffixesProp,
- NULL
- };
-
-static const char *orgFields[] = {
- VCOrgNameProp,
- VCOrgUnitProp,
- VCOrgUnit2Prop,
- VCOrgUnit3Prop,
- VCOrgUnit4Prop,
- NULL
- };
-
-static const char *AAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCAudioContentProp,
- 0
- };
-
-/* ExDate -- has unamed fields */
-/* RDate -- has unamed fields */
-
-static const char *DAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCDisplayStringProp,
- 0
- };
-
-static const char *MAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCEmailAddressProp,
- VCNoteProp,
- 0
- };
-
-static const char *PAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCProcedureNameProp,
- 0
- };
-
-static struct PreDefProp propNames[] = {
- { VC7bitProp, 0, 0, 0 },
- { VC8bitProp, 0, 0, 0 },
- { VCAAlarmProp, 0, AAlarmFields, 0 },
- { VCAdditionalNamesProp, 0, 0, 0 },
- { VCAdrProp, 0, adrFields, 0 },
- { VCAgentProp, 0, 0, 0 },
- { VCAIFFProp, 0, 0, 0 },
- { VCAOLProp, 0, 0, 0 },
- { VCAppleLinkProp, 0, 0, 0 },
- { VCAttachProp, 0, 0, 0 },
- { VCAttendeeProp, 0, 0, 0 },
- { VCATTMailProp, 0, 0, 0 },
- { VCAudioContentProp, 0, 0, 0 },
- { VCAVIProp, 0, 0, 0 },
- { VCBase64Prop, 0, 0, 0 },
- { VCBBSProp, 0, 0, 0 },
- { VCBirthDateProp, 0, 0, 0 },
- { VCBMPProp, 0, 0, 0 },
- { VCBodyProp, 0, 0, 0 },
- { VCBusinessRoleProp, 0, 0, 0 },
- { VCCalProp, 0, 0, PD_BEGIN },
- { VCCaptionProp, 0, 0, 0 },
- { VCCardProp, 0, 0, PD_BEGIN },
- { VCCarProp, 0, 0, 0 },
- { VCCategoriesProp, 0, 0, 0 },
- { VCCellularProp, 0, 0, 0 },
- { VCCGMProp, 0, 0, 0 },
- { VCCharSetProp, 0, 0, 0 },
- { VCCIDProp, VCContentIDProp, 0, 0 },
- { VCCISProp, 0, 0, 0 },
- { VCCityProp, 0, 0, 0 },
- { VCClassProp, 0, 0, 0 },
- { VCCommentProp, 0, 0, 0 },
- { VCCompletedProp, 0, 0, 0 },
- { VCContentIDProp, 0, 0, 0 },
- { VCCountryNameProp, 0, 0, 0 },
- { VCDAlarmProp, 0, DAlarmFields, 0 },
- { VCDataSizeProp, 0, 0, PD_INTERNAL },
- { VCDayLightProp, 0, 0, 0 },
- { VCDCreatedProp, 0, 0, 0 },
- { VCDeliveryLabelProp, 0, 0, 0 },
- { VCDescriptionProp, 0, 0, 0 },
- { VCDIBProp, 0, 0, 0 },
- { VCDisplayStringProp, 0, 0, 0 },
- { VCDomesticProp, 0, 0, 0 },
- { VCDTendProp, 0, 0, 0 },
- { VCDTstartProp, 0, 0, 0 },
- { VCDueProp, 0, 0, 0 },
- { VCEmailAddressProp, 0, 0, 0 },
- { VCEncodingProp, 0, 0, 0 },
- { VCEndProp, 0, 0, 0 },
- { VCEventProp, 0, 0, PD_BEGIN },
- { VCEWorldProp, 0, 0, 0 },
- { VCExNumProp, 0, 0, 0 },
- { VCExpDateProp, 0, 0, 0 },
- { VCExpectProp, 0, 0, 0 },
- { VCExtAddressProp, 0, 0, 0 },
- { VCFamilyNameProp, 0, 0, 0 },
- { VCFaxProp, 0, 0, 0 },
- { VCFullNameProp, 0, 0, 0 },
- { VCGeoLocationProp, 0, 0, 0 },
- { VCGeoProp, 0, 0, 0 },
- { VCGIFProp, 0, 0, 0 },
- { VCGivenNameProp, 0, 0, 0 },
- { VCGroupingProp, 0, 0, 0 },
- { VCHomeProp, 0, 0, 0 },
- { VCIBMMailProp, 0, 0, 0 },
- { VCInlineProp, 0, 0, 0 },
- { VCInternationalProp, 0, 0, 0 },
- { VCInternetProp, 0, 0, 0 },
- { VCISDNProp, 0, 0, 0 },
- { VCJPEGProp, 0, 0, 0 },
- { VCLanguageProp, 0, 0, 0 },
- { VCLastModifiedProp, 0, 0, 0 },
- { VCLastRevisedProp, 0, 0, 0 },
- { VCLocationProp, 0, 0, 0 },
- { VCLogoProp, 0, 0, 0 },
- { VCMailerProp, 0, 0, 0 },
- { VCMAlarmProp, 0, MAlarmFields, 0 },
- { VCMCIMailProp, 0, 0, 0 },
- { VCMessageProp, 0, 0, 0 },
- { VCMETProp, 0, 0, 0 },
- { VCModemProp, 0, 0, 0 },
- { VCMPEG2Prop, 0, 0, 0 },
- { VCMPEGProp, 0, 0, 0 },
- { VCMSNProp, 0, 0, 0 },
- { VCNamePrefixesProp, 0, 0, 0 },
- { VCNameProp, 0, nameFields, 0 },
- { VCNameSuffixesProp, 0, 0, 0 },
- { VCNoteProp, 0, 0, 0 },
- { VCOrgNameProp, 0, 0, 0 },
- { VCOrgProp, 0, orgFields, 0 },
- { VCOrgUnit2Prop, 0, 0, 0 },
- { VCOrgUnit3Prop, 0, 0, 0 },
- { VCOrgUnit4Prop, 0, 0, 0 },
- { VCOrgUnitProp, 0, 0, 0 },
- { VCPagerProp, 0, 0, 0 },
- { VCPAlarmProp, 0, PAlarmFields, 0 },
- { VCParcelProp, 0, 0, 0 },
- { VCPartProp, 0, 0, 0 },
- { VCPCMProp, 0, 0, 0 },
- { VCPDFProp, 0, 0, 0 },
- { VCPGPProp, 0, 0, 0 },
- { VCPhotoProp, 0, 0, 0 },
- { VCPICTProp, 0, 0, 0 },
- { VCPMBProp, 0, 0, 0 },
- { VCPostalBoxProp, 0, 0, 0 },
- { VCPostalCodeProp, 0, 0, 0 },
- { VCPostalProp, 0, 0, 0 },
- { VCPowerShareProp, 0, 0, 0 },
- { VCPreferredProp, 0, 0, 0 },
- { VCPriorityProp, 0, 0, 0 },
- { VCProcedureNameProp, 0, 0, 0 },
- { VCProdIdProp, 0, 0, 0 },
- { VCProdigyProp, 0, 0, 0 },
- { VCPronunciationProp, 0, 0, 0 },
- { VCPSProp, 0, 0, 0 },
- { VCPublicKeyProp, 0, 0, 0 },
- { VCQPProp, VCQuotedPrintableProp, 0, 0 },
- { VCQuickTimeProp, 0, 0, 0 },
- { VCQuotedPrintableProp, 0, 0, 0 },
- { VCRDateProp, 0, 0, 0 },
- { VCRegionProp, 0, 0, 0 },
- { VCRelatedToProp, 0, 0, 0 },
- { VCRepeatCountProp, 0, 0, 0 },
- { VCResourcesProp, 0, 0, 0 },
- { VCRNumProp, 0, 0, 0 },
- { VCRoleProp, 0, 0, 0 },
- { VCRRuleProp, 0, 0, 0 },
- { VCRSVPProp, 0, 0, 0 },
- { VCRunTimeProp, 0, 0, 0 },
- { VCSequenceProp, 0, 0, 0 },
- { VCSnoozeTimeProp, 0, 0, 0 },
- { VCStartProp, 0, 0, 0 },
- { VCStatusProp, 0, 0, 0 },
- { VCStreetAddressProp, 0, 0, 0 },
- { VCSubTypeProp, 0, 0, 0 },
- { VCSummaryProp, 0, 0, 0 },
- { VCTelephoneProp, 0, 0, 0 },
- { VCTIFFProp, 0, 0, 0 },
- { VCTimeZoneProp, 0, 0, 0 },
- { VCTitleProp, 0, 0, 0 },
- { VCTLXProp, 0, 0, 0 },
- { VCTodoProp, 0, 0, PD_BEGIN },
- { VCTranspProp, 0, 0, 0 },
- { VCUniqueStringProp, 0, 0, 0 },
- { VCURLProp, 0, 0, 0 },
- { VCURLValueProp, 0, 0, 0 },
- { VCValueProp, 0, 0, 0 },
- { VCVersionProp, 0, 0, 0 },
- { VCVideoProp, 0, 0, 0 },
- { VCVoiceProp, 0, 0, 0 },
- { VCWAVEProp, 0, 0, 0 },
- { VCWMFProp, 0, 0, 0 },
- { VCWorkProp, 0, 0, 0 },
- { VCX400Prop, 0, 0, 0 },
- { VCX509Prop, 0, 0, 0 },
- { VCXRuleProp, 0, 0, 0 },
- { 0,0,0,0 }
- };
-
-
-static struct PreDefProp* lookupPropInfo(const char* str)
-{
- /* brute force for now, could use a hash table here. */
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (stricmp(str, propNames[i].name) == 0) {
- return &propNames[i];
- }
-
- return 0;
-}
-
-
-DLLEXPORT(const char*) lookupProp_(const char* str)
-{
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (stricmp(str, propNames[i].name) == 0) {
- const char* s;
- s = propNames[i].alias?propNames[i].alias:propNames[i].name;
- return lookupStr(s);
- }
- return lookupStr(str);
-}
-
-
-DLLEXPORT(const char*) lookupProp(const char* str)
-{
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (stricmp(str, propNames[i].name) == 0) {
- const char *s;
- fieldedProp = propNames[i].fields;
- s = propNames[i].alias?propNames[i].alias:propNames[i].name;
- return lookupStr(s);
- }
- fieldedProp = 0;
- return lookupStr(str);
-}
-
-
-/*----------------------------------------------------------------------
- APIs to Output text form.
- ----------------------------------------------------------------------*/
-#define OFILE_REALLOC_SIZE 256
-typedef struct OFile {
- FILE *fp;
- char *s;
- int len;
- int limit;
- int alloc:1;
- int fail:1;
- } OFile;
-
-#if 0
-static void appendsOFile(OFile *fp, const char *s)
-{
- int slen;
- if (fp->fail) return;
- slen = strlen(s);
- if (fp->fp) {
- fwrite(s,1,slen,fp->fp);
- }
- else {
-stuff:
- if (fp->len + slen < fp->limit) {
- memcpy(fp->s+fp->len,s,slen);
- fp->len += slen;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen;
- fp->s = (char *) realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-
-static void appendcOFile(OFile *fp, char c)
-{
- if (fp->fail) return;
- if (fp->fp) {
- fputc(c,fp->fp);
- }
- else {
-stuff:
- if (fp->len+1 < fp->limit) {
- fp->s[fp->len] = c;
- fp->len++;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- fp->s = (char *) realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-#else
-static void appendcOFile_(OFile *fp, char c)
-{
- if (fp->fail) return;
- if (fp->fp) {
- fputc(c,fp->fp);
- }
- else {
-stuff:
- if (fp->len+1 < fp->limit) {
- fp->s[fp->len] = c;
- fp->len++;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- fp->s = realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-
-static void appendcOFile(OFile *fp, char c)
-{
- if (c == '\n') {
- /* write out as <CR><LF> */
- appendcOFile_(fp,0xd);
- appendcOFile_(fp,0xa);
- }
- else
- appendcOFile_(fp,c);
-}
-
-static void appendsOFile(OFile *fp, const char *s)
-{
- int i, slen;
- slen = strlen(s);
- for (i=0; i<slen; i++) {
- appendcOFile(fp,s[i]);
- }
-}
-
-#endif
-
-static void initOFile(OFile *fp, FILE *ofp)
-{
- fp->fp = ofp;
- fp->s = 0;
- fp->len = 0;
- fp->limit = 0;
- fp->alloc = 0;
- fp->fail = 0;
-}
-
-static void initMemOFile(OFile *fp, char *s, int len)
-{
- fp->fp = 0;
- fp->s = s;
- fp->len = 0;
- fp->limit = s?len:0;
- fp->alloc = s?0:1;
- fp->fail = 0;
-}
-
-
-static int writeBase64(OFile *fp, unsigned char *s, long len)
-{
- long cur = 0;
- int i, numQuads = 0;
- unsigned long trip;
- unsigned char b;
- char quad[5];
-#define MAXQUADS 16
-
- quad[4] = 0;
-
- while (cur < len) {
- /* collect the triplet of bytes into 'trip' */
- trip = 0;
- for (i = 0; i < 3; i++) {
- b = (cur < len) ? *(s + cur) : 0;
- cur++;
- trip = trip << 8 | b;
- }
- /* fill in 'quad' with the appropriate four characters */
- for (i = 3; i >= 0; i--) {
- b = (unsigned char)(trip & 0x3F);
- trip = trip >> 6;
- if ((3 - i) < (cur - len))
- quad[i] = '='; /* pad char */
- else if (b < 26) quad[i] = (char)b + 'A';
- else if (b < 52) quad[i] = (char)(b - 26) + 'a';
- else if (b < 62) quad[i] = (char)(b - 52) + '0';
- else if (b == 62) quad[i] = '+';
- else quad[i] = '/';
- }
- /* now output 'quad' with appropriate whitespace and line ending */
- appendsOFile(fp, (numQuads == 0 ? " " : ""));
- appendsOFile(fp, quad);
- appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : "")));
- numQuads = (numQuads + 1) % MAXQUADS;
- }
- appendcOFile(fp,'\n');
-
- return 1;
-}
-
-static void writeString(OFile *fp, const char *s)
-{
- appendsOFile(fp,s);
-}
-
-static void writeQPString(OFile *fp, const char *s)
-{
- char buf[4];
- int count=0;
- const char *p = s;
-
- while (*p) {
- /* break up lines biggger than 75 chars */
- if(count >=74){
- count=0;
- appendsOFile(fp,"=\n");
- }
-
- /* escape any non ASCII characters and '=' as per rfc1521 */
- if (*p<= 0x1f || *p >=0x7f || *p == '=' ) {
- sprintf(buf,"=%02X",(unsigned char)*p);
- appendsOFile(fp,buf);
- count+=3;
- } else {
- appendcOFile(fp,*p);
- count++;
- }
- p++;
- }
-}
-
-
-
-static void writeVObject_(OFile *fp, VObject *o);
-
-static void writeValue(OFile *fp, VObject *o, unsigned long size,int quote)
-{
- if (o == 0) return;
- switch (VALUE_TYPE(o)) {
- case VCVT_USTRINGZ: {
- char *s = fakeCString(USTRINGZ_VALUE_OF(o));
- if(quote) writeQPString(fp, s);
- else writeString(fp,s);
- deleteStr(s);
- break;
- }
- case VCVT_STRINGZ: {
- if(quote) writeQPString(fp, STRINGZ_VALUE_OF(o));
- else writeString(fp,STRINGZ_VALUE_OF(o));
- break;
- }
- case VCVT_UINT: {
- char buf[16];
- sprintf(buf,"%u", INTEGER_VALUE_OF(o));
- appendsOFile(fp,buf);
- break;
- }
- case VCVT_ULONG: {
- char buf[16];
- sprintf(buf,"%lu", LONG_VALUE_OF(o));
- appendsOFile(fp,buf);
- break;
- }
- case VCVT_RAW: {
- appendcOFile(fp,'\n');
- writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size);
- break;
- }
- case VCVT_VOBJECT:
- appendcOFile(fp,'\n');
- writeVObject_(fp,VOBJECT_VALUE_OF(o));
- break;
- }
-}
-
-static void writeAttrValue(OFile *fp, VObject *o)
-{
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- pi = lookupPropInfo(NAME_OF(o));
- if (pi && ((pi->flags & PD_INTERNAL) != 0)) return;
- appendcOFile(fp,';');
- appendsOFile(fp,NAME_OF(o));
- }
- else
- appendcOFile(fp,';');
- if (VALUE_TYPE(o)) {
- appendcOFile(fp,'=');
- writeValue(fp,o,0,0);
- }
-}
-
-static void writeGroup(OFile *fp, VObject *o)
-{
- char buf1[256];
- char buf2[256];
- strcpy(buf1,NAME_OF(o));
- while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) {
- strncpy(buf2,STRINGZ_VALUE_OF(o),sizeof(buf2));
- buf2[sizeof(buf2)-1] = '\0';
- strncat(buf2,".",sizeof(buf2)-strlen(buf2)-1);
- strncat(buf2,buf1,sizeof(buf2)-strlen(buf2)-1);
- strcpy(buf1,buf2);
- }
- appendsOFile(fp,buf1);
-}
-
-static int inList(const char **list, const char *s)
-{
- if (list == 0) return 0;
- while (*list) {
- if (stricmp(*list,s) == 0) return 1;
- list++;
- }
- return 0;
-}
-
-static void writeProp(OFile *fp, VObject *o)
-{
- int isQuoted=0;
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- VObjectIterator t;
- const char **fields_ = 0;
- pi = lookupPropInfo(NAME_OF(o));
- if (pi && ((pi->flags & PD_BEGIN) != 0)) {
- writeVObject_(fp,o);
- return;
- }
- if (isAPropertyOf(o,VCGroupingProp))
- writeGroup(fp,o);
- else
- appendsOFile(fp,NAME_OF(o));
- if (pi) fields_ = pi->fields;
- initPropIterator(&t,o);
- while (moreIteration(&t)) {
- const char *s;
- VObject *eachProp = nextVObject(&t);
- s = NAME_OF(eachProp);
- if (stricmp(VCGroupingProp,s) && !inList(fields_,s))
- writeAttrValue(fp,eachProp);
- if (stricmp(VCQPProp,s)==0 || stricmp(VCQuotedPrintableProp,s)==0)
- isQuoted=1;
- }
- if (fields_) {
- int i = 0, n = 0;
- const char** fields = fields_;
- /* output prop as fields */
- appendcOFile(fp,':');
- while (*fields) {
- VObject *t = isAPropertyOf(o,*fields);
- i++;
- if (t) n = i;
- fields++;
- }
- fields = fields_;
- for (i=0;i<n;i++) {
- writeValue(fp,isAPropertyOf(o,*fields),0,isQuoted);
- fields++;
- if (i<(n-1)) appendcOFile(fp,';');
- }
- }
- }
-
- if (VALUE_TYPE(o)) {
- unsigned long size = 0;
- VObject *p = isAPropertyOf(o,VCDataSizeProp);
- if (p) size = LONG_VALUE_OF(p);
- appendcOFile(fp,':');
- writeValue(fp,o,size,isQuoted);
- }
-
- appendcOFile(fp,'\n');
-}
-
-static void writeVObject_(OFile *fp, VObject *o)
-{
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- pi = lookupPropInfo(NAME_OF(o));
-
- if (pi && ((pi->flags & PD_BEGIN) != 0)) {
- VObjectIterator t;
- const char *begin = NAME_OF(o);
- appendsOFile(fp,"BEGIN:");
- appendsOFile(fp,begin);
- appendcOFile(fp,'\n');
- initPropIterator(&t,o);
- while (moreIteration(&t)) {
- VObject *eachProp = nextVObject(&t);
- writeProp(fp, eachProp);
- }
- appendsOFile(fp,"END:");
- appendsOFile(fp,begin);
- appendsOFile(fp,"\n\n");
- }
- }
-}
-
-void writeVObject(FILE *fp, VObject *o)
-{
- OFile ofp;
- initOFile(&ofp,fp);
- writeVObject_(&ofp,o);
-}
-
-DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o)
-{
- FILE *fp = fopen(fname,"w");
- if (fp) {
- writeVObject(fp,o);
- fclose(fp);
- }
-}
-
-DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list)
-{
- FILE *fp = fopen(fname,"w");
- if (fp) {
- while (list) {
- writeVObject(fp,list);
- list = nextVObjectInList(list);
- }
- fclose(fp);
- }
-}
-
-DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o)
-{
- OFile ofp;
- initMemOFile(&ofp,s,len?*len:0);
- writeVObject_(&ofp,o);
- if (len) *len = ofp.len;
- appendcOFile(&ofp,0);
- return ofp.s;
-}
-
-DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list)
-{
- OFile ofp;
- initMemOFile(&ofp,s,len?*len:0);
- while (list) {
- writeVObject_(&ofp,list);
- list = nextVObjectInList(list);
- }
- if (len) *len = ofp.len;
- appendcOFile(&ofp,0);
- return ofp.s;
-}
-
-/*----------------------------------------------------------------------
- APIs to do fake Unicode stuff.
- ----------------------------------------------------------------------*/
-DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes)
-{
- wchar_t *r, *pw;
- int len = strlen(ps)+1;
-
- pw = r = (wchar_t*)malloc(sizeof(wchar_t)*len);
- if (bytes)
- *bytes = len * sizeof(wchar_t);
-
- while (*ps) {
- if (*ps == '\n')
- *pw = (wchar_t)0x2028;
- else if (*ps == '\r')
- *pw = (wchar_t)0x2029;
- else
- *pw = (wchar_t)(unsigned char)*ps;
- ps++; pw++;
- }
- *pw = (wchar_t)0;
-
- return r;
-}
-
-DLLEXPORT(int) uStrLen(const wchar_t *u)
-{
- int i = 0;
- while (*u != (wchar_t)0) { u++; i++; }
- return i;
-}
-
-DLLEXPORT(char*) fakeCString(const wchar_t *u)
-{
- char *s, *t;
- int len = uStrLen(u) + 1;
- t = s = (char*)malloc(len);
- while (*u) {
- if (*u == (wchar_t)0x2028)
- *t = '\n';
- else if (*u == (wchar_t)0x2029)
- *t = '\r';
- else
- *t = (char)*u;
- u++; t++;
- }
- *t = 0;
- return s;
-}
-
-/* end of source file vobject.c */
diff --git a/libical/src/libicalvcal/vobject.h b/libical/src/libicalvcal/vobject.h
deleted file mode 100644
index bc31dc8297..0000000000
--- a/libical/src/libicalvcal/vobject.h
+++ /dev/null
@@ -1,366 +0,0 @@
-/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-/*
-
-The vCard/vCalendar C interface is implemented in the set
-of files as follows:
-
-vcc.y, yacc source, and vcc.c, the yacc output you will use
-implements the core parser
-
-vobject.c implements an API that insulates the caller from
-the parser and changes in the vCard/vCalendar BNF
-
-port.h defines compilation environment dependent stuff
-
-vcc.h and vobject.h are header files for their .c counterparts
-
-vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions
-which you may find useful.
-
-test.c is a standalone test driver that exercises some of
-the features of the APIs provided. Invoke test.exe on a
-VCARD/VCALENDAR input text file and you will see the pretty
-print output of the internal representation (this pretty print
-output should give you a good idea of how the internal
-representation looks like -- there is one such output in the
-following too). Also, a file with the .out suffix is generated
-to show that the internal representation can be written back
-in the original text format.
-
-For more information on this API see the readme.txt file
-which accompanied this distribution.
-
- Also visit:
-
- http://www.versit.com
- http://www.ralden.com
-
-*/
-
-
-#ifndef __VOBJECT_H__
-#define __VOBJECT_H__ 1
-
-
-#include "port.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-extern "C" {
-#endif
-
-
-#define VC7bitProp "7BIT"
-#define VC8bitProp "8BIT"
-#define VCAAlarmProp "AALARM"
-#define VCAdditionalNamesProp "ADDN"
-#define VCAdrProp "ADR"
-#define VCAgentProp "AGENT"
-#define VCAIFFProp "AIFF"
-#define VCAOLProp "AOL"
-#define VCAppleLinkProp "APPLELINK"
-#define VCAttachProp "ATTACH"
-#define VCAttendeeProp "ATTENDEE"
-#define VCATTMailProp "ATTMAIL"
-#define VCAudioContentProp "AUDIOCONTENT"
-#define VCAVIProp "AVI"
-#define VCBase64Prop "BASE64"
-#define VCBBSProp "BBS"
-#define VCBirthDateProp "BDAY"
-#define VCBMPProp "BMP"
-#define VCBodyProp "BODY"
-#define VCBusinessRoleProp "ROLE"
-#define VCCalProp "VCALENDAR"
-#define VCCaptionProp "CAP"
-#define VCCardProp "VCARD"
-#define VCCarProp "CAR"
-#define VCCategoriesProp "CATEGORIES"
-#define VCCellularProp "CELL"
-#define VCCGMProp "CGM"
-#define VCCharSetProp "CS"
-#define VCCIDProp "CID"
-#define VCCISProp "CIS"
-#define VCCityProp "L"
-#define VCClassProp "CLASS"
-#define VCCommentProp "NOTE"
-#define VCCompletedProp "COMPLETED"
-#define VCContentIDProp "CONTENT-ID"
-#define VCCountryNameProp "C"
-#define VCDAlarmProp "DALARM"
-#define VCDataSizeProp "DATASIZE"
-#define VCDayLightProp "DAYLIGHT"
-#define VCDCreatedProp "DCREATED"
-#define VCDeliveryLabelProp "LABEL"
-#define VCDescriptionProp "DESCRIPTION"
-#define VCDIBProp "DIB"
-#define VCDisplayStringProp "DISPLAYSTRING"
-#define VCDomesticProp "DOM"
-#define VCDTendProp "DTEND"
-#define VCDTstartProp "DTSTART"
-#define VCDueProp "DUE"
-#define VCEmailAddressProp "EMAIL"
-#define VCEncodingProp "ENCODING"
-#define VCEndProp "END"
-#define VCEventProp "VEVENT"
-#define VCEWorldProp "EWORLD"
-#define VCExNumProp "EXNUM"
-#define VCExpDateProp "EXDATE"
-#define VCExpectProp "EXPECT"
-#define VCExtAddressProp "EXT ADD"
-#define VCFamilyNameProp "F"
-#define VCFaxProp "FAX"
-#define VCFullNameProp "FN"
-#define VCGeoProp "GEO"
-#define VCGeoLocationProp "GEO"
-#define VCGIFProp "GIF"
-#define VCGivenNameProp "G"
-#define VCGroupingProp "Grouping"
-#define VCHomeProp "HOME"
-#define VCIBMMailProp "IBMMail"
-#define VCInlineProp "INLINE"
-#define VCInternationalProp "INTL"
-#define VCInternetProp "INTERNET"
-#define VCISDNProp "ISDN"
-#define VCJPEGProp "JPEG"
-#define VCLanguageProp "LANG"
-#define VCLastModifiedProp "LAST-MODIFIED"
-#define VCLastRevisedProp "REV"
-#define VCLocationProp "LOCATION"
-#define VCLogoProp "LOGO"
-#define VCMailerProp "MAILER"
-#define VCMAlarmProp "MALARM"
-#define VCMCIMailProp "MCIMAIL"
-#define VCMessageProp "MSG"
-#define VCMETProp "MET"
-#define VCModemProp "MODEM"
-#define VCMPEG2Prop "MPEG2"
-#define VCMPEGProp "MPEG"
-#define VCMSNProp "MSN"
-#define VCNamePrefixesProp "NPRE"
-#define VCNameProp "N"
-#define VCNameSuffixesProp "NSUF"
-#define VCNoteProp "NOTE"
-#define VCOrgNameProp "ORGNAME"
-#define VCOrgProp "ORG"
-#define VCOrgUnit2Prop "OUN2"
-#define VCOrgUnit3Prop "OUN3"
-#define VCOrgUnit4Prop "OUN4"
-#define VCOrgUnitProp "OUN"
-#define VCPagerProp "PAGER"
-#define VCPAlarmProp "PALARM"
-#define VCParcelProp "PARCEL"
-#define VCPartProp "PART"
-#define VCPCMProp "PCM"
-#define VCPDFProp "PDF"
-#define VCPGPProp "PGP"
-#define VCPhotoProp "PHOTO"
-#define VCPICTProp "PICT"
-#define VCPMBProp "PMB"
-#define VCPostalBoxProp "BOX"
-#define VCPostalCodeProp "PC"
-#define VCPostalProp "POSTAL"
-#define VCPowerShareProp "POWERSHARE"
-#define VCPreferredProp "PREF"
-#define VCPriorityProp "PRIORITY"
-#define VCProcedureNameProp "PROCEDURENAME"
-#define VCProdIdProp "PRODID"
-#define VCProdigyProp "PRODIGY"
-#define VCPronunciationProp "SOUND"
-#define VCPSProp "PS"
-#define VCPublicKeyProp "KEY"
-#define VCQPProp "QP"
-#define VCQuickTimeProp "QTIME"
-#define VCQuotedPrintableProp "QUOTED-PRINTABLE"
-#define VCRDateProp "RDATE"
-#define VCRegionProp "R"
-#define VCRelatedToProp "RELATED-TO"
-#define VCRepeatCountProp "REPEATCOUNT"
-#define VCResourcesProp "RESOURCES"
-#define VCRNumProp "RNUM"
-#define VCRoleProp "ROLE"
-#define VCRRuleProp "RRULE"
-#define VCRSVPProp "RSVP"
-#define VCRunTimeProp "RUNTIME"
-#define VCSequenceProp "SEQUENCE"
-#define VCSnoozeTimeProp "SNOOZETIME"
-#define VCStartProp "START"
-#define VCStatusProp "STATUS"
-#define VCStreetAddressProp "STREET"
-#define VCSubTypeProp "SUBTYPE"
-#define VCSummaryProp "SUMMARY"
-#define VCTelephoneProp "TEL"
-#define VCTIFFProp "TIFF"
-#define VCTimeZoneProp "TZ"
-#define VCTitleProp "TITLE"
-#define VCTLXProp "TLX"
-#define VCTodoProp "VTODO"
-#define VCTranspProp "TRANSP"
-#define VCUniqueStringProp "UID"
-#define VCURLProp "URL"
-#define VCURLValueProp "URLVAL"
-#define VCValueProp "VALUE"
-#define VCVersionProp "VERSION"
-#define VCVideoProp "VIDEO"
-#define VCVoiceProp "VOICE"
-#define VCWAVEProp "WAVE"
-#define VCWMFProp "WMF"
-#define VCWorkProp "WORK"
-#define VCX400Prop "X400"
-#define VCX509Prop "X509"
-#define VCXRuleProp "XRULE"
-
-/* Extensions */
-
-#define XPilotIdProp "X-PILOTID"
-#define XPilotStatusProp "X-PILOTSTAT"
-
-typedef struct VObject VObject;
-
-typedef struct VObjectIterator {
- VObject* start;
- VObject* next;
- } VObjectIterator;
-
-extern DLLEXPORT(VObject*) newVObject(const char *id);
-extern DLLEXPORT(void) deleteVObject(VObject *p);
-extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size);
-extern DLLEXPORT(void) deleteStr(const char *p);
-extern DLLEXPORT(void) unUseStr(const char *s);
-
-extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id);
-extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s);
-extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s);
-extern DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s);
-extern DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s);
-extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i);
-extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l);
-extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t);
-extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size);
-extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size);
-
-extern DLLEXPORT(const char*) vObjectName(VObject *o);
-extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o);
-extern DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o);
-extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o);
-extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o);
-extern DLLEXPORT(void*) vObjectAnyValue(VObject *o);
-extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o);
-extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p);
-
-extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p);
-extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id);
-extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id);
-extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v);
-extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size);
-extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size);
-extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g);
-extern DLLEXPORT(void) addList(VObject **o, VObject *p);
-
-extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id);
-
-extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o);
-extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o);
-extern DLLEXPORT(int) moreIteration(VObjectIterator *i);
-extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i);
-
-extern DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o);
-extern DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list);
-
-extern DLLEXPORT(const char*) lookupStr(const char *s);
-extern DLLEXPORT(void) cleanStrTbl();
-
-extern DLLEXPORT(void) cleanVObject(VObject *o);
-extern DLLEXPORT(void) cleanVObjects(VObject *list);
-
-extern DLLEXPORT(const char*) lookupProp(const char* str);
-extern DLLEXPORT(const char*) lookupProp_(const char* str);
-
-extern DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes);
-extern DLLEXPORT(int) uStrLen(const wchar_t *u);
-extern DLLEXPORT(char*) fakeCString(const wchar_t *u);
-
-extern DLLEXPORT(void) printVObjectToFile(char *fname,VObject *o);
-extern DLLEXPORT(void) printVObjectsToFile(char *fname,VObject *list);
-extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o);
-extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list);
-
-extern DLLEXPORT(int) vObjectValueType(VObject *o);
-
-/* return type of vObjectValueType: */
-#define VCVT_NOVALUE 0
- /* if the VObject has no value associated with it. */
-#define VCVT_STRINGZ 1
- /* if the VObject has value set by setVObjectStringZValue. */
-#define VCVT_USTRINGZ 2
- /* if the VObject has value set by setVObjectUStringZValue. */
-#define VCVT_UINT 3
- /* if the VObject has value set by setVObjectIntegerValue. */
-#define VCVT_ULONG 4
- /* if the VObject has value set by setVObjectLongValue. */
-#define VCVT_RAW 5
- /* if the VObject has value set by setVObjectAnyValue. */
-#define VCVT_VOBJECT 6
- /* if the VObject has value set by setVObjectVObjectValue. */
-
-extern const char** fieldedProp;
-
-/* NOTE regarding printVObject and writeVObject
-
-The functions below are not exported from the DLL because they
-take a FILE* as a parameter, which cannot be passed across a DLL
-interface (at least that is my experience). Instead you can use
-their companion functions which take file names or pointers
-to memory. However, if you are linking this code into
-your build directly then you may find them a more convenient API
-and you can go ahead and use them. If you try to use them with
-the DLL LIB you will get a link error.
-*/
-extern void printVObject(FILE *fp,VObject *o);
-extern void writeVObject(FILE *fp, VObject *o);
-
-
-#if defined(__CPLUSPLUS__) || defined(__cplusplus)
-}
-#endif
-
-#endif /* __VOBJECT_H__ */
-
-
diff --git a/libical/src/python/.cvsignore b/libical/src/python/.cvsignore
deleted file mode 100644
index 4f03abd9aa..0000000000
--- a/libical/src/python/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
-*.pyc
-LibicalWrap.c
-LibicalWrap_wrap.doc
-config.c
diff --git a/libical/src/python/Attendee.py b/libical/src/python/Attendee.py
deleted file mode 100644
index 52001ba3e8..0000000000
--- a/libical/src/python/Attendee.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Property.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-from Property import Property
-from types import DictType, StringType, IntType
-
-class Attendee(Property):
- """Class for Attendee properties.
-
- Usage:
- Attendee([dict])
- Attendee([address])
-
- Where:
- dict is an optional dictionary with keys of
- 'value': CAL-ADDRESS string and any parameter: parameter_value entries.
- 'name' and 'value_type' entries in dict are ignored and automatically set
- with the appropriate values.
- address is the CAL-ADDRESS (string) of the Attendee
- """
-
- def __init__(self, arg={}):
-
- assert(isinstance(arg,DictType))
-
- ref = None
-
- if arg!={}:
- ref = arg['ref']
-
- Property.__init__(self,type='ATTENDEE',ref=ref)
-
- def _doParam(self, parameter, v):
- if v!=None:
- self[parameter]=v
- return self[parameter]
-
- # Methods for accessing enumerated parameters
- def cn(self, v=None): self._doParam('CN', v)
- def cutype(self, v=None): self._doParam('CUTYPE', v)
- def dir(self, v=None): self._doParam('DIR', v)
- def delegated_from(self, v=None): self._doParam('DELEGATED-FROM', v)
- def delegated_to(self, v=None): self._doParam('DELEGATED-TO', v)
- def language(self, v=None): self._doParam('LANGUAGE', v)
- def member(self, v=None): self._doParam('MEMBER', v)
- def partstat(self, v=None): self._doParam('PARTSTAT', v)
- def role(self, v=None): self._doParam('ROLE', v)
- def rsvp(self, v=None): self._doParam('RSVP', v)
- def sent_by(self, v=None): self._doParam('SENT-BY', v)
-
-
-class Organizer(Property):
- """Class for Organizer property.
- """
-
- def __init__(self, arg={}):
-
- assert(isinstance(arg, DictType))
-
- ref = None
- if arg != {}:
- ref = arg['ref']
- Property.__init__(self, type='ORGANIZER', ref=ref)
-
-## param_t = ( 'CN', 'DIR', 'SENT-BY', 'LANGUAGE' )
-## for param in param_t:
-## self[param] = None
-## if value != None:
-## self.value(value)
-
-
- def _doParam(self, parameter, v):
- if v!=None:
- self[parameter]=v
- return self[parameter]
-
- def name(self):
- "Return the name of the property."
- return Property.name(self)
-
- def value_type(self):
- "Return the value type of the property."
- return self._desc['value_type']
-
- # Methods for accessing enumerated parameters
- def cn(self, v=None): self._doParam('CN', v)
- def dir(self, v=None): self._doParam('DIR', v)
- def language(self, v=None): self._doParam('LANGUAGE', v)
- def sent_by(self, v=None): self._doParam('SENT-BY', v)
diff --git a/libical/src/python/ChangeLog b/libical/src/python/ChangeLog
deleted file mode 100644
index ef096f4e3a..0000000000
--- a/libical/src/python/ChangeLog
+++ /dev/null
@@ -1,129 +0,0 @@
-2001-04-04 Eric Busboom <eric@softwarestudio.org>
-
- * Component.py Added Calendar class.
-
- * Componeny.py Changed all component constructor so they cannot
- take string arguments. Now, only NewComponent() can turn an iCal
- string into a component.
-
-
-2001-04-02 Eric Busboom <eric@softwarestudio.org>
-
- * Component.py removed arguments from the Event constructor, since
- I presume that the Component derived classes will always be
- constructed with no arguments.
-
- * Property.py Split out Attendee, Organizer, Time, Duration and
- Period into their own files. Moved remaining classes to Derived
- Properties.pm
-
-
-2001-03-13 Eric Busboom <eric@softwarestudio.org>
-
- * Component.py Added Component.property()
-
-2001-03-10 Patrick Lewis <plewis@inetarena.com>
-
- * Added __str__ method to Collection.Collection
-
- * Component.Component can now be initialized without arguments
-
- * Made _singular_property and _multiple_properties (in Component)
- useful for nearly all the specific component interfaces
-
- * Changed Property.Attendee and Property.Organizer to allow creation
- with no arguments
-
- * Filled in Todo skeleton
-
- * Added test function for an Event
-
-
-2001-03-05 Eric Busboom <eric@softwarestudio.org>
-
- * Property.py Added a lot of exception code to signal failure to
- create a Property.
-
- * DerivedProperties.py Added derived property classes for RDATE
- and TRIGGER, two properties that can have one of two value types.
-
-
-2001-03-04 Eric Busboom <eric@softwarestudio.org>
-
- * Property.pm Added Property.ConstructorFailedError exception
-
- * Component.pm fixed bug in Collection.__setslice__. "," used
- instead of ":"
-
-2001-03-04 Patrick Lewis <plewis@inetarena.com>
-
- * Split Libical.py file into Component.py, Property.py, Collection.py,
- and Store.py
-
- * Added test_* functions to test.py
-
- * Changed component bindings to return a Collection when objects can
- have multiple values
-
- * Changed Component object to allow for creation of an object without
- an initial string
-
- * Added Todo and Journal events
-
-2001-02-28 Eric Busboom <eric@softwarestudio.org>
-
- * Property Remove most internal data. The property now work
- alsmost entirely off of the icalproperty that it holds a reference
- to. Made changes in all derived Properties to accomodate the
- change.
-
- * Property Added __del__
-
- * Component Component.properties() now caches properties that it
- constructs, so two calls to properties() to that get the same
- icalproperty will also get the same Property.
-
- * Property Added Property.__cmp__ to test equality of properties
- based on ical string values
-
-2001-02-27 Eric Busboom <eric@softwarestudio.org>
-
- * Property Added Property.ref() to set/get the reference to the
- Property's internal icalproperty
-
- * Property Property._update_value now changes the icalproperty
- value if a reference has been set.
-
- * Component re-instituted Component.properties(). The routine now
- adds a 'ref' key to the dict that holds the python pointer
- string. The C hex value of the pointer is in the 'pid' key
-
-
-2001-02-27 Patrick Lewis <plewis@inetarena.com>
-
- * Backed out changes to Component removing comp_p;
- Component.comp_p should be restored
-
-2001-02-26 Eric Busboom <eric@softwarestudio.org>
-
- * Period Added test routine,test_period()
-
- * Period implemented methods in period
-
- * Time Addedd addition and subtraction operators
-
-2001-02-25 Eric Busboom <eric@softwarestudio.org>
-
- * Libical.py Added test routine for time, time_test()
-
- * Libical.py Remove end of line chars ('\r\n" ) from
- Property._str__. Caller should add these lines itself
-
- * Liical.py CHanges Time._update_values to set time VALUE type
- based on use of is_date, rather than length of string.
-
- * Libical.py Removed call to _update_value in TIme::timezone
-
-
- * Libical.py changed update_value to _update_value
-
diff --git a/libical/src/python/Collection.py b/libical/src/python/Collection.py
deleted file mode 100644
index 48092aadaa..0000000000
--- a/libical/src/python/Collection.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Collection.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from types import *
-
-class Collection:
- """A group of components that can be modified somewhat like a list.
-
- Usage:
- Collection(componet, propSequence)
-
- component is a Component object
- propSequence is a list or tuple of Property (or subclass of Property)
- of objects already in component
- """
-
- def __init__(self, component, propSequence):
- self._properties = list(propSequence[:])
- self._component = component
-
- def __getslice__(self, beg, end):
- return Collection(self._component, self._properties[beg:end])
-
- def __setslice__(self, beg, end, sequence):
-
- if not isinstance(sequence,ListType):
- raise TypeError, "must assign list (not instance) to slice"
-
- oldProps = self._properties[beg:end]
-
- for p in oldProps:
- self._component.remove_property(p)
-
- self._properties[beg:end] = sequence
- for p in sequence:
- self._component.add_property(p)
-
- def __getitem__(self, i):
- return self._properties[i]
-
- def __setitem__(self, i, prop):
- self._component.remove_property(self._properties[i])
- self._component.add_property(prop)
- self._properties[i]=prop
-
- def __delitem__(self, i):
- self._component.remove_property(self._properties[i])
- del self._properties[i]
-
- def __len__(self):
- return len(self._properties)
-
- def __str__(self):
- s = "[ "
- if len(self._properties) > 0:
- s = s + str(self._properties[0])
- for p in self._properties[1:]:
- s = "%s, %s" % (s, p)
- s = s + " ]"
- return s
-
- def append(self, property):
- self._properties.append(property)
- self._component.add_property(property)
-
-class ComponentCollection:
-
- def __init__(self, parent, componentSequence):
- self._parent = parent
- self._components = list(componentSequence[:])
-
- def __getslice__(self, beg, end):
- return ComponentCollection(self._parent, self._components[beg:end])
-
- def __setslice__(self, beg, end, sequence):
- oldComps = self._components[beg:end]
- self._components.__setslice__(beg, end, sequence)
- for c in sequence:
- self._components.addComponent(c)
- for c in oldComps:
- self._parent.remove_component(c)
-
- def __getitem__(self, i):
- return self._components[i]
-
- def __setitem__(self, i, prop):
- self._parent.remove_component(self._components[i])
- self._parent.add_property(prop)
- self._components[i]=prop
-
- def __delitem__(self, i):
- self._parent.remove_componet(self._components[i])
- del self._components[i]
-
- def __len__(self):
- return len(self._components)
-
- def append(self, property):
- self._components.append(property)
- self._parent.addComponent(property)
diff --git a/libical/src/python/Component.py b/libical/src/python/Component.py
deleted file mode 100644
index 41ef7419db..0000000000
--- a/libical/src/python/Component.py
+++ /dev/null
@@ -1,799 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Component.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-from types import DictType, StringType, IntType
-from Property import Property
-from Collection import *
-from Attendee import Attendee, Organizer
-from Time import Time
-from Duration import Duration
-from Period import Period
-import string
-
-WrapperNULL = None
-
-class Component:
-
- def __init__(self,ref=None,kind=None):
-
- if ref != None:
- self._ref = ref
- elif kind != None:
- self._ref = icalcomponent_new(
- icalcomponent_string_to_kind("VCALENDAR"))
- _kind = icalcomponent_string_to_kind(kind)
- inner = icalcomponent_new(_kind)
-
- icalcomponent_add_component(self._ref,inner);
-
- else:
- raise "Could not construct component of kind" + kind
-
- self.cached_props = {}
- self.cached_comps = {}
-
- def __del__(self):
- if self._ref != None and icalcomponent_get_parent(self._ref) != WrapperNULL:
-
- for k in self.cached_props.keys():
- del self.cached_props[k]
-
- icalcomponent_free(self._ref)
- self._ref = None
-
- def _prop_from_ref(self,p):
-
- if(p == None or p== WrapperNULL):
- return None;
-
- d = {}
- d['value'] = icalproperty_get_value_as_string(p)
- d['name'] = icalproperty_get_name(p)
-
- propkind = icalproperty_string_to_kind(d['name'])
- kind = icalproperty_kind_to_value_kind(propkind)
- d['value_type'] = icalvalue_kind_to_string(kind)
- d['ref'] = p
-
-
- if not self.cached_props.has_key(p):
-
- if d['value_type'] == 'DATE-TIME' or d['value_type'] == 'DATE':
- prop = Time(d,)
- elif d['value_type'] == 'PERIOD':
- prop = Period(d)
- elif d['value_type'] == 'DURATION':
- prop = Duration(d)
- elif d['name'] == 'ATTACH':
- prop = Attach(d)
- elif d['name'] == 'ATTENDEE':
- prop = Attendee(d)
- elif d['name'] == 'ORGANIZER':
- prop = Organizer(d)
- else:
- prop=Property(ref=p)
-
- self.cached_props[p] = prop
-
- def property(self, type):
-
- p = icallangbind_get_first_property(self._ref,type)
-
- if p !=WrapperNULL:
- self._prop_from_ref(p)
- prop = self.cached_props[p]
- return prop
- else :
- return None
-
- def properties(self,type='ANY'):
- """
- Return a list of Property instances, each representing a
- property of the type 'type.'
- """
-
- props = []
-
- p = icallangbind_get_first_property(self._ref,type)
-
- while p !=WrapperNULL and p != None:
-
- self._prop_from_ref(p) # Puts property in self.cached_props
- prop = self.cached_props[p]
- props.append(prop)
- p = icallangbind_get_next_property(self._ref,type)
-
- return Collection(self,props)
-
- def add_property(self, prop):
- "Adds the property object to the component."
-
- if not isinstance(prop,Property):
- raise TypeError
-
- prop_p = prop.ref()
-
- if not prop_p:
- s = str(prop)
- prop_p = icalproperty_new_from_string(s)
-
- if prop_p == WrapperNULL:
- raise "Bad property string: " + s
-
- prop.ref(prop_p)
-
- if icalproperty_get_parent(prop_p)==WrapperNULL:
- icalcomponent_add_property(self._ref, prop_p)
- elif icalproperty_get_parent(prop_p) != self._ref:
- raise "Property is already a child of another component"
-
-
- def remove_property(self,prop):
-
- if prop.ref() and self.cached_props.has_key(prop.ref()):
-
- del self.cached_props[prop.ref()]
- icalcomponent_remove_property(self._ref,prop.ref())
-
- def components(self,type='ANY'):
- comps = []
-
- kind = icalcomponent_string_to_kind(type)
- c = icalcomponent_get_first_component(self._ref,kind);
-
- while c != WrapperNULL and c != None:
-
- if not self.cached_comps.has_key(c):
-
- self.cached_comps[c] = Component(c)
-
- comp = self.cached_comps[c]
- comps.append(comp)
- c = icalcomponent_get_next_component(self._ref,kind);
-
- return comps
-
- def inner_component(self):
-
- inner = icalcomponent_get_inner(self._ref)
-
- if inner == WrapperNULL and inner != None:
- return None
-
- return NewComponent(inner)
-
- def add_component(self, comp):
- "Adds a child component."
-
- if not isinstance(comp,Component):
- raise ValueError("Expected a Component")
-
- if icalcomponent_get_parent(comp._ref) != WrapperNULL:
- raise "Failed to add child component. Child already has a parent";
-
- icalcomponent_add_component(self._ref,comp._ref)
-
- def remove_component(self, comp):
- "Removes a child component"
-
- if not isinstance(comp,Component):
- raise ValueError("Expected a Component")
-
- icalcomponent_remove_component(self._ref,comp._ref)
-
- def as_ical_string(self):
- return self.__str__()
-
- def __str__(self):
-
- return icalcomponent_as_ical_string(self._ref)
-
- def ref(self):
- """ Return the internal reference to the libical icalproperty """
- return self._ref
-
-def CloneComponent(c):
- "Clones a string or C icalcomponent into the right component object."
-
- wasStr=0 # Were we passed a string or an icalcomponent?
-
- if isinstance(c, Component):
- comp = icalparser_parse_string(c.as_ical_string())
- elif isinstance (c, StringType) and string.find(c,"icalcomponent") == -1:
- comp = icalparser_parse_string(c)
- else:
- comp = c
-
- if comp == None or comp == WrapperNULL:
- raise ValueError("Expected a libical reference or an iCal string")
-
- kind = icalcomponent_isa(comp)
- kindStr = icalcomponent_kind_to_string(kind)
-
- if kindStr == 'VCALENDAR':
- inner = icalcomponent_get_inner(comp)
- kind = icalcomponent_isa(inner)
- kindStr = icalcomponent_kind_to_string(kind)
-
- if kindStr == 'VEVENT':
- newComp = Event(comp)
- elif kindStr == 'VTODO':
- newComp = Todo(comp)
- elif kindStr == 'VJOURNAL':
- newComp = Journal(comp)
- else:
- newComp = Component(comp)
-
- # I don't think I need to free the component created when passed a string,
- # as it wasn't created with a _new function.
-
- return newComp
-
-
-def NewComponent(c):
- "Converts a string or C icalcomponent into the right component object."
-
- wasStr=0 # Were we passed a string or an icalcomponent?
-
- if isinstance (c, StringType) and string.find(c,"icalcomponent") == -1:
- comp = icalparser_parse_string(c)
- else:
- comp = c
-
- if comp == None or comp == WrapperNULL:
- raise ValueError("Expected a libical reference or an iCal string")
-
- kind = icalcomponent_isa(comp)
- kindStr = icalcomponent_kind_to_string(kind)
-
- if kindStr == 'VEVENT':
- newComp = Event(comp)
- elif kindStr == 'VTODO':
- newComp = Todo(comp)
- elif kindStr == 'VJOURNAL':
- newComp = Journal(comp)
- else:
- newComp = Component(comp)
-
- # I don't think I need to free the component created when passed a string,
- # as it wasn't created with a _new function.
-
- return newComp
-
-
-class GenericComponent(Component):
-
- def __init__(self,ref=None,kind=None):
-
- if ref != None:
- Component.__init__(self, ref=ref) # Call from subclasses
- elif type != None:
- Component.__init__(self, kind=kind) # Call from subclasses
- else:
- raise ValueError("Expected either a icalcomponent reference or a kind string")
-
-
- self._recurrence_set=None
-
- def _singular_property(self, name, value_type, value=None,
- property_obj=None, enumerated_values=None):
- """Sets or gets the value of a method which exists once per Component.
-
- This is a constructor method for properties without a strictly defined
- object."""
-
- # Depending on the property name, this routine will either
- # operate on the VCALENDAR container or on the inner VEVENT,
- # VTODO, or VJOURNAL
-
- if name in ['METHOD','PRODID','CALSCALE','VERSION']:
- comp = self
- else:
- comp = self.inner_component()
-
- curr_properties = comp.properties(name)
-
- # Get the value
- if value==None:
- if len(curr_properties) == 0:
- return None
- elif len(curr_properties) == 1:
- return curr_properties[0]
- else:
- raise ValueError, "too many properties of type %s" % propType
-
- # Set the value
- else:
- # Check if value is in enumerated_values
- if enumerated_values:
- value = string.upper(value)
- if value not in enumerated_values:
- raise ValueError, "%s is not one of %s" \
- % (value, enumerated_values)
-
- # Create the new property
- if property_obj:
- if not isinstance(value, property_obj):
- # Create a special property_obj property
- if property_obj == Time:
- p = Time(value, name)
- ## p.value_type(value_type)
- elif property_obj == Duration:
- p = Duration(value)
- else:
- p = property_obj()
- ## p.value_type(value_type)
- p.value(value)
- else:
- p = value # value is already a property_obj
- else:
- # Create a generic property
- p = Property(name)
- ## p.value_type(value_type)
- p.value(value)
-
- if len(curr_properties) == 1:
- comp.remove_property(curr_properties[0])
- elif len(curr_properties) > 1:
- raise ValueError, "too many properties of type %s" % propType
-
- comp.add_property(p)
-
- # METHOD, PRODID, CALSCALE and VERSION are properties of the
- # VCALENDAR, not the inner component
-
- def method(self, v=None):
- "Sets or returns the value of the METHOD property."
- return self._singular_property("METHOD", "TEXT", v)
-
- def prodid(self, v=None):
- "Sets or returns the value of the PRODID property."
- return self._singular_property("PRODID", "TEXT", v)
-
- def calscale(self, v=None):
- "Sets or returns the value of the CALSCALE property."
- return self._singular_property("CALSCALE", "TEXT", v)
-
- def version(self, v=None):
- "Sets or returns the value of the Version property."
- return self._singular_property("VERSION", "TEXT", v)
-
- # The remaining properties are all in the inner component
-
- def clone(self):
- "Returns a copy of the object."
- return CloneComponent(self)
-
- def class_prop(self, v=None): # Class is a reserved word
- "Sets or returns the value of the CLASS property."
- if v!=None:
- v = string.upper(v)
- return self._singular_property('CLASS', 'TEXT', v)
-
- def created(self, v=None):
- """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 an iCalendar string
- """
- return self._singular_property("CREATED", "DATE-TIME", v, Time)
-
- def description(self, v=None):
- "Sets or returns the value of the DESCRIPTION property."
- return self._singular_property("DESCRIPTION", "TEXT", v)
-
- def dtstamp(self, v=None):
- """Sets or returns the value of the DTSTAMP property.
-
- Usage:
- dtstamp(time_obj) # Set the value using a Time object
- dtstamp('19970101T123000Z')# Set using an iCalendar string
- dtstamp(982362522) # Set using seconds
- dtstamp() # Return an iCalendar string
- """
- return self._singular_property("DTSTAMP", "DATE-TIME", v, Time)
-
- def dtstart(self, v=None):
- """Sets or returns the value of the DTSTART property.
-
- Usage:
- dtstart(time_obj) # Set the value using a Time object
- dtstart('19970101T123000Z') # Set the value as an iCalendar string
- dtstart(982362522) # Set the value using seconds (time_t)
- dtstart() # Return the time as an iCalendar string
- """
- return self._singular_property("DTSTART", "DATE-TIME", v, Time)
-
- def last_modified(self, v=None):
- """Sets or returns the value of the LAST-MODIFIED property.
-
- Usage:
- last_modified(time_obj) # Set the value using a Time object
- last_modified('19970101T123000Z')# Set using an iCalendar string
- last_modified(982362522) # Set using seconds
- last_modified() # Return an iCalendar string
- """
- return self._singular_property("LAST-MODIFIED", "DATE-TIME", v, Time)
-
- def organizer(self, v=None):
- """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
- """
- return self._singular_property('ORGANIZER', 'CAL-ADDRESS', v,
- Organizer)
-
- def recurrence_id(self, v=None):
- """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 an iCalendar string
- """
- return self._singular_property('RECURRENCE-ID', 'DATE-TIME', v,
- Recurrence_Id)
-
- def sequence(self, v=None):
- """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
- """
- if isinstance(v, StringType):
- v = int(str)
- return self._singular_property('SEQUENCE', 'INTEGER', v)
-
- def summary(self, v=None):
- "Sets or gets the SUMMARY value of the Event."
- return self._singular_property('SUMMARY', 'TEXT', v)
-
- def uid(self, v=None):
- "Sets or gets the UID of the Event."
- return self._singular_property('UID', 'TEXT', v)
-
- def url(self, v=None):
- """Sets or returns the URL property."""
- return self._singular_property('URL', 'URI', v)
-
- ####
- # Not quite sure if this is how we want to handle recurrence rules, but
- # this is a start.
-
- def recurrence_set(self):
- "Returns the Events RecurrenceSet object."
- if self._recurrence_set == None: # i.e haven't initialized one
- self._recurrence_set = RecurrenceSet()
- return self._recurrence_set
-
- ###
- # Alarm interface. Returns an ComponentCollection.
-
- def alarms(self, values=None):
- """Sets or returns ALARM components.
-
- Examples:
- alarms((alarm1,)) # Set using Alarm component
- alarms() # Returns an ComponentCollection of all Alarms
- """
- if values!=None:
- for alarm in values:
- self.add_component(alarm)
- else:
- return ComponentCollection(self, self.components('VALARM'))
-
- ####
- # Methods that deal with Properties that can occur multiple times are
- # below. They use the Collection class to return their Properties.
-
- def _multiple_properties(self, name, value_type, values,
- property_obj=None):
- "Processes set/get for Properties that can have multiple instances."
-
- comp = self.inner_component()
-
- # Set value
- if values!=None:
- if not isinstance(values, TupleType) \
- and not isinstance(values, ListType):
- raise TypeError, "%s is not a tuple or list."
-
- # Delete old properties
- for p in comp.properties(name):
- comp.remove_property(p)
-
- for v in values:
- if property_obj: # Specialized properties
- if not isinstance(v, property_obj): # Make new object
- new_prop = property_obj()
- new_prop.value(v)
- else: # Use existing object
- new_prop = v
- else: # Generic properties
- new_prop=Property(name)
- # new_prop.value_type(value_type)
- new_prop.value(v)
-
- comp.add_property(new_prop)
-
- # Get value
- else:
- return Collection(self, comp.properties(name))
-
- def attachments(self, values=None):
- """Sets or returns a Collection of Attach properties.
-
- 'values' can be a sequence containing URLs (strings) and/or file-ish
- objects.
- """
- return self._multiple_properties("ATTACH", "", value, Attach)
-
- def attendees(self, value=None):
- """Sets attendees or returns a Collection of Attendee objects.
-
- If setting the attendees, pass a sequence as the argument.
- Examples:
- # Set using Attendee objects
- attendees((attObj1, attObj2))
- # Set using a CAL-ADDRESS string
- attendees(['MAILTO:jdoe@somewhere.com'])
- # Set using a combination of Attendee objects and strings
- attendees(['MAILTO:jdoe@somewhere.com', attObj1])
- # Returns a list of Attendee objects
- attendees()
-
- When setting the attendees, any previous Attendee objects in the Event
- are overwritten. If you want to add to the Attendees, one way to do it
- is:
-
- attendees().append(Attendee('MAILTO:jdoe@nothere.com'))
- """
- return self._multiple_properties("ATTENDEE", "", value, Attendee)
-
- def categories(self, value=None):
- """Sets categories or returns a Collection of CATEGORIES properties.
-
- If setting the categories, pass a sequence as the argument.
- Examples:
- # Set using string[s]
- categories(('APPOINTMENT', 'EDUCATION'))
- # Returns a list of Category properites
- categories()
-
- When setting the attendees, any previous category Properties in the
- Event are overwritten. If you want to add to the categories, one way
- to do it is:
-
- new_cat=Property('CATEGORIES')
- new_cat.value_type('TEXT')
- new_cat.value('PERSONAL')
- categories().append(new_cat)
- """
- return self._multiple_properties("CATEGORIES", "TEXT", value)
-
- def comments(self, value=None):
- "Sets or returns a Collection of COMMENT properties."
- return self._multiple_properties('COMMENT', 'TEXT', value)
-
- def contacts(self, value=None):
- "Sets or returns a Collection of CONTACT properties."
- return self._multiple_properties('CONTACT', 'TEXT', value)
-
- def related_tos(self, value=None):
- "Sets or returns a Collection of RELATED-TO properties."
- return self._multiple_properties('RELATED-TO', 'TEXT', value)
-
- def x_properties(self, name, value=None):
- "Sets or returns a Collection of X- properties."
- return self._multiple_properties(name, 'TEXT', value)
-
-class Event(GenericComponent):
- "The iCalendar Event object."
-
- def __init__(self,ref=None):
- if ref != None:
- GenericComponent.__init__(self, ref=ref)
- else:
- GenericComponent.__init__(self, kind='VEVENT')
-
- def component_type(self):
- "Returns the type of component for the object."
- return "VEVENT"
-
- def dtend(self, v=None):
- """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 the time as an iCalendar string
-
- If the dtend value is being set and duration() has a value, the
- duration property will be removed.
- """
- if v != None:
- duration = self.properties('DURATION')
- for d in duration: # Clear DURATION properties
- self.remove_property(d)
- return self._singular_property("DTEND", "DATE-TIME", v, Time)
-
- def duration(self, v=None):
- """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 duration as an iCalendar string
-
- If the duration value is being set and dtend() has a value, the dtend
- property will be removed.
- """
-
- if v != None:
- dtend = self.properties('DTEND')
- for d in dtend:
- self.remove_property(d) # Clear DTEND properties
- return self._singular_property("DURATION", "DURATION", v, Duration)
-
- def status(self, v=None):
- "Sets or returns the value of the STATUS property."
-
- # These values are only good for VEVENT components (i.e. don't copy
- # & paste into VTODO or VJOURNAL
- valid_values=('TENTATIVE', 'CONFIRMED', 'CANCELLED')
- return self._singular_property("STATUS", "TEXT", v,
- enumerated_values=valid_values)
-
- def geo(self, v=None):
- """Sets or returns the value of the GEO property.
-
- Usage:
- geo(value) or
- geo() # Returns the icalendar string
-
- 'value' is either a icalendar GEO string or a sequence with two 'float'
- numbers.
-
- Examples:
- geo('40.232;-115.9531') # Set value using string
- geo((40.232, -115.9531)) # Set value using a sequence
- geo() # Returns "40.232;-115.9531"
-
- To get the GEO property represented as a tuple and numbers instead of
- the iCalendar string, use geo_get_tuple().
- """
-
- if isinstance(v, ListType) or isinstance(v, TupleType):
- v = "%s;%s" % (float(v[0]), float(v[1]))
- return self._singular_property("GEO", "FLOAT", v)
-
- def geo_get_tuple(self):
- """Returns the GEO property as a tuple."""
-
- geo = self.geo()
- geo = split(geo, ';')
- return float(geo[0]), float(geo[1])
-
- def location(self, v=None):
- """Sets or returns the LOCATION property."""
- return self._singular_property("LOCATION", "TEXT", v)
-
- def transp(self, v=None):
- """Sets or returns the TRANSP property."""
- ok_values = ('OPAQUE', 'TRANSPARENT')
- return self._singular_property('TRANSP', 'TEXT', v,
- enumerated_values=ok_values)
-
- def resources(self, v=None):
- pass
-
-class Todo(GenericComponent):
- "The iCalendar TODO component."
-
- def __init__(self,ref=None):
- if ref != None:
- GenericComponent.__init__(self, ref=ref)
- else:
- GenericComponent.__init__(self, kind='VTODO')
-
-
- def component_type(self):
- "Returns the type of component for the object."
- return "VTODO"
-
- def completed(self, value=None):
- return self._singular_property('COMPLETED', 'DATE-TIME', value, Time)
-
- def geo(self, value=None):
- if isinstance(v, ListType) or isinstance(v, TupleType):
- v = "%s;%s" % (float(v[0]), float(v[1]))
- return self._singular_property("GEO", "FLOAT", value)
-
- def location(self, value=None):
- return self._singular_property('LOCATION', 'TEXT', value)
-
- def percent(self, value=None):
- if value!=None:
- value = str(int(value))
- return self._singular_property('PERCENT', 'INTEGER', value)
-
- def status(self, value=None):
- if value!=None:
- value=string.upper(value)
- ok_values = ('NEEDS-ACTION', 'COMPLETED', 'IN-PROCESS', 'CANCELLED')
- return self._singular_property('STATUS', 'TEXT', value,
- enumerated_values=ok_values)
-
- def due(self, value=None):
- if value != None:
- duration = self.properties('DURATION')
- for d in duration:
- self.remove_property(d) # Clear DURATION properties
- return self._singular_property('DUE', 'DATE-TIME', value, Time)
-
- def duration(self, value=None):
- if value != None:
- due = self.properites('DUE')
- for d in due:
- self.remove_property(d) # Clear DUE properties
- return self._singular_property("DURATION", "DURATION", value, Duration)
-
- def resources():
- pass
-
-class Journal(GenericComponent):
- "The iCalendar JOURNAL component."
-
- def __init__(self):
- if ref != None:
- GenericComponent.__init__(self, ref=ref)
- else:
- GenericComponent.__init__(self, kind='VJOURNAL')
-
- def component_type(self):
- "Returns the type of component for the object."
- return "VJOURNAL"
-
- def status(self, v=None):
- if v!=None:
- v = string.upper(v)
- ok_values=('DRAFT', 'FINAL', 'CANCELLED')
- return self._singular_property('STATUS', 'TEXT', v,
- enumerated_values=ok_values)
-
diff --git a/libical/src/python/DerivedProperties.py b/libical/src/python/DerivedProperties.py
deleted file mode 100644
index 81248fe7b7..0000000000
--- a/libical/src/python/DerivedProperties.py
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: DerivedProperties.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from Property import Property
-from Time import Time
-from Period import Period
-from Duration import Duration
-
-def RDate(arg):
-
- class RDate_Time(Time):
- def __init__(self,arg): Time.__init__(self,arg,"RDATE")
-
- class RDate_Period(Period):
- def __init__(self,arg): Period.__init__(self,arg,"RDATE")
-
- p = None
- for c in [RDate_Time, RDate_Period]:
- try: return c(arg)
- except Property.ConstructorFailedError, d: pass
- raise Property.ConstructorFailedError("Failed to construct RDATE from "+str(arg))
-
-
-def Trigger(arg):
- class Trigger_Time(Time):
- def __init__(self,arg): Time.__init__(self,arg,"TRIGGER")
-
- class Trigger_Duration(Duration):
- def __init__(self,arg): Duration.__init__(self,arg,"TRIGGER")
-
- p = None
- for c in [Trigger_Duration, Trigger_Time]:
- try: return c(arg)
- except Property.ConstructorFailedError, d: pass
- raise Property.ConstructorFailedError("Failed to construct TRIGGER from "+str(arg))
-
-
-
-class Recurrence_Id(Time):
- """Class for RECURRENCE-ID property.
-
- Usage:
- Reccurence_Id(dict) # A normal property dictionary
- Reccurence_Id("19960401") # An iCalendar string
- Reccurence_Id(8349873494) # Seconds from epoch
-
- If the 'dict' constructor is used, 'name' and 'value_type'
- entries in dict are ignored and automatically set with the appropriate
- values.
- """
-
- def __init__(self, dict={}):
- Time.__init__(self, dict)
- Property.name(self, 'RECURRENCE-ID')
-
- def name(self):
- return Property.name(self)
-
- def _doParam(self, parameter, v):
- if v!=None:
- self[parameter]=v
- return self[parameter]
-
- # Enumerated parameters
- def value_parameter(self, v=None):
- """Sets or gets the VALUE parameter value.
-
- The value passed should be either "DATE-TIME" or "DATE". Setting this
- parameter has no impact on the property's value_type. Doing something
- like:
-
- rid=Recurrence_Id("19960401") # Sets value & makes value_type="DATE"
- rid.value_parameter("DATE-TIME") # Sets the parameter VALUE=DATE-TIME
-
- Would be allowed (even though it is wrong), so pay attention.
- Verifying the component will reveal the error.
- """
- if v!=None and v!="DATE" and v!="DATE-TIME":
- raise ValueError, "%s is an invalid VALUE parameter value" % str(v)
- self._doParam("VALUE", v)
-
- def tzid(self, v=None):
- "Sets or gets the TZID parameter value."
- self._doParam("TZID", v)
-
- def range_parameter(self, v=None): # 'range' is a builtin function
- "Sets or gets the RANGE parameter value."
- if v!=None and v!="THISANDPRIOR" and v!= "THISANDFUTURE":
- raise ValueError, "%s is an invalid RANGE parameter value" % str(v)
- self._doParam("RANGE", v)
-
-class Attach(Property):
- """A class representing an ATTACH property.
-
- Usage:
- Attach(uriString [, parameter_dict])
- Attach(fileObj [, parameter_dict])
- """
-
- def __init__(self, value=None, parameter_dict={}):
- Property.__init__(self, parameter_dict)
- Property.name(self, 'ATTACH')
- self.value(value)
-
- def value(self, v=None):
- "Returns or sets the value of the property."
- if v != None:
- if isinstance(v, StringType): # Is a URI
- self._desc['value']=v
- Property.value_type(self, 'URI')
- else:
- try:
- tempStr = v.read()
- except:
- raise TypeError,"%s must be a URL string or file-ish type"\
- % str(v)
- self._desc['value'] = base64.encodestring(tempStr)
- Property.value_type(self, 'BINARY')
- else:
- return self._desc['value']
-
- def name(self):
- "Returns the name of the property."
- return Property.name(self)
-
- def value_type(self):
- return Property.value_type(self)
-
- def fmttype(self, v=None):
- "Gets or sets the FMTYPE parameter."
- if v!= None:
- self['FMTTYPE']=v
- else:
- return self['FMTTYPE']
-
diff --git a/libical/src/python/Duration.py b/libical/src/python/Duration.py
deleted file mode 100644
index e6c642a8f7..0000000000
--- a/libical/src/python/Duration.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Duration.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#===============================================================
-
-from LibicalWrap import *
-from Property import Property
-from types import DictType, StringType, IntType
-
-class Duration(Property):
- """
- Represent a length of time, like 3 minutes, or 6 days, 20 seconds.
-
-
- """
-
- def __init__(self, arg, name="DURATION"):
- """
- Create a new duration from an RFC2445 string or number of seconds.
- Construct the duration from an iCalendar string or a number of seconds.
-
- Duration("P3DT2H34M45S") Construct from an iCalendar string
- Duration(3660) Construct from seconds
- """
-
- self.dur = None
-
- e=icalerror_supress("MALFORMEDDATA")
-
- if isinstance(arg, DictType):
-
- self.dur = icaldurationtype_from_string(arg['value'])
- Property.__init__(self,ref=arg['ref'])
- else:
- if isinstance(arg, StringType):
- self.dur = icaldurationtype_from_string(arg)
- elif isinstance(arg, IntType):
- self.dur = icaldurationtype_from_int(arg)
- elif isinstance(arg,Duration):
- self.dur = arg.dur
- else:
- self.dur = icaldurationtype_null_duration()
-
- Property.__init__(self,type=name)
-
- icalerror_restore("MALFORMEDDATA",e)
-
- if self.dur == None or icaldurationtype_is_null_duration(self.dur):
- raise Property.ConstructorFailedError("Failed to construct Duration from " +str(arg))
-
- try:
- self._update_value()
- except Property.UpdateFailedError:
- raise Property.ConstructorFailedError("Failed to construct Duration from " + str(arg))
-
- def _update_value(self):
-
- self.value(icaldurationtype_as_ical_string(self.dur),"DURATION")
-
- def valid(self):
- "Return true if this is a valid duration"
-
- return not icaldurationtype_is_null_duration(self.dur)
-
- def seconds(self,v=None):
- """Return or set duration in seconds"""
- if(v != None):
- self.dur = icaldurationtype_from_int(v);
- self.dict['value'] = icaltimedurationtype_as_ical_string(self.dur)
- return icaldurationtype_as_int(self.dur)
diff --git a/libical/src/python/Error.py b/libical/src/python/Error.py
deleted file mode 100644
index 912553d14e..0000000000
--- a/libical/src/python/Error.py
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-class LibicalError(Exception):
- "Libical Error"
-
- def __init__(self,str):
- Exception.__init__(self,str)
-
- def __str__(self):
- return Exception.__str__(self)+"\nLibical errno: "+icalerror_perror()
diff --git a/libical/src/python/Gauge.py b/libical/src/python/Gauge.py
deleted file mode 100644
index ec859055fb..0000000000
--- a/libical/src/python/Gauge.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Gauge.py
-# CREATOR: mtearle
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-from Error import LibicalError
-from Component import Component
-
-class Gauge:
- """
- Base class for gauge
- """
-
- class ConstructorFailedError(LibicalError):
- "Failed to create a Guage "
-
- class CloneFailedError(LibicalError):
- "Failed to clone a component given Gauge "
-
- class CompareFailedError(LibicalError):
- "Failed to compare a component given Gauge "
-
- def __init__(self,ref=None,sql=None,expand=0):
- if ref != None:
- self._ref = ref
- elif sql != None:
- s = str(sql)
- self._ref = icalgauge_new_from_sql(s,expand)
- else:
- Gauge.ConstructorFailedError("No SQL Specified")
-
- def __del__(self):
- if self._ref != None:
- icalgauge_free(self._ref)
- self._ref = None
-
- def ref(self):
- return self._ref
-
- def compare(self, comp):
- if not isinstance(comp,Component):
- raise Gauge.CompareFailedError("Argument is not a component")
-
- if comp.ref() == None:
- raise Gauge.CompareFailedError("Argument is not a component")
-
- return icalgauge_compare(self._ref, comp.ref())
-
- # Pending Implementation
- #def as_sql_string(self):
- # return self.__str__()
-
- #def __str__(self):
- # return icalgauge_as_sql(self._ref)
-
- #def clone(self, comp):
-# if not isinstance(comp,Component):
-# raise Gauge.CloneFailedError("Argument is not a component")
-#
-# comp_ref = icalgauge_new_clone(self._ref, comp)
-#
-# if comp_ref == None:
-# return None
-#
-# return Component(ref=comp_ref)
diff --git a/libical/src/python/Libical.py b/libical/src/python/Libical.py
deleted file mode 100644
index 9cf5076520..0000000000
--- a/libical/src/python/Libical.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Libical.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from Component import Component, NewComponent, Event, Todo, Journal
-from Property import Property, RecurrenceSet, test_enum
-from Time import Time
-from Period import Period
-from Duration import Duration
-from Attendee import Attendee, Organizer
-from DerivedProperties import RDate, Trigger,Recurrence_Id, Attach
-from Store import Store, FileStore
-from Gauge import Gauge
diff --git a/libical/src/python/LibicalWrap.i b/libical/src/python/LibicalWrap.i
deleted file mode 100644
index bf3e19c1d9..0000000000
--- a/libical/src/python/LibicalWrap.i
+++ /dev/null
@@ -1,453 +0,0 @@
-/* -*- 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 LibicalWrap
-
-
-%{
-#include "ical.h"
-#include "icalss.h"
-
-#include <sys/types.h> /* for size_t */
-#include <time.h>
-
-%}
-
-
-#include "fcntl.h" /* For Open flags */
-
-typedef void icalcomponent;
-typedef void icalproperty;
-
-icalcomponent* icalparser_parse_string(char* str);
-
-
-/* actually takes icalcomponent_kind */
-icalcomponent* icalcomponent_new(int kind);
-icalcomponent* icalcomponent_new_clone(icalcomponent* component);
-icalcomponent* icalcomponent_new_from_string(char* str);
-
-const char* icalcomponent_kind_to_string(int kind);
-int icalcomponent_string_to_kind(const char* string);
-
-
-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,
- int kind);
-icalproperty* icalcomponent_get_next_property(icalcomponent* component,
- int kind);
-
-icalcomponent* icalcomponent_get_current_component (icalcomponent* component);
-
-icalcomponent* icalcomponent_get_first_component(icalcomponent* component,
- int kind);
-icalcomponent* icalcomponent_get_next_component(icalcomponent* component,
- int kind);
-
-void icalcomponent_add_property(icalcomponent* component,
- icalproperty* property);
-
-void icalcomponent_remove_property(icalcomponent* component,
- icalproperty* property);
-
-
-void icalcomponent_add_component(icalcomponent* parent,
- icalcomponent* child);
-
-void icalcomponent_remove_component(icalcomponent* parent,
- icalcomponent* child);
-
-icalcomponent* icalcomponent_get_inner(icalcomponent* comp);
-
-icalcomponent* icalcomponent_get_parent(icalcomponent* component);
-int icalcomponent_isa(icalcomponent* component);
-
-int icalrestriction_check(icalcomponent* comp);
-
-/* 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);
-const char* icalproperty_get_parameter_as_string(icalproperty* prop,
- const char* name);
-void icalproperty_remove_parameter_by_name(icalproperty* prop,
- const char *name);
-
-void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char * kind);
-
-const char* icalproperty_get_value_as_string(icalproperty* prop);
-icalcomponent* icalproperty_get_parent(icalproperty* property);
-
-const char* icalproperty_kind_to_string(int kind);
-int icalproperty_string_to_kind(const char* string);
-int icalproperty_string_to_enum(const char* str);
-int icalproperty_enum_belongs_to_property(int kind, int e);
-int icalproperty_kind_to_value_kind(int kind);
-
-/* Deal with X properties */
-
-void icalproperty_set_x_name(icalproperty* prop, const char* name);
-const char* icalproperty_get_x_name(icalproperty* prop);
-
-/* Return the name of the property -- the type name converted to a
- string, or the value of _get_x_name if the type is and X property */
-const char* icalproperty_get_name (const icalproperty* prop);
-
-
-int icalerror_supress(const char* error);
-void icalerror_restore(const char* error, int es);
-char* icalerror_perror();
-void icalerror_clear_errno(void);
-
-
-const char* icalvalue_kind_to_string(int kind);
-int icalvalue_string_to_kind(const char* str);
-
-char* icalparameter_as_ical_string(icalparameter* parameter);
-
-const char* icalparameter_kind_to_string(int kind);
-int icalparameter_string_to_kind(const char* string);
-
-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);*/
-int icalrecur_expand_recurrence(char* rule, int start,
- int count, time_t* array);
-
-
-/* Iterate through properties, components and parameters 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);
-
-icalparameter* icallangbind_get_first_parameter(icalproperty *prop);
-
-icalparameter* icallangbind_get_next_parameter(icalproperty *prop);
-
-
-/* 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);
-
-int icallangbind_string_to_open_flag(const char* str);
-
-const char* icallangbind_quote_as_ical(const char* str);
-
-/***********************************************************************
- Time routines
-***********************************************************************/
-
-
-struct icaltimetype
-{
- int year;
- int month;
- int day;
- int hour;
- int minute;
- int second;
-};
-
-
-/* Convert seconds past UNIX epoch to a timetype*/
-struct icaltimetype icaltime_from_timet(int v, int is_date);
-
-/** Convert seconds past UNIX epoch to a timetype, using timezones. */
-struct icaltimetype icaltime_from_timet_with_zone(int tm,
- int is_date, icaltimezone *zone);
-
-/* 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 tt);
-
-/* 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 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);
-
-/** @brief Return the timezone */
-const icaltimezone *icaltime_get_timezone(const struct icaltimetype t);
-
-/** @brief Return the tzid, or NULL for a floating time */
-char *icaltime_get_tzid(const struct icaltimetype t);
-
-/** @brief Set the timezone */
-struct icaltimetype icaltime_set_timezone(struct icaltimetype *t,
- const icaltimezone *zone);
-
-/* Returns true if time is of DATE type, false if DATE-TIME */
-int icaltime_is_date(struct icaltimetype t);
-
-/* Returns true if time is relative to UTC zone */
-int icaltime_is_utc(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 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);
-
-/** convert tt, of timezone tzid, into a utc time. Does nothing if the
- time is already UTC. */
-struct icaltimetype icaltime_convert_to_zone(struct icaltimetype tt,
- icaltimezone *zone);
-
-
-
-/***********************************************************************
- 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);
-
-/***********************************************************************
- * timezone handling routines
-***********************************************************************/
-
-/** Returns a single builtin timezone, given its Olson city name. */
-icaltimezone* icaltimezone_get_builtin_timezone (const char *location);
-
-/** Returns the UTC timezone. */
-icaltimezone* icaltimezone_get_utc_timezone (void);
-
-/***********************************************************************
- Storage Routines
-***********************************************************************/
-
-/**
- * @brief options for opening an icalfileset.
- *
- * These options should be passed to the icalset_new() function
- */
-
-struct icalfileset_options {
- int flags; /**< flags for open() O_RDONLY, etc */
- mode_t mode; /**< file mode */
- icalcluster *cluster; /**< use this cluster to initialize data */
-};
-
-icalset* icalfileset_new(const char* path);
-icalset* icalfileset_new_reader(const char* path);
-icalset* icalfileset_new_writer(const char* path);
-
-icalset* icalfileset_init(icalset *set, const char *dsn, void* options);
-
-/* icalfileset* icalfileset_new_from_cluster(const char* path, icalcluster *cluster); */
-
-icalcluster* icalfileset_produce_icalcluster(const char *path);
-
-void icalfileset_free(icalset* cluster);
-
-const char* icalfileset_path(icalset* cluster);
-
-/* Mark the cluster as changed, so it will be written to disk when it
- is freed. Commit writes to disk immediately. */
-void icalfileset_mark(icalset* set);
-icalerrorenum icalfileset_commit(icalset* set);
-
-icalerrorenum icalfileset_add_component(icalset* set,
- icalcomponent* child);
-
-icalerrorenum icalfileset_remove_component(icalset* set,
- icalcomponent* child);
-
-int icalfileset_count_components(icalset* set,
- int kind);
-
-/**
- * Restrict the component returned by icalfileset_first, _next to those
- * that pass the gauge. _clear removes the gauge
- */
-icalerrorenum icalfileset_select(icalset* set, icalgauge* gauge);
-
-/** clear the gauge **/
-void icalfileset_clear(icalset* set);
-
-/** Get and search for a component by uid **/
-icalcomponent* icalfileset_fetch(icalset* set, const char* uid);
-int icalfileset_has_uid(icalset* set, const char* uid);
-icalcomponent* icalfileset_fetch_match(icalset* set, icalcomponent *c);
-
-
-/**
- * Modify components according to the MODIFY method of CAP. Works on the
- * currently selected components.
- */
-icalerrorenum icalfileset_modify(icalset* set,
- icalcomponent *oldcomp,
- icalcomponent *newcomp);
-
-/* Iterate through components. If a gauge has been defined, these
- will skip over components that do not pass the gauge */
-
-icalcomponent* icalfileset_get_current_component (icalset* cluster);
-icalcomponent* icalfileset_get_first_component(icalset* cluster);
-icalcomponent* icalfileset_get_next_component(icalset* cluster);
-
-/* External iterator for thread safety */
-icalsetiter icalfileset_begin_component(icalset* set, int kind, icalgauge* gauge);
-icalcomponent * icalfilesetiter_to_next(icalset* set, icalsetiter *iter);
-icalcomponent* icalfileset_form_a_matched_recurrence_component(icalsetiter* itr);
-
-/***********************************************************************
- Gauge Routines
-***********************************************************************/
-
-icalgauge* icalgauge_new_from_sql(char* sql, int expand);
-
-int icalgauge_get_expand(icalgauge* gauge);
-
-void icalgauge_free(icalgauge* gauge);
-
-/* Pending Implementation */
-/* char* icalgauge_as_sql(icalcomponent* gauge); */
-
-void icalgauge_dump(icalgauge* gauge);
-
-
-/** @brief Return true if comp matches the gauge.
- *
- * The component must be in
- * cannonical form -- a VCALENDAR with one VEVENT, VTODO or VJOURNAL
- * sub component
- */
-int icalgauge_compare(icalgauge* g, icalcomponent* comp);
-
-/* Pending Implementation */
-/** Clone the component, but only return the properties
- * specified in the gauge */
-/* icalcomponent* icalgauge_new_clone(icalgauge* g, icalcomponent* comp); */
-
-
diff --git a/libical/src/python/Makefile.am b/libical/src/python/Makefile.am
deleted file mode 100644
index e221fa91c1..0000000000
--- a/libical/src/python/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-
-lib_LTLIBRARIES = libLibicalWrap.la
-
-libLibicalWrap_la_SOURCES = LibicalWrap.c
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src \
- -I$(top_srcdir)/src/libical \
- -I$(top_builddir)/src/libical \
- -I$(top_srcdir)/src/libicalss \
- $(PY_CFLAGS)
-
-LDADD = ../libical/libical.la ../libicalss/libicalss.la
-
-all: LibicalWrap.so
-
-LibicalWrap.c: LibicalWrap.i
- swig -python -o LibicalWrap.c LibicalWrap.i
-
-# This part should be done with libtool, but I don't know how to do
-# it. Libtool needs to generate a shared library in this directory
-# regardless of the value of AM_DISABLE_SHARED
-LibicalWrap.so: LibicalWrap.c
- ld -shared -o LibicalWrap.so LibicalWrap.o ../libical/.libs/libical.a ../libicalss/.libs/libicalss.a
-
-CLEANFILES = LibicalWrap.c LibicalWrap_wrap.doc Libical.pyc LibicalWrap.so
-
-EXTRA_DIST = \
-Libical.py \
-LibicalWrap.i \
-python-binding.txt \
-test.py \
-Attendee.py \
-Collection.py \
-Component.py \
-DerivedProperties.py \
-Duration.py \
-Error.py \
-Gauge.py \
-Period.py \
-Property.py \
-Store.py \
-Time.py \
-ChangeLog
-
-
diff --git a/libical/src/python/Period.py b/libical/src/python/Period.py
deleted file mode 100644
index e8d9b3ed40..0000000000
--- a/libical/src/python/Period.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Period.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#===========================================================
-
-from LibicalWrap import *
-from Property import Property
-from types import DictType, StringType, IntType
-from Time import Time
-from Duration import Duration
-
-class Period(Property):
- """Represent a span of time"""
- def __init__(self,arg,name='FREEBUSY'):
- """ """
-
- Property.__init__(self, type = name)
-
- self.pt=None
-
- #icalerror_clear_errno()
- e1=icalerror_supress("MALFORMEDDATA")
- e2=icalerror_supress("BADARG")
-
- if isinstance(arg, DictType):
-
-
- es=icalerror_supress("MALFORMEDDATA")
- self.pt = icalperiodtype_from_string(arg['value'])
- icalerror_restore("MALFORMEDDATA",es)
-
- Property.__init__(self, ref=arg['ref'])
- else:
- if isinstance(arg, StringType):
-
- self.pt = icalperiodtype_from_string(arg)
-
- else:
- self.pt = icalperiodtype_null_period()
-
- Property.__init__(self,type=name)
-
- icalerror_restore("MALFORMEDDATA",e1)
- icalerror_restore("BADARG",e2)
-
-
- if self.pt == None or icalperiodtype_is_null_period(self.pt):
- raise Property.ConstructorFailedError("Failed to construct Period")
-
-
- try:
- self._update_value()
- except Property.UpdateFailedError:
- raise Property.ConstructorFailedError("Failed to construct Period")
-
- def _end_is_duration(self):
- dur = icalperiodtype_duration_get(self.pt)
- if not icaldurationtype_is_null_duration(dur):
- return 1
- return 0
-
- def _end_is_time(self):
- end = icalperiodtype_end_get(self.pt)
- if not icaltime_is_null_time(end):
- return 1
- return 0
-
- def _update_value(self):
-
- self.value(icalperiodtype_as_ical_string(self.pt),"PERIOD")
-
-
- def valid(self):
- "Return true if this is a valid period"
-
- return not icalperiodtype_is_null_period(self.dur)
-
- def start(self,v=None):
- """
- 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
- """
-
- if(v != None):
- if isinstance(t,Time):
- t = v
- elif isinstance(t,StringType) or isinstance(t,IntType):
- t = Time(v,"DTSTART")
- else:
- raise TypeError
-
- icalperiodtype_start_set(self.pt,t.tt)
-
- self._update_value()
-
-
- return Time(icaltime_as_timet(icalperiodtype_start_get(self.pt)),
- "DTSTART")
-
- def end(self,v=None):
- """
- 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. """
-
- if(v != None):
-
- if isinstance(t,Time):
- t = v
- elif isinstance(t,StringType) or isinstance(t,IntType):
- t = Time(v)
- else:
- raise TypeError
-
- if(self._end_is_duration()):
- start = icaltime_as_timet(icalperiodtype_start_get(self.pt))
- dur = t.utc_seconds()-start;
- icalperiodtype_duration_set(self.pt,
- icaldurationtype_from_int(dur))
- else:
- icalperiodtype_end_set(self.pt,t.tt)
-
- self._update_value()
-
- if(self._end_is_time()):
- rt = Time(icaltime_as_timet(icalperiodtype_end_get(self.pt)),
- 'DTEND')
- rt.timezone(self.timezone())
- return rt
- elif(self._end_is_duration()):
- start = icaltime_as_timet(icalperiodtype_start_get(self.pt))
- dur = icaldurationtype_as_int(icalperiodtype_duration_get(self.pt))
- rt = Time(start+dur,'DTEND')
- rt.timezone(self.timezone())
- return rt
- else:
- return Time({},'DTEND')
-
-
-
- def duration(self,v=None):
- """
- 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. """
-
- if(v != None):
-
- if isinstance(t,Duration):
- d = v
- elif isinstance(t,StringType) or isinstance(t,IntType):
- d = Duration(v)
- else:
- raise TypeError
-
- if(self._end_is_time()):
- start = icaltime_as_timet(icalperiodtype_start_get(self.pt))
- end = start + d.seconds()
-
- icalperiodtype_end_set(self.pt,icaltime_from_timet(end,0))
- else:
- icalperiodtype_duration_set(self.pt,d.dur)
-
- if(self._end_is_time()):
- start =icaltime_as_timet(icalperiodtype_start_get(self.pt))
- end = icaltime_as_timet(icalperiodtype_end_get(self.pt))
-
- print "End is time " + str(end-start)
-
- return Duration(end-start,"DURATION")
-
- elif(self._end_is_duration()):
- dur = icaldurationtype_as_int(
- icalperiodtype_duration_get(self.pt))
-
- return Duration(dur,"DURATION")
- else:
-
-
- return Duration(0,"DURATION")
-
-
- def timezone(self,v=None):
- """ Return or set the timezone string for this time """
- if (v != None):
- self['TZID'] = v
- return self['TZID']
diff --git a/libical/src/python/Property.py b/libical/src/python/Property.py
deleted file mode 100644
index 80c5864855..0000000000
--- a/libical/src/python/Property.py
+++ /dev/null
@@ -1,268 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Property.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-import re
-import base64
-from string import index, upper, split
-from types import StringType
-
-#def icalerror_supress(arg):
-# pass
-
-#def icalerror_restore(a,b):
-# pass
-
-def error_type():
- error = icalerror_perror()
- return error[:index(error,':')]
-
-def test_enum(prop,enum):
-
- kind = icalproperty_string_to_kind(prop)
- e = icalproperty_string_to_enum(enum)
-
- t = icalproperty_enum_belongs_to_property(kind,e)
-
- if t == 1:
- return 1
-
- return None
-
-
-class Property:
- """ Represent any iCalendar Property.
-
- Usage:
- Property(dict)
-
- Where:
- dict is a dictionary with keys of 'name', 'value_type', and 'value'.
- In addition, parameter:parameter value entries may be included.
- """
-
- class ConstructorFailedError(Exception):
- "Failed to construct a property"
-
- class UpdateFailedError(Exception):
- "Failed to update the value of a property"
-
-
- def __init__(self, type = None, ref = None):
-
-
- assert(ref == None or isinstance(ref,StringType))
- assert(type == None or isinstance(type,StringType))
-
- self._ref = None
-
- if ref != None:
- self._ref = ref
- elif type != None:
- kind = icalproperty_string_to_kind(type)
- self._ref = icalproperty_new(kind)
-
- if type.find("X-") == 0:
- icalproperty_set_x_name(self._ref, type)
-
- if self._ref == None or self._ref == 'NULL':
- raise Property.ConstructorFailedError("Failed to construct Property")
-
- self._deleted = 0;
-
-
- # Initialize all of the required keys
-
-
- def __del__(self):
-
- self._deleted = 1;
-
- if not self._deleted and \
- self.ref() and \
- icalproperty_get_parent(self.ref()) == 'NULL':
-
- icalproperty_free(self.ref())
-
- def name(self,v=None):
- """ Return the name of the property """
- return icalproperty_get_name(self._ref)
-
- def ref(self,v=None):
- """ Return the internal reference to the libical icalproperty """
- if(v != None):
-
- if not self._deleted and self._ref and \
- icalproperty_get_parent(self._ref) == 'NULL':
-
- icalproperty_free(self._ref)
-
- self._ref = v
-
- return self._ref
-
-
- def value(self,v=None, kind = None):
- """ Return the RFC2445 representation of the value """
-
- if(v != None):
-
- if kind != None:
- # Get the default kind of value for this property
- default_kind = icalvalue_kind_to_string(icalproperty_kind_to_value_kind(icalproperty_string_to_kind(self.name())))
-
- if(kind != default_kind):
- self.__setitem__('VALUE',kind)
- vt = kind
- elif self.__getitem__('VALUE'):
- vt = self.__getitem__('VALUE')
- print "###########", self
- else:
- vt = 'NO' # Use the kind of the existing value
-
-
- icalerror_clear_errno()
-
- #e1=icalerror_supress("MALFORMEDDATA")
- if (self.name().find("X-") == 0) and type(v) is StringType:
- v = icallangbind_quote_as_ical(v)
- v = icallangbind_quote_as_ical(v)
-
- icalproperty_set_value_from_string(self._ref,str(v),vt)
- #icalerror_restore("MALFORMEDDATA",e1)
-
- if error_type() != "NO":
- raise Property.UpdateFailedError(error_type())
-
- s = icalproperty_get_value_as_string(self._ref)
-
- return icalproperty_get_value_as_string(self._ref)
-
- def parameters(self):
- """
- Return a list of parameters
- """
-
- params = []
-
- p = icallangbind_get_first_parameter(self._ref)
-
- while p != None:
- kv = split(icalparameter_as_ical_string(p),'=',2)
- params.append(kv[0])
- p = icallangbind_get_next_parameter(self._ref)
-
- return params
-
- def as_ical_string(self):
- "Return the property in iCalendar text format."
- return icalproperty_as_ical_string(self._ref)
-
- def __getitem__(self,key):
- """ Return property values by name """
- key = upper(key)
- str = icalproperty_get_parameter_as_string(self._ref,key)
-
- if(str == 'NULL'): return None
-
- return str
-
- def __setitem__(self,key,value):
- """ Set Property Values by Name """
- key = upper(key)
-
- icalproperty_set_parameter_from_string(self._ref,key,value)
-
- return self.__getitem__(key)
-
- def __delitem__(self,key):
- """ Remove Property Values by Name """
- key = upper(key)
-
- if self.__getitem__(key):
- icalproperty_remove_parameter_by_name(self._ref,key)
-
- def __str__(self):
-
- str = self.as_ical_string()
- return re.sub('\r?\n ?','',str)
-
- def __cmp__(self, other):
- s_str = str(self)
- o_str = str(other)
-
- return cmp(s_str,o_str)
-
-
-class RecurrenceSet:
- """
- Represents a set of event occurrences. This
- class controls a component's RRULE, EXRULE, RDATE and EXDATE
- properties and can produce from them a set of occurrences.
- """
-
- def __init__(self):
- pass
-
- def include(self, **params):
- """
- 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.
-
- """
- pass
-
- def exclude(self, **params):
- """
- 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.
-
- """
- pass
-
- def occurrences(self, count=None):
- """
- Return 'count' occurrences as a tuple of Time instances.
- """
- pass
-
-
diff --git a/libical/src/python/Store.py b/libical/src/python/Store.py
deleted file mode 100644
index 00b5b0c2d0..0000000000
--- a/libical/src/python/Store.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Store.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-from Error import LibicalError
-from Component import Component, CloneComponent
-from Gauge import Gauge
-
-class Store:
- """
- Base class for several component storage methods
- """
-
- class AddFailedError(LibicalError):
- "Failed to add a property to the file store"
-
- class ConstructorFailedError(LibicalError):
- "Failed to create a Store "
-
- def __init__(self):
- pass
-
- def path(self):
- pass
-
- def mark(self):
- pass
-
- def commit(self):
- pass
-
- def add_component(self, comp):
- pass
-
- def remove_component(self, comp):
- pass
-
- def count_components(self, kind):
- pass
-
- def select(self, gauge):
- pass
-
- def clearSelect(self):
- pass
-
- def fetch(self, uid):
- pass
-
- def fetchMatch(self, comp):
- pass
-
- def modify(self, oldc, newc):
- pass
-
- def current_component(self):
- pass
-
- def first_component(self):
- pass
-
- def next_component(self):
- pass
-
-
-class FileStore(Store):
-
- def __init__(self, file):
- e1=icalerror_supress("FILE")
- self._ref = icalfileset_new(file)
- icalerror_restore("FILE",e1)
-
- if self._ref == None or self._ref == 'NULL':
- raise Store.ConstructorFailedError(file)
-
- def __del__(self):
- icalfileset_free(self._ref)
-
- def path(self):
- return icalfileset_path(self._ref)
-
- def mark(self):
- icalfileset_mark(self._ref)
-
- def commit(self):
- icalfileset_commit(self._ref)
-
- def add_component(self, comp):
- if not isinstance(comp,Component):
- raise Store.AddFailedError("Argument is not a component")
-
- error = icalfileset_add_component(self._ref,comp.ref())
-
- def remove_component(self, comp):
- if not isinstance(comp,Component):
- raise Store.AddFailedError("Argument is not a component")
-
- error = icalfileset_remove_component(self._ref,comp.ref())
-
- def count_components(self, kind):
- _kind = icalcomponent_string_to_kind(kind)
-
- return icalfileset_count_components(self._ref, _kind)
-
- def select(self, gauge):
- error = icalfileset_select(self._ref, gauge.ref())
-
- def clearSelect(self):
- icalfileset_clear(self._ref)
-
- def fetch(self, uid):
- comp_ref = icalfileset_fetch(self._ref, uid)
-
- if comp_ref == None:
- return None
-
- return CloneComponent(comp_ref)
-
- def fetchMatch(self, comp):
- if not isinstance(comp,Component):
- raise Store.AddFailedError("Argument is not a component")
-
- comp_ref = icalfileset_fetch_match(self._ref,comp.ref())
-
- if comp_ref == None:
- return None
-
- return CloneComponent(comp_ref)
-
- def modify(self, oldc, newc):
- pass
-
- def current_component(self):
- comp_ref = icalfileset_get_current_component(self._ref)
-
- if comp_ref == None:
- return None
-
- return CloneComponent(comp_ref)
-
- def first_component(self):
- comp_ref = icalfileset_get_first_component(self._ref)
-
- if comp_ref == None:
- return None
-
- return CloneComponent(comp_ref)
-
- def next_component(self):
-
- comp_ref = icalfileset_get_next_component(self._ref)
-
- if comp_ref == None:
- return None
-
- return CloneComponent(comp_ref)
-
diff --git a/libical/src/python/Time.py b/libical/src/python/Time.py
deleted file mode 100644
index 673607d7b4..0000000000
--- a/libical/src/python/Time.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: Time.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-from LibicalWrap import *
-from Property import Property
-from types import DictType, StringType, IntType, FloatType
-from Duration import Duration
-
-class Time(Property):
- """ Represent iCalendar DATE, TIME and DATE-TIME """
- def __init__(self, arg, name="DTSTART", zone=None):
- """
- Create a new Time from a string or number of seconds past the
- POSIX epoch
-
- Time("19970325T123000Z") Construct from an iCalendar string
- Time(8349873494) Construct from seconds past POSIX epoch
-
- """
- e1=icalerror_supress("MALFORMEDDATA")
- e2=icalerror_supress("BADARG")
-
- if isinstance(arg, DictType):
- # Dictionary -- used for creating from Component
- self.tt = icaltime_from_string(arg['value'])
- Property.__init__(self, ref=arg['ref'])
- else:
- if isinstance(arg, StringType):
- # Create from an iCal string
- self.tt = icaltime_from_string(arg)
- elif isinstance(arg, IntType) or \
- isinstance(arg, FloatType):
- # Create from seconds past the POSIX epoch
- if zone:
- self.tt = icaltime_from_timet_with_zone(int(arg),0,icaltimezone_get_builtin_timezone(zone))
- else:
- self.tt = icaltime_from_timet_with_zone(int(arg),0,icaltimezone_get_utc_timezone())
- elif isinstance(arg, Time):
- # Copy an instance
- self.tt = arg.tt
- else:
- self.tt = icaltime_null_time()
-
- Property.__init__(self,type=name)
-
- icalerror_restore("MALFORMEDDATA",e1)
- icalerror_restore("BADARG",e2)
-
- if icaltime_is_null_time(self.tt):
- raise Property.ConstructorFailedError("Failed to construct a Time")
-
- try:
- self._update_value()
- except Property.UpdateFailedError:
- raise Property.ConstructorFailedError("Failed to construct a Time")
-
- def _update_value(self):
- self.tt = icaltime_normalize(self.tt)
- self.value(icaltime_as_ical_string(self.tt),"DATE-TIME")
-
- def valid(self):
- " Return true if this is a valid time "
- return not icaltime_is_null_time(self.tt)
-
- def utc_seconds(self,v=None):
- """ Return or set time in seconds past POSIX epoch"""
- if (v!=None):
- tz = icaltimezone_get_builtin_timezone(self.timezone())
- self.tt = icaltime_from_timet_with_zone(v,0,tz)
- self._update_value()
-
- return icaltime_as_timet(self.tt)
-
- def is_utc(self):
- """ Return a boolean indicating if time is in UTC """
- return icaltime_is_utc(self.tt)
-
- def is_date(self):
- """ Return a boolean indicating if time is actually a date """
- return icaltime_is_date(self.tt)
-
- def timezone(self,v=None):
- """ Return, set (if none) or alter the timezone for this time """
-
- origtz = icaltime_get_tzid(self.tt)
-
- if (v != None):
- assert(isinstance(v,StringType) )
- if (v == "UTC"):
- tz = icaltimezone_get_utc_timezone()
- del self['TZID']
- else:
- tz = icaltimezone_get_builtin_timezone(v)
-
- if not origtz:
- self.tt = icaltime_set_timezone(self.tt, tz)
- else:
- self.tt = icaltime_convert_to_zone(self.tt,tz)
-
- if (icaltime_get_tzid(self.tt) != "UTC"):
- self['TZID'] = icaltime_get_tzid(self.tt)
-
- self._update_value()
- return icaltime_get_tzid(self.tt)
-
- def second(self,v=None):
- """ Get or set the seconds component of this time """
- if(v != None):
- icaltimetype_second_set(self.tt,v)
- self._update_value()
- return icaltimetype_second_get(self.tt)
-
- def minute(self,v=None):
- """ Get or set the minute component of this time """
- if(v != None):
- icaltimetype_minute_set(self.tt,v)
- self._update_value()
- return icaltimetype_minute_get(self.tt)
-
- def hour(self,v=None):
- """ Get or set the hour component of this time """
- if(v != None):
- icaltimetype_hour_set(self.tt,v)
- self._update_value()
- return icaltimetype_hour_get(self.tt)
-
- def day(self,v=None):
- """ Get or set the month day component of this time """
- if(v != None):
- icaltimetype_day_set(self.tt,v)
- self._update_value()
- return icaltimetype_day_get(self.tt)
-
- def month(self,v=None):
- """ Get or set the month component of this time. January is month 1 """
- if(v != None):
- icaltimetype_month_set(self.tt,v)
- self._update_value()
- return icaltimetype_month_get(self.tt)
-
- def year(self,v=None):
- """ Get or set the year component of this time """
- if(v != None):
- icaltimetype_year_set(self.tt,v)
- self._update_value()
-
- return icaltimetype_year_get(self.tt)
-
-
- def __cmp__(self,other):
-
- if other == None:
- return cmp(self.utc_seconds(),None)
-
- return cmp(self.utc_seconds(),other.utc_seconds())
-
-
- def __add__(self,o):
-
- other = Duration(o,"DURATION")
-
- if not other.valid():
- return Duration(0,"DURATION")
-
- seconds = self.utc_seconds() + other.seconds()
-
- new = Time(seconds,self.name(),self.timezone())
-
- return new
-
- def __radd_(self,o):
- return self.__add__(o)
-
-
- def __sub__(self,o):
-
-
- if isinstance(o,Time):
- # Subtract a time from this time and return a duration
- seconds = self.utc_seconds() - other.utc_seconds()
- return Duration(seconds)
- elif isinstance(o,Duration):
- # Subtract a duration from this time and return a time
- other = Duration(o)
- if(not other.valid()):
- return Time()
-
- seconds = self.utc_seconds() - other.seconds()
- return Time(seconds)
- else:
- raise TypeError, "subtraction with Time reqires Time or Duration"
diff --git a/libical/src/python/littlefile.txt b/libical/src/python/littlefile.txt
deleted file mode 100644
index cba0891115..0000000000
--- a/libical/src/python/littlefile.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This is just a small file to test mime encoding.
-
-There isn't much here at all.
diff --git a/libical/src/python/python-binding.txt b/libical/src/python/python-binding.txt
deleted file mode 100644
index 7f925e246f..0000000000
--- a/libical/src/python/python-binding.txt
+++ /dev/null
@@ -1,434 +0,0 @@
-
-Classes for python binding to libical
-(Indentation indicates inheritance)
-
- Component
- Event
- JournalEntry
- Todo
- FreeBusy
- Timezone
- Alarm
- AudioAlarm
- EmailAlarm
- ProcedureAlarm
- DisplayAlarm
-
- Property
- Attendee
- Organizer
- Status
- Error
-
- Time
- Period
- Date
- RecurrenceSet
-
- Timezone
- TimezonePhase
-
- Store
- FileStore
- DirStore
- CAPStore
- HeapStore
- MySQLStore
-
-
-
-Component is the central class in the design. The component can be
-though of as a container for child components and properties, or as
-representation of a specific kind of iCal object. The first
-interface offers general property and component accessors, and the
-second treats some types of objects in a special way.
-
-The general interface offers simple manipulators for child property
-and components, and it only works with immediate children. So, given
-the Component:
-
- BEGIN:VCALENDAR
- METHOD:PUBLISH
- BEGIN:VEVENT
- BEGIN:VALARM
- COMMENT: An Alarm
- END:VALARM
- END:VEVENT
- END:VCALENDAR
-
-A caller would have to descend three levels to access the COMMENT
-property in the alarm, but only one to access the METHOD property.
-
-Libical is almost entirely dedicated to the general interface; it
-includes all of the *get_first_*, *_next_next_*, *_add_* and *_remove_*
-routines.
-
-The specific interface works with derived classes of Property and
-Component. In this interface, the caller could get the COMMENT in the
-alarm in the example in two steps. First the caller would ask the
-Event object for its alarms, then then the caller would ask the first
-Alarm object for its comment.
-
-The Specific interface is part of the
-derived classes of Component. This interface names all of the types of
-properties and components that can be accessed from the derived
-component type.
-
-In libical, the specific interface is primarily the "convenience
-routines in icalcomponent.h, such as:
-
-
- struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp);
- void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v);
-
- void icalcomponent_set_duration(icalcomponent* comp,
- struct icaldurationtype v);
- struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp);
-
-These routines are smarter and do more work than the general
-interface. From the general interface, you can set the DTEND
-property of a component by creating the property and adding it to a
-component. But, if the component already has a DURATION property, then
-this is an error -- a component can't have both.
-
-icalcomponent_set_dtend determines if the component already has a
-DURATION. If it does, it substracts the dtstart time from the new
-dtend time and sets the duration to that. Otherwise, it creates aor
-changes the DTEND.
-
-Also, icalcomponent_set_duration works the same regardless if the
-component is a VCALENDAR or a VEVENT. If it is a VCALENDAR, the
-routine descends into the VEVENT before making any changes. If it is
-allready a VEVENT ( or VTODO or VJOURNAL ) the routine just makes the
-changes. With icalcomponent_add_property, you need to do this check
-yourself.
-
-( There should probably be a class between Component
-and Event ,JournalEntry and Todo that names all of the properties and
-components. Then Event, JournalEntry and Todo would remove the
-accessors that did not apply to them. )
-
-Parameters are accessed as dictionaries from Property or as attributes
-of a derived class of Property. Both the names and the values of the
-parameters are strings.
-
-The Store hierarchy is a interface to various ways to store iCal
-components. Each of these has the same interface as its corresponding
-libical module:
-
- FileStore icalfileset Store iCal components in a single file
- DirStore icaldirset Use multiple files, one per month of
- DTSTART
- CAPStore Access components in a CAP server
- HeapStore Components stored in memory
- MySQLStore Components stored in a MySQL
- database.
-
-The only iCal value objects that will be implemented as Python classes
-are Time, Duration and Period. RecurrenceSet handles recurrence
-rules. It replaces the properties RRULE, RDATE, EXRULE and EXDATE.
-
-(Not all of the libical modules are implemented )
-
-
-How to Use the library
-----------------------
-
-The most common usecases will be something like this:
-
-1)Caller opens a Store object on a file, server or database. The
-caller retrieves one or more component. Some of the components will be
-booked on the user's calendar. Other components will be messages that
-other users have sent, like requests for meetings.
-
-2) The caller will use the Specific interface ( using methods specific
-to each property ) to example the component and decide what to do with
-it.
-
-3) Rarely, the caller will access the general interface to do things
-that the specific interface has not implemented or cannot manage
-well.
-
-4) Caller may create a new component, using a combination of the
-general and specific interfaces. The caller may send the message to
-another user via mail, or may submit it to the user's CAP server with
-the CAPStore class.
-
-
-Following are the methods in each of the classes.
-
-Component
- Construct from string
- Output string in ical form
-
- Get a Property by type
- Get a set of Properties by type
- Remove a Property by reference
-
- Get a Component by type
- Get a set of Components by type
- Remove a Component by reference
-
- Validate the component ( insert properties for errors )
- Count error properties
- Remove error properties
- Convert error properties into REQUEST-STATUS properties
-
-Event, JournalEntry, Todo
-
- Construct from string
- Output string in ical form
-
- There are get/set accessors for every property. These are
- listed in a later section
-
-
-FreeBusy
-
- Construct from string
- Construct from arguments
- Output string in ical form
-
- Accessors for the following properties. See below for return
- types for these properties:
-
- method
- prodid
- attendee
- dtstamp
- dtstart
- freebusy
- organizer
- uid
- comment
- contact
- request-status
- url
- duration
- sequence
-
-TimezonePhase
-
- Construct from string
- Construct from arguments
- Output string in ical form
-
- Accessors for the following properties. See below for return
- types for these properties:
-
- tzname
- offsetto
- offsetfrom
- rrule
- rdate
- comment
-
-TimeZone
-
- Construct from string
- Construct from arguments
- Output string in ical form
-
- Accessors for the following properties. See below for return
- types for these properties:
-
- tzid
- last-modified
- tzurl
- standard (returns TimezonePhase)
- daylight (returns TimezonePhase)
-
-
-Property
-
- Construct from string
- Construct from arguments
- Output string in ical form
-
- Dictionary access to parameters
-
- Get/set value
-
-Attendee
-
- Construct from string
- Construct from arguments
- Output string in ical form
-
- Access to the following properties and parameters:
- cuid
- cutype
- member
- role
- rsvp
- delto
- delfrom
- sentby
- cn
- dir
- language
-
-Organizer
-
- Access to the following properties:
- common_name
- dir
- sentby
- language
-
-
-Time
-Date
-Period
-
- Same interfaces as libical modules.
-
-RecurenceSet
- I don't know -- need to think about it more.
-
-Store
- Similar methods to the icalset modules.
-
-
-RFC2445 Properties
-
-This is a list of all of the RFC2445 properties and their associated
-VALUE type.
-
-
-Property Value
-----------------------------
-CALSCALE TEXT
-METHOD TEXT
-PRODID TEXT
-VERSION TEXT
-CATEGORIES TEXT
-CLASS TEXT
-COMMENT TEXT
-DESCRIPTION TEXT
-LOCATION TEXT
-PERCENT-COMPLETE INTEGER
-PRIORITY INTEGER
-RESOURCES TEXT
-STATUS STATUS
-SUMMARY TEXT
-COMPLETED DATE-TIME
-FREEBUSY PERIOD
-TRANSP TEXT
-TZNAME TEXT
-TZOFFSETFROM UTC-OFFSET
-TZOFFSETTO UTC-OFFSET
-TZURL URI
-TZID TEXT
-ATTENDEE CAL-ADDRESS
-CONTACT TEXT
-ORGANIZER CAL-ADDRESS
-RELATED-TO TEXT
-URL URI
-UID TEXT
-EXRULE RECUR
-RRULE RECUR
-ACTION TEXT
-REPEAT INTEGER
-CREATED DATE-TIME
-DTSTAMP DATE-TIME
-LAST-MODIFIED DATE-TIME
-SEQUENCE INTEGER
-X TEXT
-REQUEST-STATUS STRING
-ATTACH URL, BINARY
-GEO FLOAT
-DTEND DATE-TIME
-DUE DATE-TIME
-DTSTART DATE-TIME
-RECURRENCE-ID DATE-TIME
-EXDATE DATE-TIME
-RDATE DATE-TIME, PERIOD
-TRIGGER DATE-TIME, DURATION
-DURATION DURATION
-
-Some of the properties can appear multiple times in a component, other
-can appear only once. For a particular component, the number of times
-a property can apper may also change with the METHOD property
-associated with the component. This list shows which properties can
-appear multiple times for some ( but not all ) combinations of
-component type and METHOD value:
-
-ATTACH
-ATTENDEE
-CATEGORIES
-COMMENT
-CONTACT
-EXDATE
-EXRULE
-FREEBUSY
-NONE
-RDATE
-RELATEDTO
-REQUESTSTATUS
-RESOURCES
-RRULE
-TZNAME
-TZURL
-X
-
-
-This is a list of the value types and their associated python return
-types. A lowercased return type is a python builtin, and an
-uppercase-first-letter is a class in the library:
-
-
-Value Return Type
------------------------------------
-BINARY file
-BOOLEAN number
-CAL-ADDRESS string
-DATE Time
-DATE-TIME Time
-DURATION Duration
-FLOAT number
-GEO tuple
-INTEGER number
-METHOD string
-PERIOD Period
-RECUR RecurrenceSet
-TEXT string
-TIME Time
-URI string
-UTC-OFFSET number
-STATUS string
-X string
-
-
-I suspect that the Component class should use the three previous
-tables to create the property accessor methods on the fly. If the
-method generation system is general enough, we could also use it for
-other classes, such as Alarm, Timezone, Attendee, Organizer and
-Freebusy.
-
-
-Memory Handling
----------------
-
-One of the things that made the perl binding to libcal difficult was
-that if a Component (in perl) returns a reference to a child Component
-(in perl), the child Component (in perl) will contain a reference to a
-libical component. When the caller is done with the child component in
-perl, the caller just drops it and lets perl reclaim the memory.
-
-The destructor for Component needs to free the libical component that
-it holds a reference to, but the child's libical component is still
-being used by libical. So perl frees the libical component and later,
-libical tries to reference freed memory.
-
-The situation is actually a little better than that, because libical
-will throw an error when you try to free a component that is still
-attached to a parent.
-
-So, the perl library has to be able to determine when the destructor
-should free a libical component or not. The perl library calls
-icalcomponent_get_parent(), and if is it non-zero, it does not free
-the component.
-
-It is not hard, just more code, and something to watch out for.
-
diff --git a/libical/src/python/test.py b/libical/src/python/test.py
deleted file mode 100644
index 4047e78c95..0000000000
--- a/libical/src/python/test.py
+++ /dev/null
@@ -1,603 +0,0 @@
-#!/usr/bin/env python
-# -*- Mode: python -*-
-#======================================================================
-# FILE: test.py
-# CREATOR: eric
-#
-# DESCRIPTION:
-#
-#
-# $Id$
-# $Locker$
-#
-# (C) COPYRIGHT 2001, Eric Busboom <eric@softwarestudio.org>
-# (C) COPYRIGHT 2001, Patrick Lewis <plewis@inetarena.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of either:
-#
-# The LGPL as published by the Free Software Foundation, version
-# 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-#
-# Or:
-#
-# The Mozilla Public License Version 1.0. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#======================================================================
-
-import LibicalWrap
-from Libical import *
-
-def error_type():
- error = icalerror_perror()
- return error[:index(error,':')]
-
-comp_str = """
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//ABC Corporation//NONSGML My Product//EN
-METHOD:REQUEST
-BEGIN:VEVENT
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com
-COMMENT: When in the course of writting comments and nonsense text\, it
- becomes necessary to insert a newline
-DTSTART:19972512T120000
-DTSTART:19970101T120000Z
-DTSTART:19970101
-DURATION:P3DT4H25M
-FREEBUSY:19970101T120000/19970101T120000
-FREEBUSY:19970101T120000/PT3H
-FREEBUSY:19970101T120000/PT3H
-END:VEVENT
-END:VCALENDAR"""
-
-
-def test_property():
-
- print "--------------------------- Test Property ----------------------"
-
-
- liw = LibicalWrap
- icalprop = liw.icalproperty_new_from_string("ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com")
-
- print liw.icalproperty_as_ical_string(icalprop)
-
- p = Property(ref=icalprop)
-
- print p.name()
- print
- print "Parameters:"
- for param in p.parameters():
- print " ", param, " = ", p[param]
- print
- print p['ROLE']
-
- p['ROLE'] = 'INDIVIDUAL'
-
- print p['ROLE']
-
- p['ROLE'] = 'GROFROMBLATZ'
-
- print p['ROLE']
-
- print
-
- p['X-MAN-FAVOURITE'] = 'Wolverine'
- p['X-FILES-FAVOURITE'] = 'Mulder'
-
- print p['X-MAN-FAVOURITE']
-
- assert(p['X-MAN-FAVOURITE'] == 'Wolverine')
- assert(p['X-FILES-FAVOURITE'] == 'Mulder')
- assert(p['X-FILES-FAVOURITE'] != 'Scully')
-
- print p.value()
- p.value("mailto:Bob@bob.com")
- print p.value()
-
-
- print p.as_ical_string()
- del p['ROLE']
- del p['X-MAN-FAVOURITE']
-
- print p.as_ical_string()
-
-
- try:
- p = Property()
- except Property.ConstructorFailedError:
- pass
- else:
- assert(0)
-
- # X Property
- p = Property("X-COMMENT")
-
- p.value("This is a sentence, with punctuation; indeed: it is")
- print p
-
- p.value("This is not approved by the Ministry of Silly Walks")
- print p
-
-
- assert(test_enum('METHOD','PUBLISH'))
- assert(not test_enum('METHOD','FOO'))
-
- assert(test_enum('ACTION','AUDIO'))
- assert(not test_enum('ACTION','OPAQUE'))
-
-def test_time():
- "Test routine"
-
- print"-------------------Test Time --------------------------------"
-
- t = Time("19970325T123010Z",'DTSTART')
-
- assert(t.year() == 1997)
- assert(t.month() == 3)
- assert(t.day() == 25)
- assert(t.hour() == 12)
- assert(t.minute() == 30)
- assert(t.second() == 10)
- assert(t.is_utc())
- assert(not t.is_date())
-
- print t
-
- t.timezone("America/Los_Angeles")
- print str(t)
- print t.timezone()
- #assert(str(t)=='DTSTART;TZID=America/Los_Angeles:19970325T123010')
- assert(str(t)=='DTSTART;TZID=/softwarestudio.org/Olson_20010626_2/America/Los_Angeles:19970325T043010')
-
- t.second(t.second()+80)
-
- t.timezone("UTC")
- assert(t.minute() == 31)
- assert(t.second() == 30)
-
- d = Duration(3600,"DURATION")
- t2 = t + d
-
- print t2
- assert(t2.hour() == 13)
-
- t2 = t - d
-
- print t2
- assert(isinstance(t2,Time))
- assert(t2.hour() == 11)
-
- # test int args
- t = Time(2)
- print t
-
- # test float args
- t = Time(2.5)
- print t
-
-def test_period():
-
- print"-------------------Test Period--------------------------------"
-
- p = Period("19970101T180000Z/19970101T233000Z")
-
- print p
-
- assert(str(p) == 'FREEBUSY:19970101T180000Z/19970101T233000Z')
-
- print p.start()
- assert(str(p.start()) == 'DTSTART:19970101T180000Z')
-
- print p.end()
- assert(str(p.end()) == 'DTEND:19970101T233000Z')
-
- print p.duration()
- assert(str(p.duration()) == 'DURATION:PT5H30M')
- p = None
-
- p = Period("19970101T180000Z/PT5H30M")
- print p
-
- print p.start()
- assert(str(p.start()) == 'DTSTART:19970101T180000Z')
-
- print p.end()
- assert(str(p.end()) == 'DTEND:19970101T233000Z')
-
- print p.duration()
- assert(str(p.duration()) == 'DURATION:PT5H30M')
-
-
-def test_duration():
-
- print "-------------- Test Duration ----------------"
-
- # Ical string
-
- d = Duration("P3DT4H25M")
-
- print str(d)
-
- assert(str(d) == "DURATION:P3DT4H25M")
-
- print d.seconds()
-
- assert(d.seconds() == 275100)
-
- # seconds
-
- d = Duration(-275100)
-
- print str(d)
-
- assert(str(d) == "DURATION:-P3DT4H25M")
-
- print d.seconds()
-
- assert(d.seconds() == -275100)
-
- #error
-
- try:
- d = Duration("P10WT7M")
- print str(d)
- assert(0)
- except: pass
-
- try:
- d = Duration("Pgiberish")
- print str(d)
- assert(0)
- except:
- pass
-
-
-
-def test_attach():
-
- file = open('littlefile.txt')
- attachProp = Attach(file)
- file.close()
- attachProp.fmttype('text/ascii')
- print "\n" + attachProp.name()
- print attachProp.value_type()
- print attachProp.fmttype()
- attachProp['fmttype']=None
- print "Calling value()"
- print attachProp.value()
- print "Calling asIcalString()"
- print attachProp.as_ical_string()
-
-
-def test_component():
-
- print "------------------- Test Component ----------------------"
-
-
- c = NewComponent(comp_str);
-
- props = c.properties()
-
- for p in props:
- print p.as_ical_string()
-
- inner = c.components()[0]
-
- print inner
- print type(inner)
-
-
- props = inner.properties()
-
- for p in props:
- print p.as_ical_string()
-
- dtstart = inner.properties('DTSTART')[0]
-
- print dtstart
-
- print "\n Orig hour: ", dtstart.hour()
- assert(dtstart.hour() == 12)
-
- dtstart.hour(dtstart.hour() + 5)
-
- print "\n New hour: ", dtstart.hour()
- assert(dtstart.hour() == 17)
-
- attendee = inner.properties('ATTENDEE')[0]
-
- print attendee
-
- t = Time("20011111T123030")
- t.name('DTEND')
-
- inner.add_property(t)
-
-
- print c
-
- dtstart1 = inner.properties('DTSTART')[0]
- dtstart2 = inner.properties('DTSTART')[0]
- dtstart3 = inner.property('DTSTART')
-
- assert(dtstart1 is dtstart2)
- assert(dtstart1 == dtstart2)
-
- assert(dtstart1 is dtstart3)
- assert(dtstart1 == dtstart3)
-
-
- p = Property(type="SUMMARY");
- p.value("This is a summary")
-
- inner.properties().append(p)
-
- print inner.as_ical_string()
-
- p = inner.properties("SUMMARY")[0]
- assert(p!=None);
- print str(p)
- assert(str(p) == "SUMMARY:This is a summary")
-
- inner.properties()[:] = [p]
-
- print inner.as_ical_string()
-
- # test sequence
- event = Event()
-
- try:
- event.sequence("foo")
- except TypeError:
- pass
-
- event.sequence(-1)
- print event.sequence()
-
- event.sequence(1)
- event.sequence(88)
- print event.sequence()
-
-def test_event():
- print "------------ Event Class ----------------------"
-
- event = Event()
-
- event.method('REQUEST')
- event.version('2.0')
-
- event.created("20010313T123000Z")
- print "created =", event.created()
- assert (event.created() == Time("20010313T123000Z"))
-
- event.organizer("MAILTO:j_doe@nowhere.com")
- org = event.organizer()
- print org.cn()
- org.cn('Jane Doe')
- assert (isinstance(org, Organizer))
- print "organizer =", event.organizer()
- assert (event.organizer().value() == "MAILTO:j_doe@nowhere.com")
-
- event.dtstart("20010401T183000Z")
- print "dtstart =", event.dtstart()
- assert (event.dtstart()== Time("20010401T183000Z"))
-
- dtend = Time('20010401T190000Z', 'DTEND')
- event.dtend(dtend)
- assert (event.dtend() ==dtend )
- assert (event.dtend() == Time('20010401T190000Z'))
-
- att = Attendee()
- att.value('jsmith@nothere.com')
- event.attendees(('ef_hutton@listenup.com', att))
-
- event.x_properties('X-TEST',('foo', 'bar'))
- event.x_properties('X-TEST2',('foo, biz', 'bar, biz'))
-
- inner = event.components()[0]
- for e in inner.properties('X-TEST'):
- print " ", e.as_ical_string()
-
- assert(len(event.x_properties('X-TEST'))==2)
-
- event.description("A short description. Longer ones break things. Really. What does it break. The code is supposed to handle realy long lines, longer, in fact, than any sane person would create except by writting a random text generator or by excerpting text from a less sane person. Actually, it did \"break\" and I had to remove an \n assert to fix it.")
- event.status('TeNtAtIvE')
-
- print event.as_ical_string()
-
-
-def test_derivedprop():
-
- print "------------ Derived Properties -----------------"
-
- p = RDate("20011111T123030")
-
- print str(p)
-
-
- p = RDate("19970101T120000/19970101T123000")
-
- print str(p)
-
- try:
- p = RDate("P3DT4H25M")
- print str(p)
- assert(0)
- except: pass
-
-
- p = Trigger("P3DT4H25M")
-
- print str(p)
-
- p = Trigger("20011111T123030")
-
- print str(p)
-
- try:
- p = Trigger("19970101T120000/19970101T123000")
- print str(p)
- assert(0)
- except: pass
-
-def test_gauge():
- print "------------ Gauge -----------------"
- event = Event()
-
- event.method('REQUEST')
- event.version('2.0')
- event.created("20010313T123000Z")
- event.organizer("MAILTO:j_doe@nowhere.com")
- org = event.organizer()
- org.cn('Jane Doe')
- event.dtstart("20010401T183000Z")
- dtend = Time('20010401T190000Z', 'DTEND')
- event.dtend(dtend)
- event.description("A short description.")
- event.status('TeNtAtIvE')
-
- print event.as_ical_string()
-
- gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010401T180000Z'")
-
- assert(gauge.compare(event) == 1)
-
- gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010401T190000Z'")
-
- assert(gauge.compare(event) == 0)
-
-def do_test_store(storeobj=None, *args):
- assert(storeobj != None)
- store = storeobj(*args)
- assert(store != None)
-
- print ">------------ ",
- print store.__class__,
- print "Store -----------------"
-
-
- # create fileset
-
- event = Event()
-
- event.method('REQUEST')
- event.version('2.0')
- event.created("20010313T123000Z")
- event.organizer("MAILTO:j_doe@nowhere.com")
- event.dtstart("20010401T183000Z")
- event.duration('PT3H')
-
- event.description("A short description.")
-
- # for i = 1 to 10
- # copy event
- # munge uid and increment month
- for i in range(1,11):
- newevent = event.clone()
- newevent.uid("%d@localhost" % (i,))
- newevent.dtstart().month( newevent.dtstart().month() + i )
-
- #print ne
- store.add_component(newevent)
-
- # commit
- store.commit()
- assert(store.count_components("VCALENDAR") == 10)
- # free
- del(store)
-
- # open again
- store = storeobj(*args)
- # assert count of components = 10
- assert(store.count_components("VCALENDAR") == 10)
-
- # print them out
- # fetch by uid
- n7 = store.fetch("7@localhost")
- print n7
- # fetch by match
-
- n7m = store.fetchMatch(n7)
- assert(str(n7) == str(n7m))
-
- # modify in memory
- n7.uid("42@localhost")
- del(store)
- del(n7)
-
- store = storeobj(*args)
- assert(store.fetch("42@localhost") == None)
- n7 = store.fetch("7@localhost")
- n7.uid("42@localhost")
- store.mark()
- store.commit()
- del(store)
- store = storeobj(*args)
- assert(store.fetch("7@localhost") == None)
-
- # fetch by gauge
-
- gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010601T000000Z' AND DTSTART < '20010901T000000Z'")
-
- store.select(gauge)
-
- count = 0
-
- c = store.first_component()
- while c != None:
- print c.uid()
- print c.dtstart()
- print
- count = count + 1
- c = store.next_component()
-
- store.clearSelect()
-
- assert(count == 3)
-
- # remove all of them
- c = store.first_component()
- while c != None:
- print c.uid()
- store.remove_component(c)
- c = store.first_component()
-
- assert(store.count_components("VCALENDAR") == 0)
- store.commit()
- assert(store.count_components("VCALENDAR") == 0)
- # print them out
- # assert count of components = 0
-
-
-def test_store():
- print "------------ Store -----------------"
- do_test_store(FileStore,"filesetout.ics")
-
-def run_tests():
- test_property()
-
- test_time()
-
- test_period()
-
- test_component()
-
- test_duration()
-
- test_derivedprop()
-
- test_event()
-
- #test_attach()
-
- test_gauge()
-
- test_store()
-
-
-
-
-if __name__ == "__main__":
- run_tests()
-
diff --git a/libical/src/test/.cvsignore b/libical/src/test/.cvsignore
deleted file mode 100644
index eca96994ab..0000000000
--- a/libical/src/test/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
-copycluster
-regression
-parser
-storage
-stow
-recur
-testmime
-testvcal
-process
-testclassify
diff --git a/libical/src/test/2445.ics b/libical/src/test/2445.ics
deleted file mode 100644
index 71cf45e750..0000000000
--- a/libical/src/test/2445.ics
+++ /dev/null
@@ -1,326 +0,0 @@
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN
-BEGIN:VEVENT
-DTSTAMP:19970901T1300Z
-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
-DTSTAMP:19970901T130000Z
-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/test/2446.ics b/libical/src/test/2446.ics
deleted file mode 100644
index e69de29bb2..0000000000
--- a/libical/src/test/2446.ics
+++ /dev/null
diff --git a/libical/src/test/Makefile.am b/libical/src/test/Makefile.am
deleted file mode 100644
index e1824b064c..0000000000
--- a/libical/src/test/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-if WITH_CXX_BINDINGS
-cxx_inc=-DWITH_CXX_BINDINGS
-cxx_libs=../libical/libical-evolution_cxx.la
-regression_cxx = regression-cxx.cpp
-else
-cxx_inc=
-cxx_libs=
-regression_cxx =
-AM_CXX=@CC@
-endif
-
-if WITH_BDB4
-bdb4_inc=-DWITH_BDB -I@BDB_DIR@/include
-bdb4_libs=@BDB_DIR_LIB@/@BDB_LIB@
-else
-bdb4_inc=
-bdb4_libs=
-endif
-
-noinst_PROGRAMS = copycluster regression parser stow recur testmime testvcal process
-
-LDADD = ../libicalss/libicalss-evolution.la ../libicalvcal/libicalvcal-evolution.la $(cxx_libs) ../libical/libical-evolution.la $(bdb4_libs)
-
-LIBS = @PTHREAD_LIBS@
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/src \
- $(cxx_inc) $(bdb4_inc)
-
-TESTS=regression
-copycluster_SOURCES = copycluster.c
-regression_SOURCES = \
- regression.c \
- regression.h \
- regression-component.c \
- regression-classify.c \
- regression-utils.c \
- regression-recur.c \
- regression-storage.c \
- $(regression_cxx)
-
-parser_SOURCES = icaltestparser.c
-stow_SOURCES = stow.c
-testvcal_SOURCES = testvcal.c
-recur_SOURCES = recur.c
-testmime_SOURCES = testmime.c
-process_SOURCES = process.c
diff --git a/libical/src/test/copycluster.c b/libical/src/test/copycluster.c
deleted file mode 100644
index 6894de9d36..0000000000
--- a/libical/src/test/copycluster.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: copycluster.c
- CREATOR: eric 15 January 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#include <stdio.h> /* for printf */
-#include <errno.h>
-#include <string.h> /* For strerror */
-#include <signal.h> /* for signal */
-#include <unistd.h> /* for alarm */
-#include <stdlib.h> /* for exit */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-
-static void sig_alrm(int i){
- fprintf(stderr,"Could not get lock on file\n");
- exit(1);
-}
-/* This program copies a file that holds iCal components to an other file. */
-
-
-void usage(char* arg0) {
- printf("usage: %s cluster-file1 cluster-file2\n",arg0);
-}
-
-int main(int c, char *argv[]){
-
- icalset *clusterin, *clusterout;
- icalcomponent *itr;
- int count=0;
- int tostdout = 0;
-
- if(c < 2 || c > 3){
- usage(argv[0]);
- exit(1);
- }
-
- if (c == 2){
- tostdout = 1;
- }
-
-
- /*icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL);*/
-
- signal(SIGALRM,sig_alrm);
-
- alarm(10);
- clusterin = icalfileset_new(argv[1]);
- alarm(0);
-
- if (clusterin == 0){
- printf("Could not open input cluster \"%s\"\n",argv[1]);
- if(icalerrno!= ICAL_NO_ERROR){
- printf("Error: %s\n",icalerror_strerror(icalerrno));
- }
- exit(1);
- }
-
- if (!tostdout){
- alarm(10);
- clusterout = icalfileset_new(argv[2]);
- alarm(0);
- if (clusterout == 0){
- printf("Could not open output cluster \"%s\"\n",argv[2]);
- exit(1);
- }
- }
-
-
- for (itr = icalset_get_first_component(clusterin);
- itr != 0;
- itr = icalset_get_next_component(clusterin)){
-
- icalerror_set_error_state(ICAL_BADARG_ERROR, ICAL_ERROR_NONFATAL);
- icalrestriction_check(itr);
- icalerror_set_error_state(ICAL_BADARG_ERROR, ICAL_ERROR_DEFAULT);
-
- if (itr != 0){
-
- if(tostdout){
-
- printf("--------------\n%s\n",icalcomponent_as_ical_string(itr));
-
- } else {
-
- icalfileset_add_component(clusterout,
- icalcomponent_new_clone(itr));
- }
-
- count++;
-
- } else {
- printf("Got NULL component");
- }
- }
-
-
- printf("Transfered %d components\n",count);
-
- icalset_free(clusterin);
-
- if (!tostdout){
- icalfileset_mark(clusterout);
- icalset_free(clusterout);
- }
-
- return 0;
-}
-
-
diff --git a/libical/src/test/findobj.c b/libical/src/test/findobj.c
deleted file mode 100644
index eb565afa7a..0000000000
--- a/libical/src/test/findobj.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: findobj.c
- CREATOR: eric 11 February 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#include <stdio.h> /* for printf */
-#include <errno.h>
-#include <string.h> /* For strerror */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-
-/* This program finds an object stored in a calendar */
-
-void usage(char* arg0) {
- printf("usage: %s calendar-dir uid\n",arg0);
-}
-
-int main(int c, char *argv[]){
-
- icalcalendar *cal;
- icaldirset *booked;
- icalcomponent *itr;
-
- if(c < 2 || c > 3){
- usage(argv[0]);
- exit(1);
- }
-
- cal = icalcalendar_new(argv[1]);
-
- if(cal == 0){
- fprintf(stderr,"%s: error in opening calendar \"%s\": %s. errno is \"%s\"\n",
- argv[0],argv[1],icalerror_strerror(icalerrno),
- strerror(errno));
- }
-
- booked = icalcalendar_get_booked(cal);
-
- itr = icaldirset_fetch(booked,argv[2]);
-
-
- if(itr != 0){
- printf("%s",icalcomponent_as_ical_string(itr));
- }
-
- return 0;
-}
-
diff --git a/libical/src/test/icaltestparser.c b/libical/src/test/icaltestparser.c
deleted file mode 100644
index 9992979a3a..0000000000
--- a/libical/src/test/icaltestparser.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: icaltestparser.c
- CREATOR: eric 20 June 1999
-
- $Id$
- $Locker$
-
- 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
- The original code is icaltestparser.c
-
-
- (C) COPYRIGHT 1999 The Software Studio.
- http://www.softwarestudio.org
-
- ======================================================================*/
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <libical/ical.h>
-
-#include <stdlib.h>
-
-char str[] = "BEGIN:VCALENDAR\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\
-VERSION:2.0\
-BEGIN:VTIMEZONE\
-TZID:US-Eastern\
-BEGIN:STANDARD\
-DTSTART:19990404T020000\
-RDATE:19990u404xT020000\
-TZOFFSETFROM:-0500\
-TZOFFSETTO:-0400\
-END:STANDARD\
-BEGIN:DAYLIGHT\
-DTSTART:19990404T020000\
-RDATE:19990404T020000\
-TZOFFSETFROM:-0500\
-TZOFFSETTO:-0400\
-TZNAME:EDT\
-Dkjhgri:derhvnv;\
-BEGIN:dfkjh\
-END:dfdfkjh\
-END:DAYLIGHT\
-END:VTIMEZONE\
-BEGIN:VEVENT\
-GEO:Bongo\
-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\
-";
-
-extern int yydebug;
-
-/* Have the parser fetch data from stdin */
-
-char* read_stream(char *s, size_t size, void *d)
-{
- char *c = fgets(s,size, (FILE*)d);
-
- return c;
-
-}
-
-
-
-int main(int argc, char* argv[])
-{
-
- char* line;
- FILE* stream;
- icalcomponent *c;
- icalparser *parser = icalparser_new();
-
- stream = fopen(argv[1],"r");
-
- assert(stream != 0);
-
- icalparser_set_gen_data(parser,stream);
-
- do{
-
- line = icalparser_get_line(parser,read_stream);
-
- c = icalparser_add_line(parser,line);
-
-
- if (c != 0){
- /*icalcomponent_convert_errors(c);*/
- printf("%s",icalcomponent_as_ical_string(c));
- printf("\n---------------\n");
- icalcomponent_free(c);
- }
-
- } while ( line != 0);
-
- return 0;
- }
diff --git a/libical/src/test/itip.ics b/libical/src/test/itip.ics
deleted file mode 100644
index 9a71660a75..0000000000
--- a/libical/src/test/itip.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-
-BEGIN:VCALENDAR
-METHOD:REPLY
-PRODID:-//ACME/DesktopCalendar//EN
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:mailto:a@example.com
-ATTENDEE:mailto:eric@agony.busboom.org
-DTSTART:19970701T200000Z
-DTSTAMP:19970611T190000Z
-SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
-UID:0981234-1234234-23@example.com
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/src/test/outgoing.ics b/libical/src/test/outgoing.ics
deleted file mode 100644
index 9f9fd3fd69..0000000000
--- a/libical/src/test/outgoing.ics
+++ /dev/null
@@ -1,544 +0,0 @@
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170735Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170735Z
-UID
- :calsrv.example.com-873970198738704@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 2
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170735Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170953Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170953Z
-UID
- :calsrv.example.com-873970198738704@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 2
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T170953Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=ACCEPTED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T171147Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :Unfortunately\, I have another commitment that conflicts with this
- meeting. I am delegating my attendance to Bob.
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DELEGATED
- ;DELEGATED-TO=bob@cal.softwarestudio.org
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-X-LIC-NOTE
- : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T040000Z
-DTSTART
- :19970701T070000
-DTEND
- :19970701T080000
-SUMMARY
- :Overlap 2
-UID
- :calsrv.example.com-873970198738704@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T171147Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can't make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DECLINED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T171154Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :Unfortunately\, I have another commitment that conflicts with this
- meeting. I am delegating my attendance to Bob.
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DELEGATED
- ;DELEGATED-TO=bob@cal.softwarestudio.org
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-X-LIC-NOTE
- : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T040000Z
-DTSTART
- :19970701T070000
-DTEND
- :19970701T080000
-SUMMARY
- :Overlap 2
-UID
- :calsrv.example.com-873970198738704@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T171154Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can't make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DECLINED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T144324Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :Unfortunately\, I have another commitment that conflicts with this
- meeting. I am delegating my attendance to Bob.
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DELEGATED
- ;DELEGATED-TO=bob@cal.softwarestudio.org
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-X-LIC-NOTE
- : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T040000Z
-DTSTART
- :19970701T230000
-DTEND
- :19970702T000000
-SUMMARY
- :Overlap 2
-UID
- :calsrv.example.com-873970198738704@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T144324Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can't make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DECLINED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T144412Z
-UID
- :calsrv.example.com-873970198738703@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- : Overlap 1
-SEQUENCE
- :0
-COMMENT
- :Unfortunately\, I have another commitment that conflicts with this
- meeting. I am delegating my attendance to Bob.
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DELEGATED
- ;DELEGATED-TO=bob@cal.softwarestudio.org
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-X-LIC-NOTE
- : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T040000Z
-DTSTART
- :19970701T230000
-DTEND
- :19970702T000000
-SUMMARY
- :Overlap 2
-UID
- :calsrv.example.com-873970198738704@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD
- :REPLY
-VERSION
- :2.0
-PRODID
- :-//SoftwareStudio//NONSGML libical 0.21 //EN
-BEGIN:VEVENT
-DTSTAMP
- :20001121T144412Z
-UID
- :calsrv.example.com-873970198738705@example.com
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-SUMMARY
- :Overlap 3
-SEQUENCE
- :0
-COMMENT
- :I can't make it to this meeting
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- ;PARTSTAT=DECLINED
- :Mailto:alice@cal.softwarestudio.org
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/src/test/process.c b/libical/src/test/process.c
deleted file mode 100644
index 605a83eee7..0000000000
--- a/libical/src/test/process.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: process.c
- CREATOR: eric 11 February 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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.
-
- ======================================================================*/
-
-#include <stdio.h> /* for printf */
-#include <errno.h>
-#include <string.h> /* For strerror */
-#include <stdlib.h> /* for free */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-
-void send_message(icalcomponent *reply,const char* this_user)
-{
- printf("From: %s\n\n%s\n",this_user,icalcomponent_as_ical_string(reply));
-
-
-}
-
-
-int main(int argc, char* argv[])
-{
- icalcomponent *c, *next_c;
- int i=0;
- const char *class_string;
- int dont_remove;
-
- icalset* f = icalset_new_file("../../test-data/process-incoming.ics");
- icalset* trash = icalset_new_file("trash.ics");
- icalset* cal = icalset_new_file("../../test-data/process-calendar.ics");
- icalset* out = icalset_new_file("outgoing.ics");
-
- const char* this_user = "alice@cal.softwarestudio.org";
-
- assert(f!= 0);
- assert(cal!=0);
- assert(trash!=0);
- assert(out!=0);
-
-
- /* Foreach incoming message */
- for(c=icalset_get_first_component(f);c!=0;c = next_c){
-
- icalproperty_xlicclass class;
- icalcomponent *match;
- icalcomponent *inner;
- icalcomponent *reply = 0;
-
- assert(c!=0);
-
- inner = icalcomponent_get_first_real_component(c);
-
- i++;
- reply = 0;
- dont_remove = 0;
-
- if(inner == 0){
- printf("Bad component, no inner\n %s\n",
- icalcomponent_as_ical_string(c));
- continue;
- }
-
- /* Find a booked component that is matched to the incoming
- message, based on the incoming component's UID, SEQUENCE
- and RECURRENCE-ID*/
-
- match = icalset_fetch_match(cal,c);
-
- class = icalclassify(c,match,this_user);
-
- class_string = icalproperty_enum_to_string(class);
-
- /* Print out the notes associated with the incoming component
- and the matched component in the */
- {
- const char *c_note=0;
- const char *m_note=0;
- icalproperty *p;
-
- for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){
-
- if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){
- c_note = icalproperty_get_x(p);
- }
- }
-
- if (match != 0){
- for(p = icalcomponent_get_first_property(match,
- ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(match,
- ICAL_X_PROPERTY)){
- if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){
- m_note = icalproperty_get_x(p);
- }
- }
- }
-
- if(c_note != 0){
- printf("Incoming: %s\n",c_note);
- }
- if(m_note != 0){
- printf("Match : %s\n",m_note);
- }
- }
-
- /* Main processing structure */
-
- switch (class){
- case ICAL_XLICCLASS_NONE: {
- char temp[1024];
- /* Huh? Return an error to sender */
- icalrestriction_check(c);
- icalcomponent_convert_errors(c);
-
- snprintf(temp,1024,"I can't understand the component you sent. \n Here is the component you sent, possibly with error messages:\n %s",icalcomponent_as_ical_string(c));
-
- reply = icalmessage_new_error_reply(
- c,
- this_user,
- temp,
- "",
- ICAL_UNKNOWN_STATUS
- );
-
-
-
- break;
- }
- case ICAL_XLICCLASS_PUBLISHNEW: {
-
- /* Don't accept published events from anyone but
- self. If self, fall through to ICAL_XLICCLASS_REQUESTNEW */
-
-
-
- }
- case ICAL_XLICCLASS_REQUESTNEW: {
-
- /* Book the new component if it does not overlap
- anything. If the time is busy and the start time is
- an even modulo 4, delegate to
- bob@cal.softwarestudio.org. If the time is busy and
- is 1 modulo 4, counterpropose for the first
- available free time. Otherwise, deline the meeting */
-
- icalcomponent *overlaps;
- overlaps = icalclassify_find_overlaps(cal,c);
-
- if(overlaps == 0){
- /* No overlaps, book the meeting */
-/* icalset_add_component(cal,icalcomponent_new_clone(c));*/
-
- /* Return a reply */
- reply = icalmessage_new_accept_reply(c,this_user,
- "I can make it to this meeting");
-
- icalset_add_component(out,reply);
-
- } else {
- /* There was a conflict, so delegate, counterpropose
- or decline it */
- struct icaltimetype dtstart
- = icalcomponent_get_dtstart(c);
-
- if(dtstart.hour%4 == 0){
- /* Delegate the meeting */
- reply = icalmessage_new_delegate_reply(c,
- this_user,
- "bob@cal.softwarestudio.org",
- "Unfortunately, I have another commitment that \
-conflicts with this meeting. I am delegating my attendance to Bob. ");
-
- icalset_add_component(out,reply);
-
- } else if (dtstart.hour%4 == 1) {
- /* Counter propose to next available time */
- icalcomponent *newc;
- struct icalperiodtype next_time;
-
- icalspanlist *spanl =
- icalspanlist_new(cal,dtstart,
- icaltime_null_time());
-
- next_time = icalspanlist_next_free_time(
- spanl,icalcomponent_get_dtstart(c));
-
- newc = icalcomponent_new_clone(c);
-
- icalcomponent_set_dtstart(newc,next_time.start);
-
-
- /* Hack, the duration of the counterproposed
- meeting may be longer than the free time
- available */
- icalcomponent_set_duration(newc,
- icalcomponent_get_duration(c));
-
- reply = icalmessage_new_counterpropose_reply(c,
- newc,
- this_user,
- "Unfortunately, I have another commitment that \
-conflicts with this meeting. I am proposing a time that works better for me.");
-
- icalset_add_component(out,reply);
-
- } else {
- /* Decline the meeting */
-
- reply = icalmessage_new_decline_reply(c,
- this_user,
- "I can't make it to this meeting");
-
- icalset_add_component(out,reply);
-
- }
-
-
- }
- break;
- }
- case ICAL_XLICCLASS_PUBLISHFREEBUSY: {
- /* Store the busy time information in a file named after
- the sender */
- break;
- }
-
- case ICAL_XLICCLASS_PUBLISHUPDATE: {
- /* Only accept publish updates from self. If self, fall
- throught to ICAL_XLICCLASS_REQUESTUPDATE */
- }
-
- case ICAL_XLICCLASS_REQUESTUPDATE: {
- /* always accept the changes */
- break;
- }
-
- case ICAL_XLICCLASS_REQUESTRESCHEDULE: {
- /* Use same rules as REQUEST_NEW */
- icalcomponent *overlaps;
- overlaps = icalclassify_find_overlaps(cal,c);
-
- break;
- }
- case ICAL_XLICCLASS_REQUESTDELEGATE: {
-
- break;
- }
- case ICAL_XLICCLASS_REQUESTNEWORGANIZER: {
- break;
- }
- case ICAL_XLICCLASS_REQUESTFORWARD: {
- break;
- }
- case ICAL_XLICCLASS_REQUESTSTATUS: {
- break;
- }
-
- case ICAL_XLICCLASS_REQUESTFREEBUSY: {
- break;
- }
- case ICAL_XLICCLASS_REPLYACCEPT: {
- /* Change the PARTSTAT of the sender */
- break;
- }
- case ICAL_XLICCLASS_REPLYDECLINE: {
- /* Change the PARTSTAT of the sender */
- break;
- }
- case ICAL_XLICCLASS_REPLYCRASHERACCEPT: {
- /* Add the crasher to the ATTENDEE list with the
- appropriate PARTSTAT */
- break;
- }
- case ICAL_XLICCLASS_REPLYCRASHERDECLINE: {
- /* Add the crasher to the ATTENDEE list with the
- appropriate PARTSTAT */
- break;
- }
- case ICAL_XLICCLASS_ADDINSTANCE: {
- break;
- }
- case ICAL_XLICCLASS_CANCELEVENT: {
- /* Remove the component */
- break;
- }
- case ICAL_XLICCLASS_CANCELINSTANCE: {
- break;
- }
- case ICAL_XLICCLASS_CANCELALL: {
- /* Remove the component */
- break;
- }
- case ICAL_XLICCLASS_REFRESH: {
- /* Resend the latest copy of the request */
- break;
- }
- case ICAL_XLICCLASS_COUNTER: {
- break;
- }
- case ICAL_XLICCLASS_DECLINECOUNTER: {
- break;
- }
- case ICAL_XLICCLASS_MALFORMED: {
- /* Send back an error */
- break;
- }
- case ICAL_XLICCLASS_OBSOLETE: {
- printf(" ** Got an obsolete component:\n%s",
- icalcomponent_as_ical_string(c));
- /* Send back an error */
- break;
- }
- case ICAL_XLICCLASS_MISSEQUENCED: {
- printf(" ** Got a missequenced component:\n%s",
- icalcomponent_as_ical_string(c));
- /* Send back an error */
- break;
- }
- case ICAL_XLICCLASS_UNKNOWN: {
- printf(" ** Don't know what to do with this component:\n%s",
- icalcomponent_as_ical_string(c));
- /* Send back an error */
- break;
- }
- case ICAL_XLICCLASS_X:
- case ICAL_XLICCLASS_REPLYDELEGATE:
- default: {
- }
- }
-
-#if(0)
- if (reply != 0){
-
- /* Don't send the reply if the RSVP parameter indicates not to*/
- icalcomponent *reply_inner;
- icalproperty *attendee;
- icalparameter *rsvp;
-
- reply_inner = icalcomponent_get_first_real_component(reply);
- attendee = icalcomponent_get_first_property(reply_inner,
- ICAL_ATTENDEE_PROPERTY);
- rsvp = icalproperty_get_first_parameter(attendee,
- ICAL_RSVP_PARAMETER);
-
- if(rsvp == 0 || icalparameter_get_rsvp(rsvp) == 1){
- icalrestriction_check(reply);
- send_message(reply,this_user);
- }
-
- icalcomponent_free(reply);
- }
-#endif
-
- if(reply !=0){
- printf("%s\n",icalcomponent_as_ical_string(reply));
- }
-
- next_c = icalset_get_next_component(f);
-
- if(dont_remove == 0){
- /*icalset_remove_component(f,c);
- icalset_add_component(trash,c);*/
- }
- }
-
-#if (0)
-
- for(c = icalset_get_first_component(out);
- c!=0;
- c = icalset_get_next_component(out)){
-
- printf("%s",icalcomponent_as_ical_string(c));
-
- }
-#endif
-
- icalset_free(f);
- icalset_free(trash);
- icalset_free(cal);
- icalset_free(out);
-
- return 0;
-}
-
-
diff --git a/libical/src/test/recur.c b/libical/src/test/recur.c
deleted file mode 100644
index 0b490c0513..0000000000
--- a/libical/src/test/recur.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: recur.c
- CREATOR: ebusboom 8jun00
-
- DESCRIPTION:
-
- Test program for expanding recurrences. Run as:
-
- ./recur ../../test-data/recur.txt
-
-
- (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.
-
- ======================================================================*/
-
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-#include <signal.h> /* for signal */
-#ifndef WIN32
-#include <unistd.h> /* for alarm */
-#endif
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-static void sig_alrm(int i){
- fprintf(stderr,"Could not get lock on file\n");
- exit(1);
-}
-
-static void recur_callback(icalcomponent *comp,
- struct icaltime_span *span,
- void *data)
-{
- printf("cb: %s", ctime(&span->start));
- printf(" %s\n", ctime(&span->end));
-
-}
-
-int main(int argc, char *argv[])
-{
- icalset *cin;
- struct icaltimetype next;
- icalcomponent *itr;
- icalproperty *desc, *dtstart, *rrule;
- struct icalrecurrencetype recur;
- icalrecur_iterator* ritr;
- time_t tt;
- char* file;
-
- icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL);
-
-#ifndef WIN32
- signal(SIGALRM,sig_alrm);
-#endif
-
- if (argc <= 1){
- file = "../../test-data/recur.txt";
- } else if (argc == 2){
- file = argv[1];
- } else {
- fprintf(stderr,"usage: recur [input file]\n");
- exit(1);
- }
-
-#ifndef WIN32
- alarm(300); /* to get file lock */
-#endif
- cin = icalfileset_new(file);
-#ifndef WIN32
- alarm(0);
-#endif
-
- if(cin == 0){
- fprintf(stderr,"recur: can't open file %s\n",file);
- exit(1);
- }
-
-
- for (itr = icalfileset_get_first_component(cin);
- itr != 0;
- itr = icalfileset_get_next_component(cin)){
-
- struct icaltimetype start = icaltime_from_timet(1,0);
- struct icaltimetype end = icaltime_today();
-
-
-
- desc = icalcomponent_get_first_property(itr,ICAL_DESCRIPTION_PROPERTY);
- dtstart = icalcomponent_get_first_property(itr,ICAL_DTSTART_PROPERTY);
- rrule = icalcomponent_get_first_property(itr,ICAL_RRULE_PROPERTY);
-
- if (desc == 0 || dtstart == 0 || rrule == 0){
- printf("\n******** Error in input component ********\n");
- printf("The following component is malformed:\n %s\n",
- icalcomponent_as_ical_string(itr));
- continue;
- }
-
- printf("\n\n#### %s\n",icalproperty_get_description(desc));
- printf("#### %s\n",icalvalue_as_ical_string(icalproperty_get_value(rrule)));
- recur = icalproperty_get_rrule(rrule);
- start = icalproperty_get_dtstart(dtstart);
-
- ritr = icalrecur_iterator_new(recur,start);
-
- tt = icaltime_as_timet(start);
-
- printf("#### %s\n",ctime(&tt ));
-
- icalrecur_iterator_free(ritr);
-
- for(ritr = icalrecur_iterator_new(recur,start),
- next = icalrecur_iterator_next(ritr);
- !icaltime_is_null_time(next);
- next = icalrecur_iterator_next(ritr)){
-
- tt = icaltime_as_timet(next);
-
- printf(" %s",ctime(&tt ));
-
- }
- icalrecur_iterator_free(ritr);
-
- icalcomponent_foreach_recurrence(itr, start, end,
- recur_callback, NULL);
-
-
-
- }
-
- icalset_free(cin);
-
- icaltimezone_free_builtin_timezones();
-
- icalmemory_free_ring();
-
- free_zone_directory();
-
- return 0;
-}
diff --git a/libical/src/test/regression-classify.c b/libical/src/test/regression-classify.c
deleted file mode 100644
index 7af64499f3..0000000000
--- a/libical/src/test/regression-classify.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: regression-classify.c
- CREATOR: eric 11 February 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-#include <stdio.h> /* for printf */
-#include <errno.h>
-#include <string.h> /* For strerror */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-#include "regression.h"
-
-extern int VERBOSE;
-
-/* Get a note about the purpose of the property*/
-static const char* get_note(icalcomponent *c)
-{
- icalproperty *p;
- const char* note = 0;
-
- if(c != 0){
- for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){
- if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){
- note = icalproperty_get_x(p);
- }
- }
- }
-
- if(note == 0){
- note = "None";
- }
-
- return note;
-}
-
-/* Get the expected result about the purpose of the property*/
-
-static const char* get_expect(icalcomponent *c)
-{
- icalproperty *p;
- const char* note = 0;
-
- if(c != 0){
- for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){
- if(strcmp(icalproperty_get_x_name(p),"X-LIC-EXPECT")==0){
- note = icalproperty_get_x(p);
- }
- }
- }
-
- if(note == 0){
- note = "None";
- }
-
- return note;
-}
-
-void test_classify(void)
-{
- icalcomponent *c,*match;
- int i=0;
- int error_count = 0;
- /* Open up the two storage files, one for the incomming components,
- one for the calendar */
- icalset* incoming = icalset_new_file("../../test-data/incoming.ics");
- icalset* cal = icalset_new_file("../../test-data/calendar.ics");
- icalset* f = icalset_new_file("../../test-data/classify.ics");
-
- ok("opening file classify.ics", (f!=0));
- ok("opening file calendar.ics", (cal!=0));
- ok("opening file incoming.ics", (incoming!=0));
-
- /* some basic tests.. */
- if (f) {
- c = icalset_get_first_component(f);
- match = icalset_get_next_component(f);
-
- ok("test two vcalendars for SEQUENCE with icalclassify()",
- (icalclassify(c,match,"A@example.com") == ICAL_XLICCLASS_REQUESTRESCHEDULE));
-
- icalset_free(f);
- }
-
- assert(incoming!= 0);
- assert(cal!=0);
-
- /* Iterate through all of the incoming components */
- for(c=icalset_get_first_component(incoming);c!=0;
- c=icalset_get_next_component(incoming)){
-
- icalproperty_xlicclass class;
- icalcomponent *match = 0;
- const char* this_uid;
- const char* this_note = get_note(c);
- const char* expected_result = get_expect(c);
- const char* actual_result;
- const char* match_note;
- char msg[128];
-
- i++;
-
- /* Check this component against the restrictions imposed by
- iTIP. An errors will be inserted as X-LIC-ERROR properties
- in the component. The Parser will also insert errors if it
- cannot parse the component */
- icalcomponent_check_restrictions(c);
-
- /* If there are any errors, print out the component */
-
- error_count = icalcomponent_count_errors(c);
- sprintf(msg, "%s - parsing", this_note);
- int_is(msg, error_count, 0);
-
- if (error_count !=0) {
- if (VERBOSE) printf("----- Component has errors ------- \n%s-----------------\n",
- icalcomponent_as_ical_string(c));
- }
-
- /* Use one of the icalcomponent convenience routines to get
- the UID. This routine will save you from having to use
- icalcomponent_get_inner(),
- icalcomponent_get_first_property(), checking the return
- value, and then calling icalproperty_get_uid. There are
- several other convenience routines for DTSTART, DTEND,
- DURATION, SUMMARY, METHOD, and COMMENT */
- this_uid = icalcomponent_get_uid(c);
-
- if(this_uid != 0){
- /* Look in the calendar for a component with the same UID
- as the incomming component. We should reall also be
- checking the RECURRENCE-ID. Another way to do this
- operation is to us icalset_find_match(), which does use
- the RECURRENCE-ID. */
- match = icalset_fetch(cal,this_uid);
- }
-
-
- /* Classify the incoming component. The third argument is the
- calid of the user who owns the calendar. In a real program,
- you would probably switch() on the class.*/
- class = icalclassify(c,match,"A@example.com");
- /** eventually test this too.. **/
- match_note = get_note(match);
- actual_result = icalproperty_enum_to_string(class);
- sprintf(msg, "expecting %s", expected_result);
- is(msg, expected_result, actual_result);
-
- if (VERBOSE) printf("Test %d\n\
-Incoming: %s\n\
-Matched: %s\n\
-Classification: %s\n\n",
- i,this_note,get_note(match),
- icalproperty_enum_to_string(class));
- }
-
- icalset_free(incoming);
- icalset_free(cal);
-
-}
-
-
diff --git a/libical/src/test/regression-component.c b/libical/src/test/regression-component.c
deleted file mode 100644
index 5494bdd779..0000000000
--- a/libical/src/test/regression-component.c
+++ /dev/null
@@ -1,580 +0,0 @@
-#include <libical/ical.h>
-#include "regression.h"
-
-#include <string.h>
-extern int VERBOSE;
-
-void create_simple_component(void)
-{
-
- icalcomponent* calendar;
- icalproperty *version, *bogus;
-
- /* Create calendar and add properties */
- calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
-
- ok("create vcalendar component", (calendar!=NULL));
-
- icalcomponent_add_property(
- calendar,
- icalproperty_new_version("2.0")
- );
-
- version = icalcomponent_get_first_property(calendar,ICAL_VERSION_PROPERTY);
- ok("version property added", (version!=NULL));
-
- bogus = icalcomponent_get_first_property(calendar,ICAL_DTSTART_PROPERTY);
- ok("bogus dtstart not found", (bogus == NULL));
-
- if (VERBOSE && calendar)
- printf("%s\n",icalcomponent_as_ical_string(calendar));
-
- icalcomponent_free(calendar);
-}
-
-
-static char* create_new_component_str =
-"BEGIN:VCALENDAR\n"
-"VERSION:2.0\n"
-"PRODID:-//RDU Software//NONSGML HandCal//EN\n"
-"BEGIN:VTIMEZONE\n"
-"TZID:America/New_York\n"
-"BEGIN:DAYLIGHT\n"
-"DTSTART:20020606T212449\n"
-"RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\n"
-"TZOFFSETFROM:-0500\n"
-"TZOFFSETTO:-0400\n"
-"TZNAME:EST\n"
-"END:DAYLIGHT\n"
-"BEGIN:STANDARD\n"
-"DTSTART:20020606T212449\n"
-"RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\n"
-"TZOFFSETFROM:-0400\n"
-"TZOFFSETTO:-0500\n"
-"TZNAME:EST\n"
-"END:STANDARD\n"
-"END:VTIMEZONE\n"
-"BEGIN:VEVENT\n"
-"DTSTAMP:20020606T212449\n"
-"UID:guid-1.host1.com\n"
-"ORGANIZER;ROLE=CHAIR:mrbig@host.com\n"
-"ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=GROUP:employee-A@host.com\n"
-"DESCRIPTION:Project XYZ Review Meeting\n"
-"CATEGORIES:MEETING\n"
-"CLASS:PRIVATE\n"
-"CREATED:20020606T212449\n"
-"SUMMARY:XYZ Project Review\n"
-"DTSTART;TZID=America/New_York:20020606T212449\n"
-"DTEND;TZID=America/New_York:20020606T212449\n"
-"LOCATION:1CP Conference Room 4350\n"
-"END:VEVENT\n"
-"END:VCALENDAR\n";
-
-
-/* Create a new component */
-void create_new_component()
-{
- icalcomponent* calendar;
- icalcomponent* timezone;
- icalcomponent* tzc;
- icalcomponent* event;
- struct icaltimetype atime = icaltime_from_timet( 1023398689, 0);
- struct icaldatetimeperiodtype rtime;
- icalproperty* property;
- char *calendar_as_string;
-
- rtime.period.start = icaltime_from_timet( 1023398689,0);
- rtime.period.end = icaltime_from_timet( 1023409689,0);
- rtime.period.end.hour++;
- rtime.time = icaltime_null_time();
-
- /* Create calendar and add properties */
- calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
-
-
- icalcomponent_add_property(
- calendar,
- icalproperty_new_version("2.0")
- );
-
- icalcomponent_add_property(
- calendar,
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN")
- );
-
- /* Create a timezone object and add it to the calendar */
-
- timezone = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT);
-
- icalcomponent_add_property(
- timezone,
- icalproperty_new_tzid("America/New_York")
- );
-
- /* Add a sub-component of the timezone */
- tzc = icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT);
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_dtstart(atime)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_rdate(rtime)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzoffsetfrom(-5*3600)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzoffsetto(-4*3600)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzname("EST")
- );
-
- icalcomponent_add_component(timezone,tzc);
-
- icalcomponent_add_component(calendar,timezone);
-
- /* Add a second subcomponent */
- tzc = icalcomponent_new(ICAL_XSTANDARD_COMPONENT);
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_dtstart(atime)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_rdate(rtime)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzoffsetfrom(-4*3600)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzoffsetto(-5*3600)
- );
-
- icalcomponent_add_property(
- tzc,
- icalproperty_new_tzname("EST")
- );
-
- icalcomponent_add_component(timezone,tzc);
-
- /* Add an event */
-
- event = icalcomponent_new(ICAL_VEVENT_COMPONENT);
-
- icalcomponent_add_property(
- event,
- icalproperty_new_dtstamp(atime)
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_uid("guid-1.host1.com")
- );
-
- /* add a property that has parameters */
- property = icalproperty_new_organizer("mrbig@host.com");
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_role(ICAL_ROLE_CHAIR)
- );
-
- icalcomponent_add_property(event,property);
-
- /* add another property that has parameters */
- property = icalproperty_new_attendee("employee-A@host.com");
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT)
- );
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_rsvp(ICAL_RSVP_TRUE)
- );
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP)
- );
-
- icalcomponent_add_property(event,property);
-
-
- /* more properties */
-
- icalcomponent_add_property(
- event,
- icalproperty_new_description("Project XYZ Review Meeting")
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_categories("MEETING")
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_class(ICAL_CLASS_PRIVATE)
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_created(atime)
- );
-
- icalcomponent_add_property(
- event,
- icalproperty_new_summary("XYZ Project Review")
- );
-
-
- property = icalproperty_new_dtstart(atime);
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_tzid("America/New_York")
- );
-
- icalcomponent_add_property(event,property);
-
-
- property = icalproperty_new_dtend(atime);
-
- icalproperty_add_parameter(
- property,
- icalparameter_new_tzid("America/New_York")
- );
-
- icalcomponent_add_property(event,property);
-
- icalcomponent_add_property(
- event,
- icalproperty_new_location("1CP Conference Room 4350")
- );
-
- icalcomponent_add_component(calendar,event);
-
- calendar_as_string = icalcomponent_as_ical_string(calendar);
-
- is("build large, complex component",
- calendar_as_string,
- create_new_component_str);
-
- if (VERBOSE && calendar)
- printf("%s\n",icalcomponent_as_ical_string(calendar));
-
-
- if (calendar)
- icalcomponent_free(calendar);
-
-}
-
-/* Create a new component, using the va_args list */
-
-void create_new_component_with_va_args()
-{
-
- icalcomponent* calendar;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
- struct icaldatetimeperiodtype rtime;
-
- rtime.period.start = icaltime_from_timet( time(0),0);
- rtime.period.end = icaltime_from_timet( time(0),0);
- rtime.period.end.hour++;
- rtime.time = icaltime_null_time();
-
- calendar =
- icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"),
- icalcomponent_vanew(
- ICAL_VTIMEZONE_COMPONENT,
- icalproperty_new_tzid("America/New_York"),
- icalcomponent_vanew(
- ICAL_XDAYLIGHT_COMPONENT,
- icalproperty_new_dtstart(atime),
- icalproperty_new_rdate(rtime),
- icalproperty_new_tzoffsetfrom(-4.0),
- icalproperty_new_tzoffsetto(-5.0),
- icalproperty_new_tzname("EST"),
- 0
- ),
- icalcomponent_vanew(
- ICAL_XSTANDARD_COMPONENT,
- icalproperty_new_dtstart(atime),
- icalproperty_new_rdate(rtime),
- icalproperty_new_tzoffsetfrom(-5.0),
- icalproperty_new_tzoffsetto(-4.0),
- icalproperty_new_tzname("EST"),
- 0
- ),
- 0
- ),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstamp(atime),
- icalproperty_new_uid("guid-1.host1.com"),
- icalproperty_vanew_organizer(
- "mrbig@host.com",
- icalparameter_new_role(ICAL_ROLE_CHAIR),
- 0
- ),
- icalproperty_vanew_attendee(
- "employee-A@host.com",
- icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT),
- icalparameter_new_rsvp(ICAL_RSVP_TRUE),
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP),
- 0
- ),
- icalproperty_new_description("Project XYZ Review Meeting"),
- icalproperty_new_categories("MEETING"),
- icalproperty_new_class(ICAL_CLASS_PUBLIC),
- icalproperty_new_created(atime),
- icalproperty_new_summary("XYZ Project Review"),
- icalproperty_vanew_dtstart(
- atime,
- icalparameter_new_tzid("America/New_York"),
- 0
- ),
- icalproperty_vanew_dtend(
- atime,
- icalparameter_new_tzid("America/New_York"),
- 0
- ),
- icalproperty_new_location("1CP Conference Room 4350"),
- 0
- ),
- 0
- );
-
- ok("creating a complex vcalendar", (calendar != NULL));
- if (VERBOSE && calendar)
- printf("%s\n",icalcomponent_as_ical_string(calendar));
-
- icalcomponent_free(calendar);
-
-}
-
-static void print_span(int c, struct icaltime_span span ){
- printf("span-->%d, %d\n", (int)span.start, (int)span.end);
- if (span.start == 0)
- printf("#%02d start: (empty)\n",c);
- else
- printf("#%02d start: %s\n",c,ical_timet_string(span.start));
-
- if (span.end == 0)
- printf(" end : (empty)\n");
- else
- printf(" end : %s\n",ical_timet_string(span.end));
-
-}
-
-/** Test icalcomponent_get_span()
- *
- */
-void test_icalcomponent_get_span()
-{
- time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000,
- Sat Nov 4 15:00:00 PST 2000 */
- time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000
- Sat Nov 4 16:00:00 PST 2000 */
- struct icaldurationtype dur;
- struct icaltime_span span;
- icalcomponent *c;
- icaltimezone *azone, *bzone;
- int tnum = 0;
-
- /** test 0
- * Direct assigning time_t means they will be interpreted as UTC
- */
- span.start = tm1;
- span.end = tm2;
- if (VERBOSE) print_span(tnum++,span);
-
- /** test 1
- * We specify times in a timezone, the returned span is in UTC
- */
- azone = icaltimezone_get_builtin_timezone("America/Los_Angeles");
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(
- icaltime_from_timet_with_zone(tm1,0,azone),
- icalparameter_new_tzid("America/Los_Angeles"),0),
- icalproperty_vanew_dtend(
- icaltime_from_timet_with_zone(tm2,0,azone),
- icalparameter_new_tzid("America/Los_Angeles"),0),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("America/Los_Angeles", span.start, 973407600);
- icalcomponent_free(c);
-
- /** test 2
- * We specify times as floating, the returned span is in UTC
- * with no conversion applied - so result should be as test 0
- */
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(icaltime_from_timet(tm1,0),0),
- icalproperty_vanew_dtend(icaltime_from_timet(tm2,0),0),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("floating time", span.start, tm1);
-
- icalcomponent_free(c);
-
- /** test 3
- * We specify times in a timezone, the returned span is in UTC
- */
- azone = icaltimezone_get_builtin_timezone("America/New_York");
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(
- icaltime_from_timet_with_zone(tm1,0,azone),
- icalparameter_new_tzid("America/New_York"),0),
- icalproperty_vanew_dtend(
- icaltime_from_timet_with_zone(tm2,0,azone),
- icalparameter_new_tzid("America/New_York"),0),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("America/New_York", span.start, 973396800);
-
- icalcomponent_free(c);
-
- /** test 4
- * We specify times in two different timezones, the returned span
- * is in UTC
- */
- azone = icaltimezone_get_builtin_timezone("America/New_York");
- bzone = icaltimezone_get_builtin_timezone("America/Los_Angeles");
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(
- icaltime_from_timet_with_zone(tm1,0,azone),
- icalparameter_new_tzid("America/New_York"),0),
- icalproperty_vanew_dtend(
- icaltime_from_timet_with_zone(tm2,0,bzone),
- icalparameter_new_tzid("America/Los_Angeles"),0),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("America/New_York", span.start, 973396800);
-
- icalcomponent_free(c);
-
- /** test 5
- * We specify start time in a timezone and a duration, the returned span
- * is in UTC
- */
- azone = icaltimezone_get_builtin_timezone("America/Los_Angeles");
- memset(&dur,0,sizeof(dur));
- dur.minutes = 30;
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(
- icaltime_from_timet_with_zone(tm1,0,azone),
- icalparameter_new_tzid("America/Los_Angeles"),0),
- icalproperty_new_duration(dur),
-
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("America/Los_Angeles w/ duration", span.end, 973409400);
-
- icalcomponent_free(c);
-
- icalerror_errors_are_fatal = 0;
- /** test 6
- * We specify only start time, should return a null span with no error
- */
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_timet(tm1,0)),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("null span", span.start, 0);
- icalcomponent_free(c);
-
- /** test 7
- * We specify start and end date
- */
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_timet(tm1,1)),
- icalproperty_new_dtend(icaltime_from_timet(tm1,1)),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("UTC", span.start, 973296000);
- icalcomponent_free(c);
-
- /** test 8
- * We specify start and end date
- */
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_timet(tm1,1)),
- icalproperty_new_dtend(icaltime_from_timet(tm2,1)),
- 0
- );
-
- span = icalcomponent_get_span(c);
- int_is("UTC #2", span.start, 973296000);
- if (VERBOSE) print_span(tnum++,span);
-
- icalcomponent_free(c);
-
- /** test 9
- * We specify start date
- */
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_timet(tm1,1)),
- 0
- );
-
- span = icalcomponent_get_span(c);
- if (VERBOSE) print_span(tnum++,span);
- int_is("start date only", span.end, 973382399);
-
- icalcomponent_free(c);
-
- /* assert(icalerrno == ICAL_MALFORMEDDATA_ERROR); */
- icalerror_errors_are_fatal = 1;
-}
diff --git a/libical/src/test/regression-cxx.cpp b/libical/src/test/regression-cxx.cpp
deleted file mode 100644
index e7605b8531..0000000000
--- a/libical/src/test/regression-cxx.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "icalparameter_cxx.h"
-#include "icalproperty_cxx.h"
-#include "vcomponent.h"
-#include "regression.h"
-
-char content[] = "BEGIN:VCALENDAR\n\
-VERSION:2.1\n\
-BEGIN:VEVENT\n\
-UID:abcd12345\n\
-DTSTART:20020307T180000Z\n\
-DTEND:20020307T190000Z\n\
-SUMMARY:Important Meeting\n\
-END:VEVENT\n\
-END:VCALENDAR";
-
-void test_cxx(void)
-{
- ICalProperty *summProp = new ICalProperty(ICAL_SUMMARY_PROPERTY);
- ICalProperty *startProp = new ICalProperty(ICAL_DTSTART_PROPERTY);
- ICalProperty *endProp = new ICalProperty(ICAL_DTEND_PROPERTY);
- ICalProperty *locationProp = new ICalProperty(ICAL_LOCATION_PROPERTY);
- ICalProperty *descProp = new ICalProperty(ICAL_DESCRIPTION_PROPERTY);
-
- ok("Valid SUMMARY Property", (summProp != 0));
- ok("Valid DTSTART Property", (startProp != 0));
- ok("Valid DTEND Property", (endProp != 0));
- ok("Valid LOCATION Property", (locationProp != 0));
- ok("Valid DESCRIPTION Property", (descProp != 0));
-
- struct icaltimetype starttime = icaltime_from_string("20011221T180000Z"); // UTC time ends in Z
- struct icaltimetype endtime = icaltime_from_string("20020101T080000Z"); // UTC time ends in Z
-
- summProp->set_summary("jon said: change dir to c:\\rest\\test\\nest to get the file called <foo.dat>\nthis should be in the next line.");
- startProp->set_dtstart(starttime);
- endProp->set_dtend(endtime);
- locationProp->set_location("SF, California; Seattle, Washington");
- descProp->set_description("The best cities on the west coast, hit 'NO' if you don't agree!\n");
-
- VEvent *vEvent = new VEvent();
-
- ok("Create a new VEvent", (vEvent!=0));
-
- vEvent->add_property(summProp);
- vEvent->add_property(startProp);
- vEvent->add_property(endProp);
- vEvent->add_property(locationProp);
- vEvent->add_property(descProp);
-
- //
- is ("vEvent->get_summary()",
- vEvent->get_summary(),
- "jon said: change dir to c:\\rest\\test\\nest to get the file called <foo.dat>\nthis should be in the next line.");
-
- is ("vEvent->get_dtstart()",
- icaltime_as_ical_string(vEvent->get_dtstart()),
- "20011221T180000Z");
-
- is ("vEvent->get_dtend()",
- icaltime_as_ical_string(vEvent->get_dtend()),
- "20020101T080000Z");
-
- ok ("vEvent->as_ical_string()",
- (vEvent->as_ical_string() != 0));
-
- if (VERBOSE) {
- printf("Summary: %s\n", vEvent->get_summary());
- printf("DTSTART: %s\n", icaltime_as_ical_string(vEvent->get_dtstart()));
- printf("DTEND: %s\n", icaltime_as_ical_string(vEvent->get_dtend()));
- printf("LOCATION: %s\n", vEvent->get_location());
- printf("DESCRIPTION: %s\n", vEvent->get_description());
-
- printf("vcomponent: %s", vEvent->as_ical_string());
- }
-
- VComponent ic(icalparser_parse_string((const char*)content));
- ok("Parsing component", (ic.is_valid()));
-
- if (VERBOSE)
- printf("%s\n", ic.as_ical_string());
-
- // component is wrapped within BEGIN:VCALENDAR END:VCALENDAR
- // we need to unwrap it.
-
- VEvent* sub_ic = dynamic_cast<VEvent*>(ic.get_first_component(ICAL_VEVENT_COMPONENT));
-
- int_is("Getting VEvent subcomponent",
- sub_ic->isa(),
- ICAL_VEVENT_COMPONENT);
-
- while (sub_ic != NULL) {
- if (VERBOSE)
- printf("subcomponent: %s\n", sub_ic->as_ical_string());
-
- sub_ic = dynamic_cast<VEvent*>(ic.get_next_component(ICAL_VEVENT_COMPONENT));
- }
-
- VCalendar* cal = new VCalendar();
- VAgenda* vAgenda = new VAgenda();
-
- ok("Create a new VCalendar object", (cal != 0));
- ok("Create a new VAgenda object", (vAgenda != 0));
-
- ICalProperty* prop = new ICalProperty(ICAL_OWNER_PROPERTY);
- prop->set_owner("fred@flintstone.net");
- vAgenda->add_property(prop);
-
- prop = new ICalProperty(ICAL_SUMMARY_PROPERTY);
- prop->set_summary("CPMain");
- vAgenda->add_property(prop);
-
- prop = new ICalProperty(ICAL_TZID_PROPERTY);
- prop->set_tzid("America/Los_Angeles");
- vAgenda->add_property(prop);
-
- cal->add_component(vAgenda);
-
- ok("Complex VCALENDAR/VAGENDA", (cal->as_ical_string() != 0));
-
- if (VERBOSE)
- printf("vAgenda: %s\n", cal->as_ical_string());
-
- int caughtException = 0;
- try {
- string foo = "HFHFHFHF";
- VComponent v = VComponent(foo);
- } catch (icalerrorenum err) {
- if (err == ICAL_BADARG_ERROR) {
- caughtException = 1;
- }
- }
- int_is("Testing exception handling", caughtException, 1);
-
-}
-
diff --git a/libical/src/test/regression-recur.c b/libical/src/test/regression-recur.c
deleted file mode 100644
index 793eb402c8..0000000000
--- a/libical/src/test/regression-recur.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: regression-recur.c
- CREATOR: ebusboom 8jun00
-
- DESCRIPTION:
-
- (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.
-
- ======================================================================*/
-
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-#include <signal.h> /* for signal */
-#ifndef WIN32
-#include <unistd.h> /* for alarm */
-#endif
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-#include "regression.h"
-
-extern int VERBOSE;
-
-#ifdef WIN32
-#define snprintf _snprintf
-#define strcasecmp stricmp
-#endif
-
-
-static void sig_alrm(int i){
- fprintf(stderr,"Could not get lock on file\n");
- exit(1);
-}
-
-/* Get the expected result about the purpose of the property*/
-
-static int get_expected_numevents(icalcomponent *c)
-{
- icalproperty *p;
- const char* note = 0;
- int num_events = 0;
-
- if(c != 0){
- for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){
- if(strcmp(icalproperty_get_x_name(p),"X-EXPECT-NUMEVENTS")==0){
- note = icalproperty_get_x(p);
- }
- }
- }
-
- if(note != 0){
- num_events = atoi(note);
- }
-
-
- return num_events;
-}
-
-
-
-static void recur_callback(icalcomponent *comp,
- struct icaltime_span *span,
- void *data)
-{
- int *num_recurs = data;
-
- if (VERBOSE) {
- printf("recur: %s", ctime(&span->start));
- printf(" %s", ctime(&span->end));
- }
- *num_recurs = *num_recurs + 1;
-}
-
-void test_recur_file()
-{
- icalset *cin = 0;
- struct icaltimetype next;
- icalcomponent *itr;
- icalproperty *desc, *dtstart, *rrule;
- struct icalrecurrencetype recur;
- icalrecur_iterator* ritr;
- time_t tt;
- char* file;
- int num_recurs_found = 0;
-
- icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL);
-
-#ifndef WIN32
- signal(SIGALRM,sig_alrm);
-#endif
- file = getenv("ICAL_RECUR_FILE");
- if (!file)
- file = "../../test-data/recur.txt";
-
-#ifndef WIN32
- alarm(15); /* to get file lock */
-#endif
- cin = icalfileset_new(file);
-#ifndef WIN32
- alarm(0);
-#endif
-
- ok("opening file with recurring events", (cin!=NULL));
- assert(cin!=NULL);
-
- for (itr = icalfileset_get_first_component(cin);
- itr != 0;
- itr = icalfileset_get_next_component(cin)){
- int badcomp = 0;
- int expected_events = 0;
- char msg[128];
-
-
- struct icaltimetype start = icaltime_null_time();
- struct icaltimetype startmin = icaltime_from_timet(1,0);
- struct icaltimetype endmax = icaltime_null_time();
- const char *desc_str = "malformed component";
-
- desc = icalcomponent_get_first_property(itr,ICAL_DESCRIPTION_PROPERTY);
- dtstart = icalcomponent_get_first_property(itr,ICAL_DTSTART_PROPERTY);
- rrule = icalcomponent_get_first_property(itr,ICAL_RRULE_PROPERTY);
- if (desc) {
- desc_str = icalproperty_get_description(desc);
- }
-
- ok((char*)desc_str, !(desc == 0 || dtstart == 0 || rrule == 0));
-
- if (desc == 0 || dtstart == 0 || rrule == 0) {
- badcomp = 1;
- if (VERBOSE) {
- printf("\n******** Error in input component ********\n");
- printf("The following component is malformed:\n %s\n", desc_str);
- }
- continue;
- }
- if (VERBOSE) {
- printf("\n\n#### %s\n",desc_str);
- printf("#### %s\n",icalvalue_as_ical_string(icalproperty_get_value(rrule)));
- }
-
- recur = icalproperty_get_rrule(rrule);
- start = icalproperty_get_dtstart(dtstart);
-
- ritr = icalrecur_iterator_new(recur,start);
-
- tt = icaltime_as_timet(start);
-
- if (VERBOSE)
- printf("#### %s\n",ctime(&tt ));
-
- icalrecur_iterator_free(ritr);
-
- for(ritr = icalrecur_iterator_new(recur,start),
- next = icalrecur_iterator_next(ritr);
- !icaltime_is_null_time(next);
- next = icalrecur_iterator_next(ritr)){
-
- tt = icaltime_as_timet(next);
-
- if (VERBOSE)
- printf(" %s",ctime(&tt ));
-
- }
-
- icalrecur_iterator_free(ritr);
- num_recurs_found = 0;
- expected_events = get_expected_numevents(itr);
-
- icalcomponent_foreach_recurrence(itr, startmin, endmax,
- recur_callback, &num_recurs_found);
-
- sprintf(msg," expecting total of %d events", expected_events);
- int_is(msg, num_recurs_found, expected_events);
- }
-
- icalset_free(cin);
-}
diff --git a/libical/src/test/regression-storage.c b/libical/src/test/regression-storage.c
deleted file mode 100644
index ea59767014..0000000000
--- a/libical/src/test/regression-storage.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: regression-storage.c
- CREATOR: eric 03 April 1999
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (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
- The original code is usecases.c
-
-
- ======================================================================*/
-
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-#include "regression.h"
-
-#define OUTPUT_FILE "filesetout.ics"
-
-/* define sample calendar struct */
-struct calendar {
- int ID;
- int total_size;
-
- /* offsets */
- int total_size_offset;
- int vcalendar_size_offset;
- int vcalendar_offset;
- int title_size_offset;
- int title_offset;
-
- /* data */
- int vcalendar_size;
- char *vcalendar;
-
- int title_size;
- char *title;
-
-};
-
-int vcalendar_init(struct calendar **cal, char *vcalendar, char *title);
-
-#ifdef WITH_BDB
-#include <db.h>
-
-int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);
-char * parse_vcalendar(const DBT *dbt) ;
-char * pack_calendar(struct calendar *cal, int size);
-struct calendar * unpack_calendar(char *str, int size);
-#endif
-
-static char str[] = "BEGIN:VCALENDAR\n\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\
-VERSION:2.0\n\
-BEGIN:VTIMEZONE\n\
-TZID:US-Eastern\n\
-BEGIN:STANDARD\n\
-DTSTART:19981025T020000\n\
-RDATE:19981025T020000\n\
-TZOFFSETFROM:-0400\n\
-TZOFFSETTO:-0500\n\
-TZNAME:EST\n\
-END:STANDARD\n\
-BEGIN:DAYLIGHT\n\
-DTSTART:19990404T020000\n\
-RDATE:19990404T020000\n\
-TZOFFSETFROM:-0500\n\
-TZOFFSETTO:-0400\n\
-TZNAME:EDT\n\
-END:DAYLIGHT\n\
-END:VTIMEZONE\n\
-BEGIN:VEVENT\n\
-DTSTAMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\
-DESCRIPTION:Project XYZ Review Meeting\n\
-CATEGORIES:MEETING\n\
-CLASS:PUBLIC\n\
-CREATED:19980309T130000Z\n\
-SUMMARY:XYZ Project Review\n\
-DTSTART;TZID=US-Eastern:19980312T083000\n\
-DTEND;TZID=US-Eastern:19980312T093000\n\
-LOCATION:1CP Conference Room 4350\n\
-END:VEVENT\n\
-BEGIN:BOOGA\n\
-DTSTAMP:19980309T231000Z\n\
-X-LIC-FOO:Booga\n\
-DTSTOMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-END:BOOGA\n\
-END:VCALENDAR";
-
-char str2[] = "BEGIN:VCALENDAR\n\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\
-VERSION:2.0\n\
-BEGIN:VEVENT\n\
-DTSTAMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\
-DESCRIPTION:Project XYZ Review Meeting\n\
-CATEGORIES:MEETING\n\
-CLASS:PUBLIC\n\
-CREATED:19980309T130000Z\n\
-SUMMARY:XYZ Project Review\n\
-DTSTART;TZID=US-Eastern:19980312T083000\n\
-DTEND;TZID=US-Eastern:19980312T093000\n\
-LOCATION:1CP Conference Room 4350\n\
-END:VEVENT\n\
-END:VCALENDAR\n\
-";
-
-
-void test_fileset_extended(void)
-{
- icalset *cout;
- int month = 0;
- int count=0;
- struct icaltimetype start, end;
- icalcomponent *c,*clone, *itr;
- icalsetiter iter;
-
- start = icaltime_from_timet( time(0),0);
- end = start;
- end.hour++;
-
- cout = icalfileset_new(OUTPUT_FILE);
- ok("Opening output file", (cout != 0));
- assert(cout!=0);
-
- c = icalparser_parse_string(str2);
- ok("Parsing str2", (c!=0));
- assert(c != 0);
-
- icalset_free(cout);
-
- /* Add data to the file */
-
- for(month = 1; month < 10; month++){
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- cout = icalfileset_new(OUTPUT_FILE);
- ok("Opening output file", (cout != 0));
- assert(cout != 0);
-
- start.month = month;
- end.month = month;
-
- clone = icalcomponent_new_clone(c);
- ok("Making clone of output file", (clone!=0));
- assert(clone !=0);
-
- event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT);
- ok("Getting first event from clone", (event!=0));
- assert(event != 0);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- ok("find DTSTART", (dtstart !=0));
- assert(dtstart!=0);
-
- icalproperty_set_dtstart(dtstart,start);
-
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
- ok("find DTEND", (dtend !=0));
-
- assert(dtend!=0);
-
- icalproperty_set_dtend(dtend,end);
-
- icalfileset_add_component(cout,clone);
- icalfileset_commit(cout);
-
- icalset_free(cout);
- }
-
- /* Print them out */
-
- cout = icalfileset_new(OUTPUT_FILE);
-
- ok("Opening output file", (cout != 0));
- assert(cout != 0);
-
- for (iter = icalfileset_begin_component(cout, ICAL_ANY_COMPONENT, 0);
- icalsetiter_deref(&iter) != 0; icalsetiter_next(&iter)) {
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- itr = icalsetiter_deref(&iter);
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- if (VERBOSE)
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
-
- /* Remove all of them */
-
- icalset_free(cout);
-
- cout = icalfileset_new(OUTPUT_FILE);
- ok("Opening output file", (cout!=0));
- assert(cout != 0);
-
- /* need to advance the iterator first before calling remove_componenet() */
- /* otherwise, iter will contain a "removed" component and icalsetiter_next(&iter) */
- /* will fail. */
-
- iter = icalfileset_begin_component(cout, ICAL_ANY_COMPONENT, 0);
- itr = icalsetiter_deref(&iter);
- while (itr != 0) {
- icalsetiter_next(&iter);
- icalfileset_remove_component(cout, itr);
- icalcomponent_free(itr);
- itr = icalsetiter_deref(&iter);
- }
-
- icalset_free(cout);
-
- /* Print them out again */
-
- cout = icalfileset_new(OUTPUT_FILE);
- ok("Opening output file", (cout != 0));
- assert(cout != 0);
- count =0;
-
- for (itr = icalfileset_get_first_component(cout);
- itr != 0;
- itr = icalfileset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
-
- icalset_free(cout);
- icalcomponent_free(c);
-}
-
-
-#ifdef WITH_BDB
-
-/*
- In this example, we're storing a calendar with several components
- under the reference id "calendar_7286" and retrieving records based
- on title, "month_1" through "month_10". We use a number of the
- "optional" arguments to specify secondary indices, sub-databases
- (i.e. having multiple databases residing within a single Berkeley
- DB file), and keys for storage and retrieval.
-*/
-
-void test_bdbset()
-{
- icalset *cout;
- int month = 0;
- int count=0;
- int num_components=0;
- int szdata_len=0;
- int ret=0;
- char *subdb, *szdata, *szpacked_data;
- char uid[255];
- struct icaltimetype start, end;
- icalcomponent *c,*clone, *itr;
- DBT key, data;
- DBC *dbcp;
-
- struct calendar *cal;
- int cal_size;
-
- return; // for now... TODO fix these broken tests..
-
-
-
- start = icaltime_from_timet( time(0),0);
- end = start;
- end.hour++;
-
- /* Note: as per the Berkeley DB ref pages:
- *
- * The database argument is optional, and allows applications to
- * have multiple databases in a single file. Although no database
- * argument needs to be specified, it is an error to attempt to
- * open a second database in a file that was not initially created
- * using a database name.
- *
- */
-
- subdb = "calendar_id";
-
- /* open database, using subdb */
- cout = icalbdbset_new("calendar.db", ICALBDB_EVENTS, DB_HASH, 0);
- /*
- sdbp = icalbdbset_secondary_open(dbp,
- DATABASE,
- "title",
- get_title,
- DB_HASH);
- */
-
- c = icalparser_parse_string(str2);
-
- assert(c != 0);
-
- /* Add data to the file */
-
- for(month = 1; month < 10; month++){
- icalcomponent *event;
- icalproperty *dtstart, *dtend, *location;
-
- /* retrieve data */
- // cout = icalbdbset_new(dbp, sdbp, NULL);
- // assert(cout != 0);
-
- start.month = month;
- end.month = month;
-
- clone = icalcomponent_new_clone(c);
- assert(clone !=0);
- event = icalcomponent_get_first_component(clone,
- ICAL_VEVENT_COMPONENT);
- assert(event != 0);
-
- dtstart = icalcomponent_get_first_property(event,
- ICAL_DTSTART_PROPERTY);
- assert(dtstart!=0);
- icalproperty_set_dtstart(dtstart,start);
-
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
- assert(dtend!=0);
- icalproperty_set_dtend(dtend,end);
-
- location = icalcomponent_get_first_property(event, ICAL_LOCATION_PROPERTY);
- assert(location!=0);
-
-#if 0
- /* change the uid to include the month */
- sprintf(uid, "%s_%d", icalcomponent_get_uid(clone), month);
- icalcomponent_set_uid(clone, uid);
-#endif
-
- icalbdbset_add_component(cout,clone);
-
- /* commit changes */
- icalbdbset_commit(cout);
-
- num_components = icalcomponent_count_components(clone, ICAL_ANY_COMPONENT);
-
- icalset_free(cout);
-
- }
-
- /* try out the cursor operations */
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
-#if 0
- ret = icalbdbset_acquire_cursor(dbp, &dbcp);
- ret = icalbdbset_get_first(dbcp, &key, &data);
- ret = icalbdbset_get_next(dbcp, &key, &data);
- ret = icalbdbset_get_last(dbcp, &key, &data);
-#endif
- /* Print them out */
-
- for(month = 1, count=0; month < 10; month++){
- char *title;
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
- icalset_free(cout);
- }
-
- /* open database */
- // cout = icalbdbset_bdb_open("calendar.db", "title", DB_HASH, 0644);
- /* sdbp = icalbdbset_secondary_open(dbp,
- DATABASE,
- "title",
- get_title,
- DB_HASH);
- */
- /* Remove all of them */
- for(month = 1; month < 10; month++){
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalbdbset_remove_component(cout, itr);
- }
-
- icalbdbset_commit(cout);
- icalset_free(cout);
-
- }
-
- /* Print them out again */
-
- for(month = 1, count=0; month < 10; month++){
- char *title;
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
- icalset_free(cout);
- }
-}
-#endif
-
-int vcalendar_init(struct calendar **rcal, char *vcalendar, char *title)
-{
- int vcalendar_size, title_size, total_size;
- struct calendar *cal;
-
- if(vcalendar)
- vcalendar_size = strlen(vcalendar);
- else {
- vcalendar = "";
- vcalendar_size = strlen(vcalendar);
- }
-
- if(title)
- title_size = strlen(title);
- else {
- title = "";
- title_size = strlen(title);
- }
-
- total_size = sizeof(struct calendar) + vcalendar_size + title_size;
-
- if((cal = (struct calendar *)malloc(total_size))==NULL)
- return 0;
- memset(cal, 0, total_size);
-
- /* offsets */
- cal->total_size_offset = sizeof(int);
- cal->vcalendar_size_offset = (sizeof(int) * 7);
- cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int);
- cal->title_size_offset = cal->vcalendar_offset + vcalendar_size;
- cal->title_offset = cal->title_size_offset + sizeof(int);
-
- /* sizes */
- cal->total_size = total_size;
- cal->vcalendar_size = vcalendar_size;
- cal->title_size = title_size;
-
- if (vcalendar && *vcalendar)
- cal->vcalendar = strdup(vcalendar);
-
- if (title && *title)
- cal->title = strdup(title);
-
- *rcal = cal;
-
- return 0;
-}
-
-/* get_title -- extracts a secondary key (the vcalendar)
- * from a primary key/data pair */
-
-/* just create a random title for now */
-#ifdef WITH_BDB
-
-int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey)
-{
- icalcomponent *cl;
- char title[255];
-
- memset(skey, 0, sizeof(DBT));
-
- cl = icalparser_parse_string((char *)pdata->data);
- sprintf(title, "title_%s", icalcomponent_get_uid(cl));
-
- skey->data = strdup(title);
- skey->size = strlen(skey->data);
- return (0);
-}
-
-char * pack_calendar(struct calendar *cal, int size)
-{
- char *str;
-
- if((str = (char *)malloc(sizeof(char) * size))==NULL)
- return 0;
-
- /* ID */
- memcpy(str, &cal->ID, sizeof(cal->ID));
-
- /* total_size */
- memcpy(str + cal->total_size_offset,
- &cal->total_size,
- sizeof(cal->total_size));
-
- /* vcalendar_size */
- memcpy(str + cal->vcalendar_size_offset,
- &cal->vcalendar_size,
- sizeof(cal->vcalendar_size));
-
- /* vcalendar */
- memcpy(str + cal->vcalendar_offset,
- cal->vcalendar,
- cal->vcalendar_size);
-
- /* title_size */
- memcpy(str + cal->title_size_offset,
- &cal->title_size,
- sizeof(cal->title_size));
-
- /* title */
- memcpy(str + cal->title_offset,
- cal->title,
- cal->title_size);
-
- return str;
-}
-
-struct calendar * unpack_calendar(char *str, int size)
-{
- struct calendar *cal;
- if((cal = (struct calendar *) malloc(size))==NULL)
- return 0;
- memset(cal, 0, size);
-
- /* offsets */
- cal->total_size_offset = sizeof(int);
- cal->vcalendar_size_offset = (sizeof(int) * 7);
- cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int);
-
- /* ID */
- memcpy(&cal->ID, str, sizeof(cal->ID));
-
- /* total_size */
- memcpy(&cal->total_size,
- str + cal->total_size_offset,
- sizeof(cal->total_size));
-
- /* vcalendar_size */
- memcpy(&cal->vcalendar_size,
- str + cal->vcalendar_size_offset,
- sizeof(cal->vcalendar_size));
-
- if((cal->vcalendar = (char *)malloc(sizeof(char) *
- cal->vcalendar_size))==NULL)
- return 0;
-
- /* vcalendar */
- memcpy(cal->vcalendar,
- (char *)(str + cal->vcalendar_offset),
- cal->vcalendar_size);
-
- cal->title_size_offset = cal->vcalendar_offset + cal->vcalendar_size;
- cal->title_offset = cal->title_size_offset + sizeof(int);
-
- /* title_size */
- memcpy(&cal->title_size,
- str + cal->title_size_offset,
- sizeof(cal->title_size));
-
- if((cal->title = (char *)malloc(sizeof(char) *
- cal->title_size))==NULL)
- return 0;
-
- /* title*/
- memcpy(cal->title,
- (char *)(str + cal->title_offset),
- cal->title_size);
-
- return cal;
-}
-
-char * parse_vcalendar(const DBT *dbt)
-{
- char *str;
- struct calendar *cal;
-
- str = (char *)dbt->data;
- cal = unpack_calendar(str, dbt->size);
-
- return cal->vcalendar;
-}
-#endif
-
-void test_dirset_extended(void)
-{
-
- icalcomponent *c;
- icalgauge *gauge;
- icalerrorenum error;
- icalcomponent *itr;
- icalset* cluster;
- struct icalperiodtype rtime;
- icalset *s = icaldirset_new("store");
- icalset *s2 = icaldirset_new("store-new");
- int i, count = 0;
-
- ok("Open dirset 'store'", (s!=0));
- assert(s != 0);
-
- rtime.start = icaltime_from_timet( time(0),0);
-
- cluster = icalfileset_new(OUTPUT_FILE);
-
- ok("Open fileset to duplicate 4 times", (cluster != 0));
- assert(cluster != 0);
-
-#define NUMCOMP 4
-
- /* Duplicate every component in the cluster NUMCOMP times */
-
- icalerror_clear_errno();
-
- for (i = 1; i<NUMCOMP+1; i++){
-
- /*rtime.start.month = i%12;*/
- rtime.start.month = i;
- rtime.end = rtime.start;
- rtime.end.hour++;
-
- for (itr = icalfileset_get_first_component(cluster);
- itr != 0;
- itr = icalfileset_get_next_component(cluster)){
- icalcomponent *clone, *inner;
- icalproperty *p;
-
- inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
- if (inner == 0){
- continue;
- }
-
- /* Change the dtstart and dtend times in the component
- pointed to by Itr*/
-
- clone = icalcomponent_new_clone(itr);
- inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- ok("Duplicating component...",
- (icalerrno == ICAL_NO_ERROR)&&(inner!=0));
-
- assert(icalerrno == ICAL_NO_ERROR);
- assert(inner !=0);
-
- /* DTSTART*/
- p = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY);
- ok("Fetching DTSTART", (icalerrno == ICAL_NO_ERROR));
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.start);
- icalcomponent_add_property(inner,p);
- } else {
- icalproperty_set_dtstart(p,rtime.start);
- }
-
- ok("Adding DTSTART property", (icalerrno == ICAL_NO_ERROR));
- assert(icalerrno == ICAL_NO_ERROR);
-
- /* DTEND*/
- p = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY);
- ok("Fetching DTEND property", (icalerrno == ICAL_NO_ERROR));
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.end);
- icalcomponent_add_property(inner,p);
- } else {
- icalproperty_set_dtstart(p,rtime.end);
- }
- ok("Setting DTEND property", (icalerrno == ICAL_NO_ERROR));
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (VERBOSE)
- printf("\n----------\n%s\n---------\n",icalcomponent_as_ical_string(inner));
-
- error = icaldirset_add_component(s,
- icalcomponent_new_clone(itr));
-
- ok("Adding component to dirset", (icalerrno == ICAL_NO_ERROR));
- assert(icalerrno == ICAL_NO_ERROR);
- }
-
- }
-
- gauge = icalgauge_new_from_sql("SELECT * FROM VEVENT WHERE VEVENT.SUMMARY = 'Submit Income Taxes' OR VEVENT.SUMMARY = 'Bastille Day Party'", 0);
-
- ok("Creating complex Gauge", (gauge!=0));
-
- icaldirset_select(s,gauge);
-
- for(c = icaldirset_get_first_component(s); c != 0;
- c = icaldirset_get_next_component(s)){
-
- printf("Got one! (%d)\n", count++);
-
- if (c != 0){
- printf("%s", icalcomponent_as_ical_string(c));;
- if (icaldirset_add_component(s2,c) == 0){
- printf("Failed to write!\n");
- }
- icalcomponent_free(c);
- } else {
- printf("Failed to get component\n");
- }
- }
-
- icalset_free(s2);
-
- for(c = icaldirset_get_first_component(s);
- c != 0;
- c = icaldirset_get_next_component(s)){
-
- if (c != 0){
- printf("%s", icalcomponent_as_ical_string(c));;
- } else {
- printf("Failed to get component\n");
- }
-
- }
-
- /* Remove all of the components */
- i=0;
- while((c=icaldirset_get_current_component(s)) != 0 ){
- i++;
-
- icaldirset_remove_component(s,c);
- }
-
-
- icalset_free(s);
- icalset_free(cluster);
-}
-
diff --git a/libical/src/test/regression-utils.c b/libical/src/test/regression-utils.c
deleted file mode 100644
index 685e9fe94a..0000000000
--- a/libical/src/test/regression-utils.c
+++ /dev/null
@@ -1,169 +0,0 @@
-#include <libical/ical.h>
-
-#include <stdlib.h> /* abort() */
-#include <string.h> /* strcmp() */
-
-static char ictt_str[1024];
-int VERBOSE = 0;
-int QUIET = 0;
-
-const char* ical_timet_string(const time_t t)
-{
- struct tm stm = *(gmtime(&t));
-
- sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z",stm.tm_year+1900,
- stm.tm_mon+1,stm.tm_mday,stm.tm_hour,stm.tm_min,stm.tm_sec);
-
- return ictt_str;
-
-}
-
-const char* ictt_as_string(struct icaltimetype t)
-{
- const char *zone = icaltimezone_get_tzid((icaltimezone *)t.zone);
-
- if (icaltime_is_utc(t))
- sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z UTC",
- t.year,t.month,t.day, t.hour,t.minute,t.second);
- else
- sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d %s",
- t.year,t.month,t.day, t.hour,t.minute,t.second,
- zone == NULL? "(floating)": zone);
-
- return ictt_str;
-}
-
-char* icaltime_as_ctime(struct icaltimetype t)
-{
- time_t tt;
-
- tt = icaltime_as_timet(t);
- sprintf(ictt_str,"%s",ctime(&tt));
-
- return ictt_str;
-}
-
-
-/** This variable is used to control whether we core dump on errors **/
-static int die_on_errors = 0;
-static int testnumber = 0;
-static int failed = 0;
-static int current_set = 0;
-
-static struct {int set; int test;} failed_tests[1024];
-
-void die_on_errors_set(int val) {
- die_on_errors = 1;
-}
-
-void _ok(char* test_name, int success, char *file, int linenum, char *test) {
- testnumber++;
-
- if (!QUIET || (QUIET && !success))
- printf("%sok %d - %s\n", (success)?"" : "not ", testnumber, test_name);
- if (!success) {
- failed_tests[failed].set = current_set;
- failed_tests[failed].test = testnumber;
- failed++;
-
- printf("# test failed: \"%s\"\n", test);
- printf("# at: %s:%-d\n", file, linenum);
- }
-
- if (die_on_errors == 1 && !success) {
- abort();
- }
-}
-
-void _is(char* test_name, const char* str1, const char* str2, char *file, int linenum) {
- int diff;
-
- if (str1 == NULL || str2 == NULL) {
- diff = 1;
- } else {
- diff = strcmp(str1, str2);
- }
-
- if (!test_name) test_name = "()";
-
- _ok(test_name, (diff==0), file, linenum, "");
-
- if (diff) {
- printf("# got: %s\n", str1 ? str1 : "(null)");
- printf("# expected: %s\n", str2 ? str2 : "(null)");
- }
-}
-
-void _int_is(char* test_name, int i1, int i2, char *file, int linenum) {
- _ok(test_name, (i1==i2), file, linenum, "");
-
- if (i1!=i2) {
- printf("# got: %d\n", i1);
- printf("# expected: %d\n", i2);
- }
-}
-
-
-void verbose(int newval) {
- VERBOSE = newval;
-}
-
-void test_start(int numtests) {
- if (numtests) {
- if (!QUIET)
- printf("1..%-d\n", numtests);
- } else {
- if (!QUIET)
- printf("1..\n");
- }
-}
-
-void test_header(char *header, int set) {
- if (!QUIET)
- printf("########## %-40s (%d) ##########\n", header, set);
- current_set = set;
-}
-
-void test_end(void) {
- int pct;
-
- if (failed) {
- int i, oldset = 0;
-
- pct = ((testnumber - failed)*100)/testnumber;
- printf("\n Failed %d/%d tests, %2d%% okay\n", failed, testnumber, pct);
- printf("\n Failed tests:\n ");
- for (i = 0; i < failed; i++) {
- int this_set = failed_tests[i].set;
- char *prefix = "";
- if (this_set != oldset) {
- prefix = "\n ";
- oldset = this_set;
- }
-
- printf("%s%d/%d ", prefix, this_set, failed_tests[i].test);
- }
- printf("\n");
-
- } else {
- printf("\n All Tests Successful.\n");
- }
-}
-
-
-void test_run(char *test_name,
- void (*test_fcn)(void),
- int do_test, int headeronly)
-{
- static int test_set = 1;
-
- if (headeronly || do_test == 0 || do_test == test_set)
- test_header(test_name, test_set);
-
- if (!headeronly && (do_test==0 || do_test == test_set)) {
- (*test_fcn)();
- if (!QUIET)
- printf("\n");
- }
- test_set++;
-}
diff --git a/libical/src/test/regression.c b/libical/src/test/regression.c
deleted file mode 100644
index 034764551b..0000000000
--- a/libical/src/test/regression.c
+++ /dev/null
@@ -1,3667 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: regression.c
- CREATOR: eric 03 April 1999
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (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
- The original code is regression.c
-
-
- ======================================================================*/
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-#include <libicalvcal/icalvcal.h>
-
-#include "regression.h"
-
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-#ifndef WIN32
-#include <unistd.h> /* for unlink, fork */
-#include <sys/wait.h> /* For waitpid */
-#include <sys/time.h> /* for select */
-#else
-#include <Windows.h>
-#endif
-#include <sys/types.h> /* For wait pid */
-
-#ifdef WIN32
-typedef int pid_t;
-#endif
-
-
-/* For GNU libc, strcmp appears to be a macro, so using strcmp in
- assert results in incomprehansible assertion messages. This
- eliminates the problem */
-
-int regrstrcmp(const char* a, const char* b){
- return strcmp(a,b);
-}
-
-/* This example creates and minipulates the ical object that appears
- * in rfc 2445, page 137 */
-
-static char str[] = "BEGIN:VCALENDAR\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\
-VERSION:2.0\
-BEGIN:VTIMEZONE\
-TZID:America/New_York\
-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=America/New_York:19980312T083000\
-DTEND;TZID=America/New_York:19980312T093000\
-LOCATION:1CP Conference Room 4350\
-END:VEVENT\
-BEGIN:BOOGA\
-DTSTAMP:19980309T231000Z\
-X-LIC-FOO:Booga\
-DTSTOMP:19980309T231000Z\
-UID:guid-1.host1.com\
-END:BOOGA\
-END:VCALENDAR";
-
-
-
-/* Return a list of all attendees who are required. */
-
-static char** get_required_attendees(icalcomponent* event)
-{
- icalproperty* p;
- icalparameter* parameter;
-
- char **attendees;
- int max = 10;
- int c = 0;
-
- attendees = malloc(max * (sizeof (char *)));
-
- ok("event is non null", (event != 0));
- int_is("event is a VEVENT", icalcomponent_isa(event), ICAL_VEVENT_COMPONENT);
-
- for(
- p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY)
- ) {
-
- parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER);
-
- if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT)
- {
- attendees[c++] = icalmemory_strdup(icalproperty_get_attendee(p));
-
- if (c >= max) {
- max *= 2;
- attendees = realloc(attendees, max * (sizeof (char *)));
- }
-
- }
- }
-
- return attendees;
-}
-
-/* If an attendee has a PARTSTAT of NEEDSACTION or has no PARTSTAT
- parameter, change it to TENTATIVE. */
-
-static void update_attendees(icalcomponent* event)
-{
- icalproperty* p;
- icalparameter* parameter;
-
-
- assert(event != 0);
- assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT);
-
- for(
- p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY)
- ) {
-
- parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER);
-
- if (parameter == 0) {
-
- icalproperty_add_parameter(
- p,
- icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE)
- );
-
- } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) {
-
- icalproperty_remove_parameter_by_ref(p,parameter);
-
- icalparameter_free(parameter);
-
- icalproperty_add_parameter(
- p,
- icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE)
- );
- }
-
- }
-}
-
-
-void test_values()
-{
- icalvalue *v;
- icalvalue *copy;
-
- v = icalvalue_new_caladdress("cap://value/1");
-
- is("icalvalue_new_caladdress()",
- icalvalue_get_caladdress(v), "cap://value/1");
-
- icalvalue_set_caladdress(v,"cap://value/2");
-
- is("icalvalue_set_caladdress()",
- icalvalue_get_caladdress(v), "cap://value/2");
-
- is("icalvalue_as_ical_string()",
- icalvalue_as_ical_string(v), "cap://value/2");
-
- copy = icalvalue_new_clone(v);
-
- is("icalvalue_new_clone()",
- icalvalue_as_ical_string(copy), "cap://value/2");
- icalvalue_free(v);
- icalvalue_free(copy);
-
-
- v = icalvalue_new_boolean(1);
- int_is("icalvalue_new_boolean(1)", icalvalue_get_boolean(v), 1);
- icalvalue_set_boolean(v,2);
- ok("icalvalue_set_boolean(2)", (2 == icalvalue_get_boolean(v)));
- is("icalvalue_as_ical_string()", icalvalue_as_ical_string(v), "2");
-
- copy = icalvalue_new_clone(v);
- is("icalvalue_new_clone()", icalvalue_as_ical_string(copy), "2");
-
- icalvalue_free(v);
- icalvalue_free(copy);
-
-
- v = icalvalue_new_x("test");
- is("icalvalue_new_x(test)", icalvalue_get_x(v), "test");
- icalvalue_set_x(v, "test2");
- is("icalvalue_set_x(test2)", icalvalue_get_x(v), "test2");
- is("icalvalue_as_ical_string()", icalvalue_as_ical_string(v), "test2");
-
- copy = icalvalue_new_clone(v);
- is("icalvalue_new_clone()", icalvalue_as_ical_string(copy), "test2");
-
- icalvalue_free(v);
- icalvalue_free(copy);
-
-
- v = icalvalue_new_date(icaltime_from_timet( 1023404802,0));
- is("icalvalue_new_date()", icalvalue_as_ical_string(v), "20020606T230642");
- icalvalue_set_date(v,icaltime_from_timet( 1023404802-3600,0));
- is("icalvalue_set_date()",icalvalue_as_ical_string(v), "20020606T220642");
-
- copy = icalvalue_new_clone(v);
- is("icalvalue_new_clone()",icalvalue_as_ical_string(v), "20020606T220642");
-
- icalvalue_free(v);
- icalvalue_free(copy);
-
-
- v = icalvalue_new(-1);
-
- ok("icalvalue_new(-1), Invalid type", (v == NULL));
-
- if (v!=0) icalvalue_free(v);
-
- ok("ICAL_BOOLEAN_VALUE",(ICAL_BOOLEAN_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_BOOLEAN)));
- ok("ICAL_UTCOFFSET_VALUE",(ICAL_UTCOFFSET_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_UTCOFFSET)));
- ok("ICAL_RECUR_VALUE", (ICAL_RECUR_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_RECUR)));
- ok("ICAL_CALADDRESS_VALUE",(ICAL_CALADDRESS_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_CALADDRESS)));
- ok("ICAL_PERIOD_VALUE", (ICAL_PERIOD_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_PERIOD)));
- ok("ICAL_BINARY_VALUE",(ICAL_BINARY_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_BINARY)));
- ok("ICAL_TEXT_VALUE",(ICAL_TEXT_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_TEXT)));
- ok("ICAL_DURATION_VALUE",(ICAL_DURATION_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_DURATION)));
- ok("ICAL_INTEGER_VALUE",
- (ICAL_INTEGER_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_INTEGER)));
-
- ok("ICAL_URI_VALUE",
- (ICAL_URI_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_URI)));
- ok("ICAL_FLOAT_VALUE",(ICAL_FLOAT_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_FLOAT)));
- ok("ICAL_X_VALUE",(ICAL_X_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_X)));
- ok("ICAL_DATETIME_VALUE",(ICAL_DATETIME_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_DATETIME)));
- ok("ICAL_DATE_TIME",(ICAL_DATE_VALUE ==
- icalparameter_value_to_value_kind(ICAL_VALUE_DATE)));
-
- /* v = icalvalue_new_caladdress(0);
-
- printf("Bad string: %p\n",v);
-
- if (v!=0) icalvalue_free(v); */
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR, ICAL_ERROR_NONFATAL);
- v = icalvalue_new_from_string(ICAL_RECUR_VALUE,"D2 #0");
- ok("illegal recur value", (v == 0));
-
- v = icalvalue_new_from_string(ICAL_TRIGGER_VALUE,"Gonk");
- ok("illegal trigger value", (v == 0));
-
- v = icalvalue_new_from_string(ICAL_REQUESTSTATUS_VALUE,"Gonk");
- ok("illegal requeststatus value", (v == 0));
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR, ICAL_ERROR_DEFAULT);
-}
-
-
-void test_properties()
-{
- icalproperty *prop;
- icalparameter *param;
-
- icalproperty *clone;
- char test_cn_str[128] = "";
- char *test_cn_str_good = "A Common Name 1A Common Name 2A Common Name 3A Common Name 4";
- char *test_ical_str_good = "COMMENT;CN=A Common Name 1;CN=A Common Name 2;CN=A Common Name 3;CN=A \n Common Name 4:Another Comment\n";
-
- prop = icalproperty_vanew_comment(
- "Another Comment",
- icalparameter_new_cn("A Common Name 1"),
- icalparameter_new_cn("A Common Name 2"),
- icalparameter_new_cn("A Common Name 3"),
- icalparameter_new_cn("A Common Name 4"),
- 0);
-
- for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER);
- param != 0;
- param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) {
- const char *str = icalparameter_get_cn(param);
- if (VERBOSE) printf("Prop parameter: %s\n",icalparameter_get_cn(param));
- strcat(test_cn_str, str);
- }
- is("fetching parameters", test_cn_str, test_cn_str_good);
-
- if (VERBOSE) printf("Prop value: %s\n",icalproperty_get_comment(prop));
- is("icalproperty_get_comment()",
- icalproperty_get_comment(prop), "Another Comment");
-
- if (VERBOSE) printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop));
-
- is("icalproperty_as_ical_string()",
- icalproperty_as_ical_string(prop), test_ical_str_good);
-
- clone = icalproperty_new_clone(prop);
-
- if (VERBOSE) printf("Clone:\n %s\n",icalproperty_as_ical_string(prop));
- is("icalproperty_new_clone()",
- icalproperty_as_ical_string(prop), test_ical_str_good);
-
- icalproperty_free(clone);
- icalproperty_free(prop);
-
- prop = icalproperty_new(-1);
-
- ok("test icalproperty_new() with invalid type (-1)",
- (prop == NULL));
-
- if (prop!=0) icalproperty_free(prop);
-}
-
-void test_utf8()
-{
- icalproperty *prop;
- char *utf8text = "aáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaá";
- char *test_ical_str_good = "DESCRIPTION:\n"
-" aáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaá\n"
-" óaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóa\n"
-" áóaáóaáóaáóaáóaáóaáóaáóaáóaá\n";
-
- prop = icalproperty_new_description(utf8text);
-
- is("icalproperty_as_ical_string()",
- icalproperty_as_ical_string(prop), test_ical_str_good);
- icalproperty_free(prop);
-}
-
-
-
-void test_parameters()
-{
- icalparameter *p;
- int i;
- int enums[] = {ICAL_CUTYPE_INDIVIDUAL,ICAL_CUTYPE_RESOURCE,ICAL_FBTYPE_BUSY,ICAL_PARTSTAT_NEEDSACTION,ICAL_ROLE_NONPARTICIPANT,ICAL_XLICCOMPARETYPE_LESSEQUAL,ICAL_XLICERRORTYPE_MIMEPARSEERROR,-1};
-
- char* str1 = "A Common Name";
-
- p = icalparameter_new_cn(str1);
-
- is("icalparameter_new_cn()", icalparameter_get_cn(p), str1);
- is("icalparameter_as_ical_string()" ,icalparameter_as_ical_string(p),"CN=A Common Name");
-
- icalparameter_free(p);
-
- p = icalparameter_new_from_string("PARTSTAT=ACCEPTED");
- ok("PARTSTAT_PARAMETER", (icalparameter_isa(p) == ICAL_PARTSTAT_PARAMETER));
- ok("PARTSTAT_ACCEPTED", (icalparameter_get_partstat(p) == ICAL_PARTSTAT_ACCEPTED));
-
- icalparameter_free(p);
-
- p = icalparameter_new_from_string("ROLE=CHAIR");
-
- ok("ROLE_PARAMETER", (icalparameter_isa(p) == ICAL_ROLE_PARAMETER));
- ok("ROLE_CHAIR", (icalparameter_get_partstat(p) == ICAL_ROLE_CHAIR));
-
- icalparameter_free(p);
-
- p = icalparameter_new_from_string("PARTSTAT=X-FOO");
- ok("PARTSTAT_PARAMETER", (icalparameter_isa(p) == ICAL_PARTSTAT_PARAMETER));
- ok("PARTSTAT_X", (icalparameter_get_partstat(p) == ICAL_PARTSTAT_X));
-
- icalparameter_free(p);
-
- p = icalparameter_new_from_string("X-PARAM=X-FOO");
- ok("X_PARAMETER", (icalparameter_isa(p) == ICAL_X_PARAMETER));
-
- icalparameter_free(p);
-
-
- for (i=0;enums[i] != -1; i++){
- if (VERBOSE) printf("%s\n",icalparameter_enum_to_string(enums[i]));
- ok("test paramter enums",
- (icalparameter_string_to_enum(icalparameter_enum_to_string(enums[i]))==enums[i]));
- }
-}
-
-
-char *good_child =
-"BEGIN:VEVENT\n"
-"VERSION:2.0\n"
-"DESCRIPTION:This is an event\n"
-"COMMENT;CN=A Common Name 1;CN=A Common Name 2;CN=A Common Name 3;CN=A \n"
-" Common Name 4:Another Comment\n"
-"X-LIC-ERROR;X-LIC-ERRORTYPE=COMPONENT-PARSE-ERROR:This is only a test\n"
-"END:VEVENT\n";
-
-void test_components()
-{
- icalcomponent* c;
- icalcomponent* child;
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"),
- icalproperty_vanew_comment(
- "A Comment",
- icalparameter_new_cn("A Common Name 1"),
- 0),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_description("This is an event"),
- icalproperty_vanew_comment(
- "Another Comment",
- icalparameter_new_cn("A Common Name 1"),
- icalparameter_new_cn("A Common Name 2"),
- icalparameter_new_cn("A Common Name 3"),
- icalparameter_new_cn("A Common Name 4"),
- 0),
- icalproperty_vanew_xlicerror(
- "This is only a test",
- icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR),
- 0),
-
- 0
- ),
- 0
- );
-
- if (VERBOSE)
- printf("Original Component:\n%s\n\n",icalcomponent_as_ical_string(c));
-
- child = icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT);
-
- ok("test icalcomponent_get_first_component()",
- (child != NULL));
-
- if (VERBOSE)
- printf("Child Component:\n%s\n\n",icalcomponent_as_ical_string(child));
-
- is("test results of child component",
- icalcomponent_as_ical_string(child), good_child);
-
- icalcomponent_free(c);
-}
-
-
-void test_memory()
-{
- size_t bufsize = 256;
- int i;
- char *p;
-
- char S1[] = "1) When in the Course of human events, ";
- char S2[] = "2) it becomes necessary for one people to dissolve the political bands which have connected them with another, ";
- char S3[] = "3) and to assume among the powers of the earth, ";
- char S4[] = "4) the separate and equal station to which the Laws of Nature and of Nature's God entitle them, ";
- char S5[] = "5) a decent respect to the opinions of mankind requires that they ";
- char S6[] = "6) should declare the causes which impel them to the separation. ";
- char S7[] = "7) We hold these truths to be self-evident, ";
- char S8[] = "8) that all men are created equal, ";
-
-/* char S9[] = "9) that they are endowed by their Creator with certain unalienable Rights, ";
- char S10[] = "10) that among these are Life, Liberty, and the pursuit of Happiness. ";
- char S11[] = "11) That to secure these rights, Governments are instituted among Men, ";
- char S12[] = "12) deriving their just powers from the consent of the governed. ";
-*/
-
-
- char *f, *b1, *b2, *b3, *b4, *b5, *b6, *b7, *b8;
-
-#define BUFSIZE 1024
-
- f = icalmemory_new_buffer(bufsize);
- p = f;
- b1 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b1, S1);
- icalmemory_append_string(&f, &p, &bufsize, b1);
-
- b2 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b2, S2);
- icalmemory_append_string(&f, &p, &bufsize, b2);
-
- b3 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b3, S3);
- icalmemory_append_string(&f, &p, &bufsize, b3);
-
- b4 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b4, S4);
- icalmemory_append_string(&f, &p, &bufsize, b4);
-
- b5 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b5, S5);
- icalmemory_append_string(&f, &p, &bufsize, b5);
-
- b6 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b6, S6);
- icalmemory_append_string(&f, &p, &bufsize, b6);
-
- b7 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b7, S7);
- icalmemory_append_string(&f, &p, &bufsize, b7);
-
- b8 = icalmemory_tmp_buffer(BUFSIZE);
- strcpy(b8, S8);
- icalmemory_append_string(&f, &p, &bufsize, b8);
-
-
- if (VERBOSE) {
- printf("1: %p %s \n",b1,b1);
- printf("2: %p %s\n",b2,b2);
- printf("3: %p %s\n",b3,b3);
- printf("4: %p %s\n",b4,b4);
- printf("5: %p %s\n",b5,b5);
- printf("6: %p %s\n",b6,b6);
- printf("7: %p %s\n",b7,b7);
- printf("8: %p %s\n",b8,b8);
-
-
- printf("Final: %s\n", f);
-
- printf("Final buffer size: %d\n",bufsize);
- }
-
- ok("final buffer size == 806", (bufsize == 806));
-
- free(f);
-
- bufsize = 4;
-
- f = icalmemory_new_buffer(bufsize);
-
- memset(f,0,bufsize);
- p = f;
-
- icalmemory_append_char(&f, &p, &bufsize, 'a');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
-
- icalmemory_append_char(&f, &p, &bufsize, 'b');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'c');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'd');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'e');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'f');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'g');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'h');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'i');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'j');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'a');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'b');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'c');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'd');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'e');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'f');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'g');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'h');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'i');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
- icalmemory_append_char(&f, &p, &bufsize, 'j');
- if (VERBOSE) printf("Char-by-Char buffer: %s\n", f);
-
- free(f);
-
- for(i=0; i<100; i++){
- f = icalmemory_tmp_buffer(bufsize);
-
- assert(f!=0);
-
- memset(f,0,bufsize);
- sprintf(f,"%d",i);
- }
-}
-
-
-void test_dirset()
-{
- icalcomponent *c;
- icalgauge *gauge;
- icalerrorenum error;
- icalcomponent *next, *itr;
- icalset* cluster;
- icalset *s, *s2;
- struct icalperiodtype rtime;
- int i;
- int count = 0;
-
- mkdir("store", 0755);
- mkdir("store-new", 0755);
-
- s = icaldirset_new("store");
- s2 = icaldirset_new("store-new");
-
- ok("opening 'store' dirset", s!=NULL);
- ok("opening 'store-new' dirset", s2!=NULL);
-
- rtime.start = icaltime_from_timet( time(0),0);
-
- cluster = icalfileset_new("clusterin.vcd");
-
- if (cluster == 0){
- printf("Failed to create cluster: %s\n",icalerror_strerror(icalerrno));
- }
-
-#define NUMCOMP 4
-
- /* Duplicate every component in the cluster NUMCOMP times */
-
- icalerror_clear_errno();
-
- for (i = 1; i<NUMCOMP+1; i++){
-
- /*rtime.start.month = i%12;*/
- rtime.start.month = i;
- rtime.end = rtime.start;
- rtime.end.hour++;
-
- for (itr = icalfileset_get_first_component(cluster);
- itr != 0;
- itr = icalfileset_get_next_component(cluster)){
- icalcomponent *clone;
- icalproperty *p;
-
-
- if(icalcomponent_isa(itr) != ICAL_VEVENT_COMPONENT){
- continue;
- }
-
-
- /* Change the dtstart and dtend times in the component
- pointed to by Itr*/
-
- clone = icalcomponent_new_clone(itr);
- assert(icalerrno == ICAL_NO_ERROR);
- assert(clone !=0);
-
- /* DTSTART*/
- p = icalcomponent_get_first_property(clone,ICAL_DTSTART_PROPERTY);
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.start);
- icalcomponent_add_property(clone,p);
- } else {
- icalproperty_set_dtstart(p,rtime.start);
- }
- assert(icalerrno == ICAL_NO_ERROR);
-
- /* DTEND*/
- p = icalcomponent_get_first_property(clone,ICAL_DTEND_PROPERTY);
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.end);
- icalcomponent_add_property(clone,p);
- } else {
- icalproperty_set_dtstart(p,rtime.end);
- }
- assert(icalerrno == ICAL_NO_ERROR);
-
- printf("\n----------\n%s\n---------\n",icalcomponent_as_ical_string(clone));
-
- error = icaldirset_add_component(s,clone);
-
- assert(icalerrno == ICAL_NO_ERROR);
- }
- }
-
- gauge = icalgauge_new_from_sql("SELECT * FROM VEVENT WHERE VEVENT.SUMMARY = 'Submit Income Taxes' OR VEVENT.SUMMARY = 'Bastille Day Party'", 0);
-
- icaldirset_select(s,gauge);
-
- for(c = icaldirset_get_first_component(s); c != 0; c = icaldirset_get_next_component(s)){
- printf("Got one! (%d)\n", count++);
-
- if (c != 0){
- printf("%s", icalcomponent_as_ical_string(c));;
- if (icaldirset_add_component(s2,c) == 0){
- printf("Failed to write!\n");
- }
- icalcomponent_free(c);
- } else {
- printf("Failed to get component\n");
- }
- }
-
-
- icalset_free(s2);
-
- for(c = icaldirset_get_first_component(s);
- c != 0;
- c = next){
-
- next = icaldirset_get_next_component(s);
-
- if (c != 0){
- /*icaldirset_remove_component(s,c);*/
- printf("%s", icalcomponent_as_ical_string(c));;
- } else {
- printf("Failed to get component\n");
- }
- }
-
- icalset_free(s);
- icalset_free(cluster);
-}
-
-
-void test_compare()
-{
- icalvalue *v1, *v2;
-
- v1 = icalvalue_new_caladdress("cap://value/1");
- v2 = icalvalue_new_clone(v1);
-
- ok("compare value and clone",
- (icalvalue_compare(v1,v2) == ICAL_XLICCOMPARETYPE_EQUAL));
-
- icalvalue_free(v1);
- icalvalue_free(v2);
-
- v1 = icalvalue_new_caladdress("A");
- v2 = icalvalue_new_caladdress("B");
-
- ok("test compare of A and B results in LESS",
- (icalvalue_compare(v1,v2) == ICAL_XLICCOMPARETYPE_LESS));
-
- ok("test compare of B and A results in GREATER",
- (icalvalue_compare(v2,v1) == ICAL_XLICCOMPARETYPE_GREATER));
-
- icalvalue_free(v1);
- icalvalue_free(v2);
-
- v1 = icalvalue_new_caladdress("B");
- v2 = icalvalue_new_caladdress("A");
-
- ok("test compare of caladdress A and B results in GREATER",
- (icalvalue_compare(v1,v2) == ICAL_XLICCOMPARETYPE_GREATER));
-
- icalvalue_free(v1);
- icalvalue_free(v2);
-
- v1 = icalvalue_new_integer(5);
- v2 = icalvalue_new_integer(5);
-
- ok("test compare of 5 and 5 results in EQUAL",
- (icalvalue_compare(v1,v2) == ICAL_XLICCOMPARETYPE_EQUAL));
-
- icalvalue_free(v1);
- icalvalue_free(v2);
-
- v1 = icalvalue_new_integer(5);
- v2 = icalvalue_new_integer(10);
-
- ok("test compare of 5 and 10 results in LESS",
- (icalvalue_compare(v1,v2) == ICAL_XLICCOMPARETYPE_LESS));
-
- ok("test compare of 10 and 5 results in GREATER",
- (icalvalue_compare(v2,v1) == ICAL_XLICCOMPARETYPE_GREATER));
-
- icalvalue_free(v1);
- icalvalue_free(v2);
-}
-
-
-void test_restriction()
-{
- icalcomponent *comp;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
- int valid;
-
- struct icaldatetimeperiodtype rtime;
-
- char *str;
-
- rtime.period.start = icaltime_from_timet( time(0),0);
- rtime.period.end = icaltime_from_timet( time(0),0);
- rtime.period.end.hour++;
- rtime.time = icaltime_null_time();
-
- comp =
- icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"),
- icalproperty_new_method(ICAL_METHOD_REQUEST),
- icalcomponent_vanew(
- ICAL_VTIMEZONE_COMPONENT,
- icalproperty_new_tzid("America/New_York"),
- icalcomponent_vanew(
- ICAL_XDAYLIGHT_COMPONENT,
- icalproperty_new_dtstart(atime),
- icalproperty_new_rdate(rtime),
- icalproperty_new_tzoffsetfrom(-4.0),
- icalproperty_new_tzoffsetto(-5.0),
- icalproperty_new_tzname("EST"),
- 0
- ),
- icalcomponent_vanew(
- ICAL_XSTANDARD_COMPONENT,
- icalproperty_new_dtstart(atime),
- icalproperty_new_rdate(rtime),
- icalproperty_new_tzoffsetfrom(-5.0),
- icalproperty_new_tzoffsetto(-4.0),
- icalproperty_new_tzname("EST"),
- 0
- ),
- 0
- ),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstamp(atime),
- icalproperty_new_uid("guid-1.host1.com"),
- icalproperty_vanew_organizer(
- "mrbig@host.com",
- icalparameter_new_role(ICAL_ROLE_CHAIR),
- 0
- ),
- icalproperty_vanew_attendee(
- "employee-A@host.com",
- icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT),
- icalparameter_new_rsvp(ICAL_RSVP_TRUE),
- icalparameter_new_cutype(ICAL_CUTYPE_GROUP),
- 0
- ),
- icalproperty_new_description("Project XYZ Review Meeting"),
- icalproperty_new_categories("MEETING"),
- icalproperty_new_class(ICAL_CLASS_PUBLIC),
- icalproperty_new_created(atime),
- icalproperty_new_summary("XYZ Project Review"),
- /* icalproperty_new_dtstart(
- atime,
- icalparameter_new_tzid("America/New_York"),
- 0
- ),*/
- icalproperty_vanew_dtend(
- atime,
- icalparameter_new_tzid("America/New_York"),
- 0
- ),
- icalproperty_new_location("1CP Conference Room 4350"),
- 0
- ),
- 0
- );
-
- valid = icalrestriction_check(comp);
-
- ok("icalrestriction_check() == 0", (valid==0));
-
- str = icalcomponent_as_ical_string(comp);
-
- icalcomponent_free(comp);
-
-}
-
-void test_calendar()
-{
- icalcomponent *comp;
- icalset *c;
- icalset *s;
- icalcalendar* calendar;
- icalerrorenum error;
- struct icaltimetype atime = icaltime_from_timet( time(0),0);
-
- mkdir("calendar", 0755);
- mkdir("calendar/booked", 0755);
-
- calendar = icalcalendar_new("calendar");
-
- comp = icalcomponent_vanew(ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_description("This is an event"),
- icalproperty_new_dtstart(atime),
- icalproperty_vanew_comment(
- "Another Comment",
- icalparameter_new_cn("A Common Name 1"),
- icalparameter_new_cn("A Common Name 2"),
- icalparameter_new_cn("A Common Name 3"),
- icalparameter_new_cn("A Common Name 4"),
- 0),
- icalproperty_vanew_xlicerror(
- "This is only a test",
- icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR),
- 0),
-
- 0),0);
-
- s = icalcalendar_get_booked(calendar);
-
- error = icaldirset_add_component(s,comp);
-
- ok("Adding Component to dirset", (error == ICAL_NO_ERROR));
-
- c = icalcalendar_get_properties(calendar);
-
- error = icalfileset_add_component(c,icalcomponent_new_clone(comp));
-
- ok("Adding Clone Component to dirset", (error == ICAL_NO_ERROR));
-
- icalcalendar_free(calendar);
-
- ok("icalcalendar test", (1));
-}
-
-
-void test_increment(void);
-
-void print_occur(struct icalrecurrencetype recur, struct icaltimetype start)
-{
- struct icaltimetype next;
- icalrecur_iterator* ritr;
-
- time_t tt = icaltime_as_timet(start);
-
- printf("#### %s\n",icalrecurrencetype_as_string(&recur));
- printf("#### %s\n",ctime(&tt ));
-
- for(ritr = icalrecur_iterator_new(recur,start),
- next = icalrecur_iterator_next(ritr);
- !icaltime_is_null_time(next);
- next = icalrecur_iterator_next(ritr)){
-
- tt = icaltime_as_timet(next);
-
- printf(" %s",ctime(&tt ));
-
- }
-
- icalrecur_iterator_free(ritr);
-}
-
-void test_recur()
-{
- struct icalrecurrencetype rt;
- struct icaltimetype start;
- time_t array[25];
- int i;
-
- rt = icalrecurrencetype_from_string("FREQ=MONTHLY;UNTIL=19971224T000000Z;INTERVAL=1;BYDAY=TU,2FR,3SA");
- start = icaltime_from_string("19970905T090000Z");
-
- if (VERBOSE) print_occur(rt,start);
-
- if (VERBOSE) printf("\n Using icalrecur_expand_recurrence\n");
-
- icalrecur_expand_recurrence("FREQ=MONTHLY;UNTIL=19971224T000000Z;INTERVAL=1;BYDAY=TU,2FR,3SA",
- icaltime_as_timet(start),
- 25,
- array);
-
- for(i =0; array[i] != 0 && i < 25 ; i++){
- if (VERBOSE) printf(" %s",ctime(&(array[i])));
- }
-
-
-/* test_increment();*/
-
-}
-
-
-void test_expand_recurrence(){
-
- time_t arr[10];
- time_t now = 931057385;
- int i, numfound = 0;
- icalrecur_expand_recurrence( "FREQ=MONTHLY;BYDAY=MO,WE", now,
- 5, arr );
-
- if (VERBOSE) printf("Start %s",ctime(&now) );
-
- for (i=0; i<5; i++) {
- numfound++;
- if (VERBOSE) printf("i=%d %s\n", i, ctime(&arr[i]) );
- }
- int_is("Get an array of 5 items", numfound, 5);
-}
-
-
-
-enum byrule {
- NO_CONTRACTION = -1,
- BY_SECOND = 0,
- BY_MINUTE = 1,
- BY_HOUR = 2,
- BY_DAY = 3,
- BY_MONTH_DAY = 4,
- BY_YEAR_DAY = 5,
- BY_WEEK_NO = 6,
- BY_MONTH = 7,
- BY_SET_POS
-};
-
-void icalrecurrencetype_test()
-{
- icalvalue *v = icalvalue_new_from_string(
- ICAL_RECUR_VALUE,
- "FREQ=YEARLY;UNTIL=20060101T000000;INTERVAL=2;BYDAY=SU,WE;BYSECOND=15,30; BYMONTH=1,6,11");
-
- struct icalrecurrencetype r = icalvalue_get_recur(v);
- struct icaltimetype t = icaltime_from_timet( time(0), 0);
- struct icaltimetype next;
- time_t tt;
-
- struct icalrecur_iterator_impl* itr
- = (struct icalrecur_iterator_impl*) icalrecur_iterator_new(r,t);
-
- do {
-
- next = icalrecur_iterator_next(itr);
- tt = icaltime_as_timet(next);
-
- printf("%s",ctime(&tt ));
-
- } while( ! icaltime_is_null_time(next));
-
- icalvalue_free(v);
-
- icalrecur_iterator_free(itr);
-
-}
-
-/* From Federico Mena Quintero <federico@ximian.com> */
-void test_recur_parameter_bug(){
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libical/ical.h>
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\n"
-"RRULE;X-EVOLUTION-ENDDATE=20030209T081500:FREQ=DAILY;COUNT=10;INTERVAL=6\n"
-"END:VEVENT\n";
-
- icalcomponent *icalcomp;
- icalproperty *prop;
- struct icalrecurrencetype recur;
- int n_errors;
- char *str;
-
- icalcomp = icalparser_parse_string ((char *) test_icalcomp_str);
- ok("icalparser_parse_string()",(icalcomp!=NULL));
- assert(icalcomp!=NULL);
-
- str = icalcomponent_as_ical_string(icalcomp);
- is("parsed matches original", str, (char*)test_icalcomp_str);
- if (VERBOSE) printf("%s\n\n",str);
-
- n_errors = icalcomponent_count_errors (icalcomp);
- int_is("no parse errors", n_errors, 0);
-
- if (n_errors) {
- icalproperty *p;
-
- for (p = icalcomponent_get_first_property (icalcomp,
- ICAL_XLICERROR_PROPERTY);
- p;
- p = icalcomponent_get_next_property (icalcomp,
- ICAL_XLICERROR_PROPERTY)) {
- const char *str;
-
- str = icalproperty_as_ical_string (p);
- fprintf (stderr, "error: %s\n", str);
- }
- }
-
- prop = icalcomponent_get_first_property (icalcomp, ICAL_RRULE_PROPERTY);
- ok("get RRULE property", (prop!=NULL));
- assert(prop!=NULL);
-
- recur = icalproperty_get_rrule (prop);
-
- if (VERBOSE) printf("%s\n",icalrecurrencetype_as_string(&recur));
-
- icalcomponent_free(icalcomp);
-}
-
-
-void test_duration()
-{
- struct icaldurationtype d;
-
- d = icaldurationtype_from_string("PT8H30M");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("PT8H30M", icaldurationtype_as_int(d), 30600);
-
- d = icaldurationtype_from_string("-PT8H30M");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("-PT8H30M", icaldurationtype_as_int(d), -30600);
-
- d = icaldurationtype_from_string("PT10H10M10S");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("PT10H10M10S", icaldurationtype_as_int(d), 36610);
-
- d = icaldurationtype_from_string("P7W");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("P7W", icaldurationtype_as_int(d), 4233600);
-
- d = icaldurationtype_from_string("P2DT8H30M");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("P2DT8H30M", icaldurationtype_as_int(d), 203400);
-
- icalerror_errors_are_fatal = 0;
-
- /* Test conversion of bad input */
-
- d = icaldurationtype_from_int(1314000);
- if (VERBOSE) printf("%s %d\n",icaldurationtype_as_ical_string(d),
- icaldurationtype_as_int(d));
- is("1314000", icaldurationtype_as_ical_string(d), "P15DT5H");
-
- d = icaldurationtype_from_string("P2W1DT5H");
- if (VERBOSE) printf("%s %d\n",icaldurationtype_as_ical_string(d),
- icaldurationtype_as_int(d));
- int_is("P15DT5H", icaldurationtype_as_int(d), 0);
-
- d = icaldurationtype_from_string("P-2DT8H30M");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("P-2DT8H30M", icaldurationtype_as_int(d), 0);
-
- d = icaldurationtype_from_string("P7W8H");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("P7W8H", icaldurationtype_as_int(d), 0);
-
- d = icaldurationtype_from_string("T10H");
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- int_is("T10H", icaldurationtype_as_int(d), 0);
-
- icalerror_errors_are_fatal = 1;
-
- d = icaldurationtype_from_int(4233600);
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- is("P7W",
- icaldurationtype_as_ical_string(d), "P7W");
-
- d = icaldurationtype_from_int(4424400);
- if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d));
- is("P51DT5H",
- icaldurationtype_as_ical_string(d), "P51DT5H");
-}
-
-
-void test_period()
-{
- struct icalperiodtype p;
- icalvalue *v;
- char *str;
-
- str = "19971015T050000Z/PT8H30M";
- p = icalperiodtype_from_string(str);
- is(str, icalperiodtype_as_ical_string(p),str);
-
-
- str = "19971015T050000Z/19971015T060000Z";
- p = icalperiodtype_from_string(str);
- is(str, icalperiodtype_as_ical_string(p),str);
-
-
- str = "19970101T120000/PT3H";
-
- v = icalvalue_new_from_string(ICAL_PERIOD_VALUE,str);
- is(str, icalvalue_as_ical_string(v), str);
-
- icalvalue_free(v);
-}
-
-
-void test_strings(){
- icalvalue *v;
-
- v = icalvalue_new_text("foo;bar;bats");
- if (VERBOSE)
- printf("%s\n",icalvalue_as_ical_string(v));
-
- is("test encoding of 'foo;bar;bats'",
- "foo\\;bar\\;bats", icalvalue_as_ical_string(v));
-
- icalvalue_free(v);
-
-
- v = icalvalue_new_text("foo\\;b\nar\\;ba\tts");
- if (VERBOSE)
- printf("%s\n",icalvalue_as_ical_string(v));
-
- is("test encoding of 'foo\\\\;b\\nar\\\\;ba\\tts'",
- "foo\\\\\\;b\\nar\\\\\\;ba\\tts", icalvalue_as_ical_string(v));
-
- icalvalue_free(v);
-}
-
-
-void test_requeststat()
-{
- icalproperty *p;
- icalrequeststatus s;
- struct icalreqstattype st, st2;
- char temp[1024];
-
- s = icalenum_num_to_reqstat(2,1);
-
- ok("icalenum_num_to_reqstat(2,1)",(s == ICAL_2_1_FALLBACK_STATUS));
-
- ok("icalenum_reqstat_major()",(icalenum_reqstat_major(s) == 2));
- ok("icalenum_reqstat_minor()",(icalenum_reqstat_minor(s) == 1));
-
- is ("icalenum_reqstat_desc() -> 2.1", icalenum_reqstat_desc(s),
- "Success but fallback taken on one or more property values.");
-
- st.code = s;
- st.debug = "booga";
- st.desc = 0;
-
- is("icalreqstattype_as_string()",
- icalreqstattype_as_string(st),
- "2.1;Success but fallback taken on one or more property values.;booga");
-
- st.desc = " A non-standard description";
-
- is("icalreqstattype_as_string() w/ non standard description",
- icalreqstattype_as_string(st),
- "2.1; A non-standard description;booga");
-
- st.desc = 0;
-
- sprintf(temp,"%s\n",icalreqstattype_as_string(st));
-
-
- st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga");
-
- /* printf("%d -- %d -- %s -- %s\n",*/
- ok("icalenum_reqstat_major()",(icalenum_reqstat_major(st2.code) == 2));
- ok("icalenum_reqstat_minor()",(icalenum_reqstat_minor(st2.code) == 1));
- is("icalenum_reqstat_desc",
- icalenum_reqstat_desc(st2.code),
- "Success but fallback taken on one or more property values.");
-
- st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga");
- if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2));
-
- st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;");
- if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2));
-
- st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.");
- if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2));
-
- st2 = icalreqstattype_from_string("2.1;");
- if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2));
-
- is("st2 test again",
- icalreqstattype_as_string(st2),
- "2.1;Success but fallback taken on one or more property values.");
-
- st2 = icalreqstattype_from_string("2.1");
- is("st2 test #3",
- icalreqstattype_as_string(st2),
- "2.1;Success but fallback taken on one or more property values.");
-
- p = icalproperty_new_from_string("REQUEST-STATUS:2.1;Success but fallback taken on one or more property values.;booga");
-
- is("icalproperty_new_from_string()",
- icalproperty_as_ical_string(p),
- "REQUEST-STATUS:2.1;Success but fallback taken on one or more property \n values.;booga\n");
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
- st2 = icalreqstattype_from_string("16.4");
-
- ok("test unknown code", (st2.code == ICAL_UNKNOWN_STATUS));
-
- st2 = icalreqstattype_from_string("1.");
-
- ok("test malformed code", (st2.code == ICAL_UNKNOWN_STATUS));
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT);
-
- icalproperty_free(p);
-}
-
-
-void test_dtstart(){
-
- struct icaltimetype tt,tt2;
-
- icalproperty *p;
-
-
- tt = icaltime_from_string("19970101");
-
- int_is("19970101 is a date", tt.is_date, 1);
-
- p = icalproperty_new_dtstart(tt);
-
- if (VERBOSE) printf("%s\n",icalvalue_kind_to_string(icalvalue_isa(icalproperty_get_value(p))));
-
- ok("ICAL_DATE_VALUE", (icalvalue_isa(icalproperty_get_value(p))==ICAL_DATE_VALUE));
-
- tt2 = icalproperty_get_dtstart(p);
- int_is("converted date is date", tt2.is_date, 1);
-
- if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p));
-
- tt = icaltime_from_string("19970101T103000");
-
- int_is("19970101T103000 is not a date", tt.is_date, 0);
-
- icalproperty_free(p);
-
- p = icalproperty_new_dtstart(tt);
-
- if (VERBOSE) printf("%s\n",icalvalue_kind_to_string(icalvalue_isa(icalproperty_get_value(p))));
- ok("ICAL_DATETIME_VALUE", (icalvalue_isa(icalproperty_get_value(p))==ICAL_DATETIME_VALUE));
-
- tt2 = icalproperty_get_dtstart(p);
- int_is("converted datetime is not date", tt2.is_date, 0);
-
- if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p));
-
- icalproperty_free(p);
-}
-
-void do_test_time(char* zone)
-{
- struct icaltimetype ictt, icttutc, icttzone, icttdayl,
- icttla, icttny,icttphoenix, icttlocal, icttnorm;
- time_t tt,tt2, tt_p200;
- int offset_tz;
- icalvalue *v;
- short day_of_week,start_day_of_week, day_of_year;
- icaltimezone *azone, *utczone;
- char msg[256];
-
- icalerror_errors_are_fatal = 0;
-
- azone = icaltimezone_get_builtin_timezone(zone);
- utczone = icaltimezone_get_utc_timezone();
-
- /* Test new API */
- if (VERBOSE) printf("\n---> From time_t \n");
-
- tt = 1025127869; /* stick with a constant... */
-
- if (VERBOSE) printf("Orig : %s\n",ical_timet_string(tt));
- if (VERBOSE) printf("\nicaltime_from_timet(tt,0) (DEPRECATED)\n");
-
- ictt = icaltime_from_timet(tt, 0);
-
- is("icaltime_from_timet(1025127869) as UTC", ictt_as_string(ictt),
- "2002-06-26 21:44:29 (floating)");
-
- ictt = icaltime_from_timet_with_zone(tt, 0, NULL);
- is("Floating time from time_t",
- ictt_as_string(ictt), "2002-06-26 21:44:29 (floating)");
-
- ictt = icaltime_from_timet_with_zone(tt, 0, azone);
- ok("icaltime_from_timet_with_zone(tt,0,zone) as zone",
- strncmp(ictt_as_string(ictt), "2002-06-26 21:44:29", 19)==0);
-
- ictt = icaltime_from_timet_with_zone(tt, 0, utczone);
-
- is("icaltime_from_timet_with_zone(tt,0,utc)", ictt_as_string(ictt),
- "2002-06-26 21:44:29 Z UTC");
-
- if (VERBOSE) printf("\n---> Convert from floating \n");
-
- ictt = icaltime_from_timet_with_zone(tt, 0, NULL);
- icttutc = icaltime_convert_to_zone(ictt, utczone);
-
- is("Convert from floating to UTC",
- ictt_as_string(icttutc),
- "2002-06-26 21:44:29 Z UTC");
-
- icttzone = icaltime_convert_to_zone(ictt, azone);
-
- ok("Convert from floating to zone",
- (strncmp(ictt_as_string(icttzone), "2002-06-26 21:44:29", 19)==0));
-
- tt2 = icaltime_as_timet(icttzone);
-
- if (VERBOSE) printf("\n---> Convert from UTC \n");
-
- ictt = icaltime_from_timet_with_zone(tt, 0, utczone);
- icttutc = icaltime_convert_to_zone(ictt, utczone);
-
- is("Convert from UTC to UTC",
- ictt_as_string(icttutc),
- "2002-06-26 21:44:29 Z UTC");
-
- icttzone = icaltime_convert_to_zone(ictt, azone);
-
- ok("Convert from UTC to zone (test year/mon only..)",
- (strncmp(ictt_as_string(icttzone), "2002-06-26 21:44:29", 7)==0));
-
- tt2 = icaltime_as_timet(icttzone);
-
- if (VERBOSE) printf("No conversion: %s\n", ical_timet_string(tt2));
-
- ok("No conversion at all (test year/mon only)",
- (strncmp(ical_timet_string(tt2), "2002-06-26 21:44:29 Z",7) == 0));
-
- tt2 = icaltime_as_timet_with_zone(icttzone, utczone);
- if (VERBOSE) printf("Back to UTC : %s\n", ical_timet_string(tt2));
-
- ok("test time conversion routines",(tt==tt2));
-
- if (VERBOSE) printf("\n---> Convert from zone \n");
- ictt = icaltime_from_timet_with_zone(tt, 0, azone);
- icttzone = icaltime_convert_to_zone(ictt, azone);
-
- if (VERBOSE)
- printf("To zone : %s\n", ictt_as_string(icttzone));
- icttutc = icaltime_convert_to_zone(ictt, utczone);
-
- if (VERBOSE)
- printf("To UTC : %s\n", ictt_as_string(icttutc));
- tt2 = icaltime_as_timet(icttutc);
-
- if (VERBOSE)
- printf("No conversion: %s\n", ical_timet_string(tt2));
-
- tt2 = icaltime_as_timet_with_zone(icttutc, azone);
-
- if (VERBOSE)
- printf("Back to zone : %s\n", ical_timet_string(tt2));
-
- ok("test time conversion, round 2", (tt==tt2));
-
- ictt = icaltime_from_string("20001103T183030Z");
-
- tt = icaltime_as_timet(ictt);
-
- ok("test icaltime -> time_t for 20001103T183030Z", (tt==973276230));
- /* Fri Nov 3 10:30:30 PST 2000 in PST
- Fri Nov 3 18:30:30 PST 2000 in UTC */
-
- if (VERBOSE) {
- printf(" Normalize \n");
- printf("Orig (ical) : %s\n", ictt_as_string(ictt));
- }
- icttnorm = ictt;
- icttnorm.second -= 60 * 60 * 24 * 5;
- icttnorm = icaltime_normalize(icttnorm);
-
- if (VERBOSE)
- printf("-5d in sec : %s\n", ictt_as_string(icttnorm));
- icttnorm.day += 60;
- icttnorm = icaltime_normalize(icttnorm);
-
- if (VERBOSE)
- printf("+60 d : %s\n", ictt_as_string(icttnorm));
-
- /** add test case here.. **/
-
- if (VERBOSE)
- printf("\n As time_t \n");
-
- tt2 = icaltime_as_timet(ictt);
-
- if (VERBOSE) {
- printf("20001103T183030Z (timet): %s\n",ical_timet_string(tt2));
- printf("20001103T183030Z : %s\n",ictt_as_string(ictt));
- }
-
- /** this test is bogus **/
- ok("test normalization", (tt2 == tt));
-
- icttlocal = icaltime_convert_to_zone(ictt, azone);
- tt2 = icaltime_as_timet(icttlocal);
- if (VERBOSE) {
- printf("20001103T183030 (timet): %s\n",ical_timet_string(tt2));
- printf("20001103T183030 : %s\n",ictt_as_string(icttlocal));
- }
-
- offset_tz = -icaltimezone_get_utc_offset_of_utc_time(azone, &ictt, 0); /* FIXME */
- if (VERBOSE)
- printf("offset_tz : %d\n",offset_tz);
-
- ok("test utc offset", (tt-tt2 == offset_tz));
-
- /* FIXME with the new API, it's not very useful */
- icttlocal = ictt;
- icaltimezone_convert_time(&icttlocal,
- icaltimezone_get_utc_timezone(),
- icaltimezone_get_builtin_timezone(zone));
-
- if (VERBOSE)
- printf("As local : %s\n", ictt_as_string(icttlocal));
-
- if (VERBOSE) printf("\n Convert to and from lib c \n");
-
- if (VERBOSE) printf("System time is: %s\n",ical_timet_string(tt));
-
- v = icalvalue_new_datetime(ictt);
-
- if (VERBOSE)
- printf("System time from libical: %s\n",icalvalue_as_ical_string(v));
-
- icalvalue_free(v);
-
- tt2 = icaltime_as_timet(ictt);
-
- if (VERBOSE)
- printf("Converted back to libc: %s\n",ical_timet_string(tt2));
-
- if (VERBOSE) printf("\n Incrementing time \n");
-
- icttnorm = ictt;
-
- icttnorm.year++;
- tt2 = icaltime_as_timet(icttnorm);
- if (VERBOSE)
- printf("Add a year: %s\n",ical_timet_string(tt2));
-
- icttnorm.month+=13;
- tt2 = icaltime_as_timet(icttnorm);
- if (VERBOSE)
- printf("Add 13 months: %s\n",ical_timet_string(tt2));
-
- icttnorm.second+=90;
- tt2 = icaltime_as_timet(icttnorm);
- if (VERBOSE)
- printf("Add 90 seconds: %s\n",ical_timet_string(tt2));
-
- if (VERBOSE) printf("\n Day Of week \n");
-
- day_of_week = icaltime_day_of_week(ictt);
- start_day_of_week = icaltime_start_doy_of_week(ictt);
- day_of_year = icaltime_day_of_year(ictt);
-
- sprintf(msg, "Testing day of week %d", day_of_week);
- int_is(msg, day_of_week, 6);
-
- sprintf(msg, "Testing day of year %d",day_of_year);
- int_is(msg, day_of_year, 308);
-
- sprintf(msg, "Week started on doy of %d", start_day_of_week);
- int_is(msg, start_day_of_week , 303);
-
- if (VERBOSE) printf("\n TimeZone Conversions \n");
-
-/*
- icttla = ictt;
- icaltimezone_convert_time(&icttla,
- icaltimezone_get_utc_timezone(),
- lazone);
-*/
- icttla = icaltime_convert_to_zone(ictt,
- icaltimezone_get_builtin_timezone("America/Los_Angeles"));
-
- int_is("Converted hour in America/Los_Angeles is 10", icttla.hour, 10);
-
- icttutc = icaltime_convert_to_zone(icttla,icaltimezone_get_utc_timezone());
-
- ok("America/Los_Angeles local time is 2000-11-03 10:30:30",
- (strncmp(ictt_as_string(icttla), "2000-11-03 10:30:30", 19)==0));
-
- ok("Test conversion back to UTC",(icaltime_compare(icttutc, ictt) == 0));
-
- icttny = icaltime_convert_to_zone(ictt,
- icaltimezone_get_builtin_timezone("America/New_York"));
-
- icttphoenix = icaltime_convert_to_zone(ictt,
- icaltimezone_get_builtin_timezone("America/Phoenix"));
-
- if (VERBOSE) {
- printf("Orig (ctime): %s\n", ical_timet_string(tt) );
- printf("Orig (ical) : %s\n", ictt_as_string(ictt));
- printf("UTC : %s\n", ictt_as_string(icttutc));
- printf("Los Angeles : %s\n", ictt_as_string(icttla));
- printf("Phoenix : %s\n", ictt_as_string(icttphoenix));
- printf("New York : %s\n", ictt_as_string(icttny));
- }
- /** @todo Check results for Phoenix here?... **/
-
- /* Daylight savings test for New York */
- if (VERBOSE) {
- printf("\n Daylight Savings \n");
-
- printf("Orig (ctime): %s\n", ical_timet_string(tt) );
- printf("Orig (ical) : %s\n", ictt_as_string(ictt));
- printf("NY : %s\n", ictt_as_string(icttny));
- }
-
- ok("Converted time in zone America/New_York is 2000-11-03 13:30:30",
- (strncmp(ictt_as_string(icttny),"2000-11-03 13:30:30",19)==0));
-
- tt_p200 = tt + 200 * 24 * 60 * 60 ; /* Add 200 days */
-
- icttdayl = icaltime_from_timet_with_zone(tt_p200,0,
- icaltimezone_get_utc_timezone());
- icttny = icaltime_convert_to_zone(icttdayl,
- icaltimezone_get_builtin_timezone("America/New_York"));
-
- if (VERBOSE) {
- printf("Orig +200d : %s\n", ical_timet_string(tt_p200) );
- printf("NY+200D : %s\n", ictt_as_string(icttny));
- }
-
- ok("Converted time +200d in zone America/New_York is 2001-05-22 14:30:30",
- (strncmp(ictt_as_string(icttny),"2001-05-22 14:30:30",19)==0));
-
-
- /* Daylight savings test for Los Angeles */
-
- icttla = icaltime_convert_to_zone(ictt,
- icaltimezone_get_builtin_timezone("America/Los_Angeles"));
-
- if (VERBOSE) {
- printf("\nOrig (ctime): %s\n", ical_timet_string(tt) );
- printf("Orig (ical) : %s\n", ictt_as_string(ictt));
- printf("LA : %s\n", ictt_as_string(icttla));
- }
-
- ok("Converted time in zone America/Los_Angeles is 2000-11-03 10:30:30",
- (strncmp(ictt_as_string(icttla),"2000-11-03 10:30:30",19)==0));
-
-
- icttla = icaltime_convert_to_zone(icttdayl,
- icaltimezone_get_builtin_timezone("America/Los_Angeles"));
-
- if (VERBOSE) {
- printf("Orig +200d : %s\n", ical_timet_string(tt_p200) );
- printf("LA+200D : %s\n", ictt_as_string(icttla));
- }
-
- ok("Converted time +200d in zone America/Los_Angeles is 2001-05-22 11:30:30",
- (strncmp(ictt_as_string(icttla),"2001-05-22 11:30:30",19)==0));
-
-
- icalerror_errors_are_fatal = 1;
-}
-
-void test_iterators()
-{
- icalcomponent *c,*inner,*next;
- icalcompiter i;
- char vevent_list[64] = "";
- char remaining_list[64] = "";
-
- char *vevent_list_good = "12347";
- char *remaining_list_good = "568910";
-
- int nomore = 1;
-
- c= icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("1"),0),
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("2"),0),
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("3"),0),
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("4"),0),
- icalcomponent_vanew(ICAL_VTODO_COMPONENT,
- icalproperty_new_version("5"),0),
- icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT,
- icalproperty_new_version("6"),0),
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("7"),0),
- icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT,
- icalproperty_new_version("8"),0),
- icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT,
- icalproperty_new_version("9"),0),
- icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT,
- icalproperty_new_version("10"),0),
- 0);
-
- /* List all of the VEVENTS */
-
- for(i = icalcomponent_begin_component(c,ICAL_VEVENT_COMPONENT);
- icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){
-
- icalcomponent *this = icalcompiter_deref(&i);
-
- icalproperty *p =
- icalcomponent_get_first_property(this,
- ICAL_VERSION_PROPERTY);
- const char* s = icalproperty_get_version(p);
-
- strcat(vevent_list, s);
- }
- is("iterate through VEVENTS in a component",
- vevent_list, vevent_list_good);
-
- /* Delete all of the VEVENTS */
- /* reset iterator */
- icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT);
-
- while((inner=icalcomponent_get_current_component(c)) != 0 ){
- if(icalcomponent_isa(inner) == ICAL_VEVENT_COMPONENT){
- icalcomponent_remove_component(c,inner);
- icalcomponent_free(inner);
- } else {
- icalcomponent_get_next_component(c,ICAL_VEVENT_COMPONENT);
- }
- }
-
- /* List all remaining components */
- for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){
-
-
- icalproperty *p =
- icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY);
-
- const char* s = icalproperty_get_version(p);
-
- strcat(remaining_list, s);
- }
-
- is("iterate through remaining components",
- remaining_list, remaining_list_good);
-
-
- /* Remove all remaining components */
- for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = next){
-
- icalcomponent *this;
- icalproperty *p;
- const char* s;
- next = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT);
-
- p=icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY);
- s = icalproperty_get_version(p);
-
- icalcomponent_remove_component(c,inner);
-
- this = icalcomponent_get_current_component(c);
-
- if(this != 0){
- p=icalcomponent_get_first_property(this,ICAL_VERSION_PROPERTY);
- s = icalproperty_get_version(p);
- }
-
- icalcomponent_free(inner);
- }
-
-
- /* List all remaining components */
- for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT);
- inner != 0;
- inner = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){
-
- icalproperty *p =
- icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY);
-
- const char* s = icalproperty_get_version(p);
-
- if (s)
- nomore = 0;
- }
-
- ok("test if any components remain after deleting the rest",
- nomore == 1);
-
- icalcomponent_free(c);
-}
-
-
-void test_time()
-{
- char *zones[6] = { "America/Los_Angeles","America/New_York","Europe/London","Asia/Shanghai", NULL};
-
- int i;
-
- do_test_time(0);
-
- for(i = 0; zones[i] != NULL; i++){
-
- if (VERBOSE) printf(" ######### Timezone: %s ############\n",zones[i]);
-
- do_test_time(zones[i]);
-
- }
-
-}
-
-
-void test_icalset()
-{
- icalcomponent *c;
-
- icalset* f = icalset_new_file("2446.ics");
- icalset* d = icalset_new_dir("outdir");
-
- assert(f!=0);
- assert(d!=0);
-
- for(c = icalset_get_first_component(f);
- c != 0;
- c = icalset_get_next_component(f)){
-
- icalcomponent *clone;
-
- clone = icalcomponent_new_clone(c);
-
- icalset_add_component(d,clone);
-
- printf(" class %d\n",icalclassify(c,0,"user"));
-
- }
-
- icalset_free(f);
- icalset_free(d);
-}
-
-
-icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp);
-
-void test_overlaps()
-{
- icalcomponent *cset,*c;
- icalset *set;
- time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000,
- Sat Nov 4 15:00:00 PST 2000 */
- time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000
- Sat Nov 4 16:00:00 PST 2000 */
-
- time_t hh = 1800; /* one half hour */
-
- set = icalset_new_file("../../test-data/overlaps.ics");
-
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(icaltime_from_timet(tm1-hh,0),0),
- icalproperty_vanew_dtend(icaltime_from_timet(tm2-hh,0),0),
- 0
- );
-
- cset = icalclassify_find_overlaps(set,c);
- ok("TODO find overlaps 1", (cset != NULL));
-
- if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset));
-
- if (cset) icalcomponent_free(cset);
- if (c) icalcomponent_free(c);
-
-
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(icaltime_from_timet(tm1-hh,0),0),
- icalproperty_vanew_dtend(icaltime_from_timet(tm2,0),0),
- 0
- );
-
- cset = icalclassify_find_overlaps(set,c);
-
- ok("TODO find overlaps 1", cset != NULL);
- if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset));
-
- if (cset) icalcomponent_free(cset);
- if (c) icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_dtstart(icaltime_from_timet(tm1+5*hh,0),0),
- icalproperty_vanew_dtend(icaltime_from_timet(tm2+5*hh,0),0),
- 0
- );
-
- cset = icalclassify_find_overlaps(set,c);
- ok("TODO find overlaps 1", cset != NULL);
- if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset));
-
- if (set) icalset_free(set);
- if (cset) icalcomponent_free(cset);
- if (c) icalcomponent_free(c);
-}
-
-
-
-void test_fblist()
-{
- icalspanlist *sl, *new_sl;
- icalset* set = icalset_new_file("../../test-data/spanlist.ics");
- struct icalperiodtype period;
- icalcomponent *comp;
- int * foo;
- int i;
-
- sl = icalspanlist_new(set,
- icaltime_from_string("19980101T000000Z"),
- icaltime_from_string("19980108T000000Z"));
-
- ok("open ../../test-data/spanlist.ics", (set!=NULL));
- assert(set!=NULL);
-
- if (VERBOSE) printf("Restricted spanlist\n");
- if (VERBOSE) icalspanlist_dump(sl);
-
- period= icalspanlist_next_free_time(sl,
- icaltime_from_string("19970801T120000"));
-
- is("Next Free time start 19970801T120000", icaltime_as_ical_string(period.start), "19970801T120000");
- is("Next Free time end 19980101T000000", icaltime_as_ical_string(period.end), "19980101T000000");
-
- period= icalspanlist_next_free_time(sl, period.end);
-
- is("Next Free time start 19980101T010000", icaltime_as_ical_string(period.start), "19980101T010000");
- is("Next Free time end 19980102T010000", icaltime_as_ical_string(period.end), "19980102T010000");
-
- if (VERBOSE) printf("%s\n",
- icalcomponent_as_ical_string(icalspanlist_as_vfreebusy(sl,
- "a@foo.com",
- "b@foo.com")
- ));
-
- foo = icalspanlist_as_freebusy_matrix(sl,3600);
-
- for (i=0; foo[i] != -1; i++); /* find number entries */
-
- int_is("Calculating freebusy hourly matrix", i, (7*24));
-
- if (VERBOSE) {
- for (i=0; foo[i] != -1; i++) {
- printf("%d", foo[i]);
- if ((i % 24) == 23)
- printf("\n");
- }
- printf("\n\n");
- }
-
-
- free(foo);
-
- foo = icalspanlist_as_freebusy_matrix(sl,3600*24);
-
- ok("Calculating daily freebusy matrix", (foo!=NULL));
-
- {
- char out_str[80] = "";
- char *strp = out_str;
-
- for (i=0; foo[i]!=-1; i++){
- sprintf(strp, "%d", foo[i]);
- strp++;
- }
- is("Checking freebusy validity", out_str, "1121110");
- }
- if (VERBOSE) {
- for (i=0; foo[i] != -1; i++) {
- printf("%d", foo[i]);
- if ((i % 7) == 6)
- printf("\n");
- }
- printf("\n\n");
- }
- free(foo);
-
- icalspanlist_free(sl);
-
-
- if (VERBOSE) printf("Unrestricted spanlist\n");
-
- sl = icalspanlist_new(set,
- icaltime_from_string("19970324T120000Z"),
- icaltime_null_time());
-
- ok("add 19970324T120000Z to spanlist", (sl!=NULL));
-
- if (VERBOSE) printf("Restricted spanlist\n");
- if (VERBOSE) icalspanlist_dump(sl);
-
- period= icalspanlist_next_free_time(sl,
- icaltime_from_string("19970801T120000Z"));
-
-
- is("Next Free time start 19980101T010000",
- icaltime_as_ical_string(period.start),
- "19980101T010000");
-
- is("Next Free time end 19980102T010000",
- icaltime_as_ical_string(period.end),
- "19980102T010000");
-
- comp = icalspanlist_as_vfreebusy(sl, "a@foo.com", "b@foo.com");
-
- ok("Calculating VFREEBUSY component", (comp != NULL));
- if (VERBOSE) printf("%s\n", icalcomponent_as_ical_string(comp));
-
- new_sl = icalspanlist_from_vfreebusy(comp);
-
- ok("Calculating spanlist from generated VFREEBUSY component",
- (new_sl != NULL));
-
- if (VERBOSE) icalspanlist_dump(new_sl);
-
- if (sl) icalspanlist_free(sl);
- if (new_sl) icalspanlist_free(new_sl);
- if (comp) icalcomponent_free(comp);
-
- icalset_free(set);
-}
-
-
-void test_convenience(){
- icalcomponent *c;
- int duration;
- struct icaltimetype tt;
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_string("19970801T120000")),
- icalproperty_new_dtend(icaltime_from_string("19970801T130000")),
- 0
- ),
- 0);
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- is("Start is 1997-08-01 12:00:00 (floating)",
- ictt_as_string(icalcomponent_get_dtstart(c)), "1997-08-01 12:00:00 (floating)");
- is("End is 1997-08-01 13:00:00 (floating)",
- ictt_as_string(icalcomponent_get_dtend(c)), "1997-08-01 13:00:00 (floating)");
- ok("Duration is 60 m", (duration == 60));
-
- icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_string("19970801T120000Z")),
- icalproperty_new_duration(icaldurationtype_from_string("PT1H30M")),
- 0
- ),
- 0);
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- is("Start is 1997-08-01 12:00:00 Z UTC",
- ictt_as_string(icalcomponent_get_dtstart(c)), "1997-08-01 12:00:00 Z UTC");
- is("End is 1997-08-01 13:30:00 Z UTC",
- ictt_as_string(icalcomponent_get_dtend(c)), "1997-08-01 13:30:00 Z UTC");
- ok("Duration is 90 m", (duration == 90));
-
- icalcomponent_free(c);
-
- icalerror_errors_are_fatal = 0;
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_string("19970801T120000")),
- icalproperty_new_dtend(icaltime_from_string("19970801T130000")),
- 0
- ),
- 0);
-
- icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M"));
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- is("Start is 1997-08-01 12:00:00 (floating)",
- ictt_as_string(icalcomponent_get_dtstart(c)),
- "1997-08-01 12:00:00 (floating)");
- is("End is 1997-08-01 13:00:00 (floating)",
- ictt_as_string(icalcomponent_get_dtend(c)),
- "1997-08-01 13:00:00 (floating)");
- ok("Duration is 60 m", (duration == 60));
-
- icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(icaltime_from_string("19970801T120000Z")),
- icalproperty_new_duration(icaldurationtype_from_string("PT1H30M")),
- 0
- ),
- 0);
-
- icalcomponent_set_dtend(c,icaltime_from_string("19970801T133000Z"));
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- ok("Start is 1997-08-01 12:00:00 Z UTC",
- (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c)))));
- ok("End is 1997-08-01 13:30:00 Z UTC",
- (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c)))));
- ok("Duration is 90 m", (duration == 90));
-
- icalerror_errors_are_fatal = 1;
-
- icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- 0
- ),
- 0);
-
- icalcomponent_set_dtstart(c,icaltime_from_string("19970801T120000Z"));
- icalcomponent_set_dtend(c,icaltime_from_string("19970801T133000Z"));
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- ok("Start is 1997-08-01 12:00:00 Z UTC",
- (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c)))));
- ok("End is 1997-08-01 13:30:00 Z UTC",
- (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c)))));
- ok("Duration is 90 m", (duration == 90));
-
- icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- 0
- ),
- 0);
-
-
- icalcomponent_set_dtstart(c,icaltime_from_string("19970801T120000Z"));
- icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M"));
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
-
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- ok("Start is 1997-08-01 12:00:00 Z UTC",
- (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c)))));
- ok("End is 1997-08-01 13:30:00 Z UTC",
- (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c)))));
- ok("Duration is 90 m", (duration == 90));
-
- icalcomponent_free(c);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- 0
- ),
- 0);
-
- tt = icaltime_from_string("19970801T120000");
- icaltime_set_timezone(&tt,
- icaltimezone_get_builtin_timezone("Europe/Rome"));
- icalcomponent_set_dtstart(c,tt);
-
- if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c));
-
- icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M"));
- duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60;
-
- ok("Start is 1997-08-01 12:00:00 /softwarestudio.org/Olson_20010626_2/Europe/Rome",
- (0 == strcmp("1997-08-01 12:00:00 /softwarestudio.org/Olson_20010626_2/Europe/Rome", ictt_as_string(icalcomponent_get_dtstart(c)))));
- ok("End is 1997-08-01 13:30:00 /softwarestudio.org/Olson_20010626_2/Europe/Rome",
- (0 == strcmp("1997-08-01 13:30:00 /softwarestudio.org/Olson_20010626_2/Europe/Rome", ictt_as_string(icalcomponent_get_dtend(c)))));
- ok("Duration is 90 m", (duration == 90));
-
- icalcomponent_free(c);
-}
-
-void test_time_parser()
-{
- struct icaltimetype tt;
-
- icalerror_errors_are_fatal = 0;
-
- tt = icaltime_from_string("19970101T1000");
- ok("19970101T1000 is null time", icaltime_is_null_time(tt));
-
- tt = icaltime_from_string("19970101X100000");
- ok("19970101X100000 is null time", icaltime_is_null_time(tt));
-
- tt = icaltime_from_string("19970101T100000");
- ok("19970101T100000 is valid", !icaltime_is_null_time(tt));
-
- if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt));
-
- tt = icaltime_from_string("19970101T100000Z");
-
- ok("19970101T100000Z is valid" , !icaltime_is_null_time(tt));
- if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt));
-
- tt = icaltime_from_string("19970101");
- ok("19970101 is valid", (!icaltime_is_null_time(tt)));
-
- if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt));
-
- icalerror_errors_are_fatal = 1;
-}
-
-void test_recur_parser()
-{
- struct icalrecurrencetype rt;
- char *str;
-
- str = "FREQ=YEARLY;UNTIL=20000131T090000Z;INTERVAL=1;BYDAY=-1TU,3WE,-4FR,SA,SU;BYYEARDAY=34,65,76,78;BYMONTH=1,2,3,4,8";
- rt = icalrecurrencetype_from_string(str);
- is(str, icalrecurrencetype_as_string(&rt), str);
-
- str = "FREQ=DAILY;COUNT=3;INTERVAL=1;BYDAY=-1TU,3WE,-4FR,SA,SU;BYYEARDAY=34,65,76,78;BYMONTH=1,2,3,4,8";
-
- rt = icalrecurrencetype_from_string(str);
- is(str, icalrecurrencetype_as_string(&rt), str);
-}
-
-char* ical_strstr(const char *haystack, const char *needle){
- return strstr(haystack,needle);
-}
-
-void test_start_of_week()
-{
- struct icaltimetype tt2;
- struct icaltimetype tt1 = icaltime_from_string("19900110");
- int dow, doy,start_dow;
-
- do{
- tt1 = icaltime_normalize(tt1);
-
- doy = icaltime_start_doy_of_week(tt1);
- dow = icaltime_day_of_week(tt1);
-
- tt2 = icaltime_from_day_of_year(doy,tt1.year);
- start_dow = icaltime_day_of_week(tt2);
-
- if(doy == 1){
- char msg[128];
- sprintf(msg, "%s", ictt_as_string(tt1));
- int_is(msg, start_dow, 1);
- }
-
- if(start_dow != 1){ /* Sunday is 1 */
- printf("failed: Start of week (%s) is not a Sunday \n for %s (doy=%d,dow=%d)\n",ictt_as_string(tt2), ictt_as_string(tt1),dow,start_dow);
- }
-
-
- assert(start_dow == 1);
-
-
- tt1.day+=1;
-
- } while(tt1.year < 2010);
-}
-
-void test_doy()
-{
- struct icaltimetype tt1, tt2;
- short doy,doy2;
- char msg[128];
-
- doy = -1;
-
- tt1 = icaltime_from_string("19900101");
-
- if (VERBOSE) printf("Test icaltime_day_of_year() agreement with mktime\n");
-
- do{
- struct tm stm;
-
- tt1 = icaltime_normalize(tt1);
-
- stm.tm_sec = tt1.second;
- stm.tm_min = tt1.minute;
- stm.tm_hour = tt1.hour;
- stm.tm_mday = tt1.day;
- stm.tm_mon = tt1.month-1;
- stm.tm_year = tt1.year-1900;
- stm.tm_isdst = -1;
-
- mktime(&stm);
-
- doy = icaltime_day_of_year(tt1);
-
- doy2 = stm.tm_yday+1;
-
- if (doy == 1) {
- /** show some test cases **/
- sprintf(msg, "Year %d - mktime() compare", tt1.year);
- int_is(msg, doy,doy2);
- }
-
- if (doy != doy2){
- printf("Failed for %s (%d,%d)\n",ictt_as_string(tt1),doy,doy2);
- }
- assert(doy == doy2);
-
- tt1.day+=1;
-
- } while(tt1.year < 2010);
-
- if (VERBOSE) printf("\nTest icaltime_day_of_year() agreement with icaltime_from_day_of_year()\n");
-
- tt1 = icaltime_from_string("19900101");
-
- do{
- if(doy == 1){
- /** show some test cases **/
- sprintf(msg, "Year %d - icaltime_day_of_year() compare", tt1.year);
- int_is(msg, doy,doy2);
- }
-
- doy = icaltime_day_of_year(tt1);
- tt2 = icaltime_from_day_of_year(doy,tt1.year);
- doy2 = icaltime_day_of_year(tt2);
-
- assert(doy2 == doy);
- assert(icaltime_compare(tt1,tt2) == 0);
-
- tt1.day+=1;
- tt1 = icaltime_normalize(tt1);
-
- } while(tt1.year < 2010);
-
-
- tt1 = icaltime_from_string("19950301");
- doy = icaltime_day_of_year(tt1);
- tt2 = icaltime_from_day_of_year(doy,1995);
- if(VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2));
-
- ok("test 19950301", (tt2.day == 1 && tt2.month == 3));
- ok("day of year == 60", (doy == 60));
-
- tt1 = icaltime_from_string("19960301");
- doy = icaltime_day_of_year(tt1);
- tt2 = icaltime_from_day_of_year(doy,1996);
- if (VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2));
- ok("test 19960301", (tt2.day == 1 && tt2.month == 3));
- ok("day of year == 61", (doy == 61));
-
- tt1 = icaltime_from_string("19970301");
- doy = icaltime_day_of_year(tt1);
- tt2 = icaltime_from_day_of_year(doy,1997);
- if (VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2));
-
- ok("test 19970301", (tt2.day == 1 && tt2.month == 3));
- ok("day of year == 60", (doy == 60));
-
-}
-
-void test_x(){
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libical/ical.h>
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\r\n"
-"RRULE\r\n"
-" ;X-EVOLUTION-ENDDATE=20030209T081500\r\n"
-" :FREQ=DAILY;COUNT=10;INTERVAL=6\r\n"
-"X-COMMENT;X-FOO=BAR: Booga\r\n"
-"END:VEVENT\r\n";
-
- icalcomponent *icalcomp;
- icalproperty *prop;
- struct icalrecurrencetype recur;
- int n_errors;
-
- icalcomp = icalparser_parse_string ((char *) test_icalcomp_str);
- assert(icalcomp!=NULL);
-
- if (VERBOSE) printf("%s\n\n",icalcomponent_as_ical_string(icalcomp));
-
- n_errors = icalcomponent_count_errors (icalcomp);
- int_is("icalparser_parse_string()", n_errors,0);
-
- if (n_errors) {
- /** NOT USED **/
- icalproperty *p;
-
- for (p = icalcomponent_get_first_property (icalcomp,
- ICAL_XLICERROR_PROPERTY);
- p;
- p = icalcomponent_get_next_property (icalcomp,
- ICAL_XLICERROR_PROPERTY)) {
- const char *str;
-
- str = icalproperty_as_ical_string (p);
- fprintf (stderr, "error: %s\n", str);
- }
- }
-
- prop = icalcomponent_get_first_property (icalcomp, ICAL_RRULE_PROPERTY);
- ok("get RRULE property", (prop != NULL));
- assert(prop!=NULL);
-
- recur = icalproperty_get_rrule (prop);
-
- if (VERBOSE) printf("%s\n",icalrecurrencetype_as_string(&recur));
-
- icalcomponent_free(icalcomp);
-
-}
-
-void test_gauge_sql() {
- icalgauge *g;
- char* str;
-
- str= "SELECT DTSTART,DTEND,COMMENT FROM VEVENT,VTODO WHERE VEVENT.SUMMARY = 'Bongoa' AND SEQUENCE < 5";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=NULL));
- if (VERBOSE) icalgauge_dump(g);
-
- icalgauge_free(g);
-
- str="SELECT * FROM VEVENT,VTODO WHERE VEVENT.SUMMARY = 'Bongoa' AND SEQUENCE < 5 OR METHOD != 'CREATE'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=NULL));
- if (VERBOSE) icalgauge_dump(g);
-
- icalgauge_free(g);
-
- str="SELECT * FROM VEVENT WHERE SUMMARY == 'BA301'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=NULL));
- if (VERBOSE) icalgauge_dump(g);
-
- icalgauge_free(g);
-
- str="SELECT * FROM VEVENT WHERE SUMMARY == 'BA301'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=NULL));
- if (VERBOSE) icalgauge_dump(g);
-
- icalgauge_free(g);
-
- str="SELECT * FROM VEVENT WHERE LOCATION == '104 Forum'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=NULL));
- if (VERBOSE) icalgauge_dump(g);
-
- icalgauge_free(g);
-}
-
-
-void test_gauge_compare() {
- icalgauge *g;
- icalcomponent *c;
- char* str;
-
- /* Equality */
-
- c = icalcomponent_vanew(ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(
- icaltime_from_string("20000101T000002")),0),0);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART = '20000101T000002'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART = '20000101T000002'", (c!=0 && g!=0));
- assert(c!=0);
- assert(g!=0);
-
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART = '20000101T000001'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART = '20000101T000001'\n", (g!=0));
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART != '20000101T000003'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART != '20000101T000003'\n", (c!=0 && g!=0));
-
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
-
- /* Less than */
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART < '20000101T000003'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART < '20000101T000003'", (c!=0 && g!=0));
-
- int_is("compare",icalgauge_compare(g,c), 1);
-
- assert(g!=0);
- icalgauge_free(g);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART < '20000101T000002'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART < '20000101T000002'\n", (g!=0));
-
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- /* Greater than */
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000001'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART > '20000101T000001'\n", (g!=0));
-
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000002'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART > '20000101T000002'\n", (g!=0));
-
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 0);
-
-
- icalgauge_free(g);
-
-
- /* Greater than or Equal to */
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000002'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000002'\n", (g!=0));
-
-
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000003'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000003'\n", (g!=0));
-
-
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- /* Less than or Equal to */
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000002'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000002'\n", (g!=0));
-
-
- assert(g!=0);
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000001'", 0);
-
- ok("SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000001'\n", (g!=0));
-
-
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- icalcomponent_free(c);
-
- /* Combinations */
-
- c = icalcomponent_vanew(ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(
- icaltime_from_string("20000102T000000")),0),0);
-
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000103T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000102T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' or DTSTART < '20000102T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
-
- icalcomponent_free(c);
-
- /* Combinations, non-cannonical component */
-
- c = icalcomponent_vanew(ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(
- icaltime_from_string("20000102T000000")),0);
-
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000103T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000102T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' or DTSTART < '20000102T000000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
- icalcomponent_free(c);
-
-
- /* Complex comparisions */
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_method(ICAL_METHOD_REQUEST),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(
- icaltime_from_string("20000101T000002")),
- icalproperty_new_comment("foo"),
- icalcomponent_vanew(
- ICAL_VALARM_COMPONENT,
- icalproperty_new_dtstart(
- icaltime_from_string("20000101T120000")),
-
- 0),
- 0),
- 0);
-
-
- str = "SELECT * FROM VEVENT WHERE VALARM.DTSTART = '20000101T120000'";
-
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE COMMENT = 'foo'";
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE COMMENT = 'foo' AND VALARM.DTSTART = '20000101T120000'";
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE COMMENT = 'bar' AND VALARM.DTSTART = '20000101T120000'";
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 0);
-
- icalgauge_free(g);
-
- str = "SELECT * FROM VEVENT WHERE COMMENT = 'bar' or VALARM.DTSTART = '20000101T120000'";
- g = icalgauge_new_from_sql(str, 0);
- ok(str, (g!=0));
- int_is("compare",icalgauge_compare(g,c), 1);
-
- icalgauge_free(g);
-
- icalcomponent_free(c);
-
-}
-
-icalcomponent* make_component(int i){
-
- icalcomponent *c;
-
- struct icaltimetype t = icaltime_from_string("20000101T120000Z");
-
- t.day += i;
-
- icaltime_normalize(t);
-
- c = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_method(ICAL_METHOD_REQUEST),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_dtstart(t),
- 0),
- 0);
-
- assert(c != 0);
-
- return c;
-
-}
-void test_fileset()
-{
- icalset *fs;
- icalcomponent *c;
- int i;
- int comp_count = 0;
- char *path = "test_fileset.ics";
- icalgauge *g = icalgauge_new_from_sql(
- "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND DTSTART <= '20000106T120000Z'", 0);
-
- ok("icalgauge_new_from_sql()", (g!=NULL));
-
- unlink(path);
-
- fs = icalfileset_new(path);
-
- ok("icalfileset_new()", (fs!=NULL));
- assert(fs != 0);
-
- for (i = 0; i!= 10; i++){
- c = make_component(i);
- icalfileset_add_component(fs,c);
- }
-
- icalfileset_commit(fs);
-
- icalset_free(fs);
- /** reopen fileset.ics **/
- fs = icalfileset_new(path);
-
- if (VERBOSE) printf("== No Selections \n");
-
- comp_count = 0;
- for (c = icalfileset_get_first_component(fs);
- c != 0;
- c = icalfileset_get_next_component(fs)){
- struct icaltimetype t = icalcomponent_get_dtstart(c);
- comp_count++;
- if (VERBOSE) printf("%s\n",icaltime_as_ctime(t));
- }
- int_is("icalfileset get components",comp_count, 10);
-
- icalfileset_select(fs,g);
-
- if (VERBOSE) printf("\n== DTSTART > '20000103T120000Z' AND DTSTART <= '20000106T120000Z' \n");
-
- comp_count = 0;
- for (c = icalfileset_get_first_component(fs);
- c != 0;
- c = icalfileset_get_next_component(fs)){
- struct icaltimetype t = icalcomponent_get_dtstart(c);
- comp_count++;
- if (VERBOSE) printf("%s\n",icaltime_as_ctime(t));
- }
- int_is("icalfileset get components with gauge",comp_count, 3);
-
- icalset_free(fs);
-
- /*icalgauge_free(g);*/
-
-}
-
-void microsleep(int us)
-{
-#ifndef WIN32
- struct timeval tv;
-
- tv.tv_sec = 0;
- tv.tv_usec = us;
-
- select(0,0,0,0,&tv);
-#else
- Sleep(us);
-#endif
-}
-
-
-void test_file_locks()
-{
-#ifndef WIN32
- pid_t pid;
- char *path = "test_fileset_locktest.ics";
- icalset *fs;
- icalcomponent *c, *c2;
- struct icaldurationtype d;
- int i;
- int final,sec;
-
- icalerror_clear_errno();
-
- unlink(path);
-
- fs = icalfileset_new(path);
-
- if(icalfileset_get_first_component(fs)==0){
- c = make_component(0);
-
- d = icaldurationtype_from_int(1);
-
- icalcomponent_set_duration(c,d);
-
- icalfileset_add_component(fs,c);
-
- c2 = icalcomponent_new_clone(c);
-
- icalfileset_add_component(fs,c2);
-
- icalfileset_commit(fs);
- }
-
- icalset_free(fs);
-
- assert(icalerrno == ICAL_NO_ERROR);
-
- pid = fork();
-
- assert(pid >= 0);
-
- if(pid == 0){
- /*child*/
- int i;
-
- microsleep(rand()/(RAND_MAX/100));
-
- for(i = 0; i< 50; i++){
- fs = icalfileset_new(path);
-
-
- assert(fs != 0);
-
- c = icalfileset_get_first_component(fs);
-
- assert(c!=0);
-
- d = icalcomponent_get_duration(c);
- d = icaldurationtype_from_int(icaldurationtype_as_int(d)+1);
-
- icalcomponent_set_duration(c,d);
- icalcomponent_set_summary(c,"Child");
-
- c2 = icalcomponent_new_clone(c);
- icalcomponent_set_summary(c2,"Child");
- icalfileset_add_component(fs,c2);
-
- icalfileset_mark(fs);
- icalfileset_commit(fs);
-
- icalset_free(fs);
-
- microsleep(rand()/(RAND_MAX/20));
-
-
- }
-
- exit(0);
-
- } else {
- /* parent */
- int i;
-
- for(i = 0; i< 50; i++){
- fs = icalfileset_new(path);
-
- assert(fs != 0);
-
- c = icalfileset_get_first_component(fs);
-
- assert(c!=0);
-
- d = icalcomponent_get_duration(c);
- d = icaldurationtype_from_int(icaldurationtype_as_int(d)+1);
-
- icalcomponent_set_duration(c,d);
- icalcomponent_set_summary(c,"Parent");
-
- c2 = icalcomponent_new_clone(c);
- icalcomponent_set_summary(c2,"Parent");
- icalfileset_add_component(fs,c2);
-
- icalfileset_mark(fs);
- icalfileset_commit(fs);
- icalset_free(fs);
-
- putc('.',stdout);
- fflush(stdout);
-
- }
- }
-
- assert(waitpid(pid,0,0)==pid);
-
-
- fs = icalfileset_new(path);
-
- i=1;
-
- c = icalfileset_get_first_component(fs);
- final = icaldurationtype_as_int(icalcomponent_get_duration(c));
- for (c = icalfileset_get_next_component(fs);
- c != 0;
- c = icalfileset_get_next_component(fs)){
- struct icaldurationtype d = icalcomponent_get_duration(c);
- sec = icaldurationtype_as_int(d);
-
- /*printf("%d,%d ",i,sec);*/
- assert(i == sec);
- i++;
- }
-
- printf("\nFinal: %d\n",final);
-
-
- assert(sec == final);
-#endif
-}
-
-void test_action()
-{
- icalcomponent *c;
- icalproperty *p;
- char *str;
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\n"
-"ACTION:EMAIL\n"
-"ACTION:PROCEDURE\n"
-"ACTION:AUDIO\n"
-"ACTION:FUBAR\n"
-"END:VEVENT\n";
-
-
- c = icalparser_parse_string ((char *) test_icalcomp_str);
-
- ok("icalparser_parse_string(), ACTIONS", (c!=NULL));
- assert(c!=0);
-
- str = icalcomponent_as_ical_string(c);
- is("icalcomponent_as_ical_string()", str, ((char*) test_icalcomp_str));
- if (VERBOSE) printf("%s\n\n",str);
-
- p = icalcomponent_get_first_property(c,ICAL_ACTION_PROPERTY);
-
- ok("ICAL_ACTION_EMAIL", (icalproperty_get_action(p) == ICAL_ACTION_EMAIL));
-
- p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY);
-
- ok("ICAL_ACTION_PROCEDURE", (icalproperty_get_action(p) == ICAL_ACTION_PROCEDURE));
-
- p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY);
-
- ok("ICAL_ACTION_AUDIO", (icalproperty_get_action(p) == ICAL_ACTION_AUDIO));
-
- p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY);
-
- ok("ICAL_ACTION_X", (icalproperty_get_action(p) == ICAL_ACTION_X));
- is("ICAL_ACTION -> FUBAR", icalvalue_get_x(icalproperty_get_value(p)), "FUBAR");
- icalcomponent_free(c);
-}
-
-
-
-void test_trigger()
-{
-
- struct icaltriggertype tr;
- icalcomponent *c;
- icalproperty *p;
- const char* str;
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\n"
-"TRIGGER;VALUE=DATE-TIME:19980403T120000\n"
-"TRIGGER;VALUE=DURATION:-PT15M\n"
-"TRIGGER;VALUE=DATE-TIME:19980403T120000\n"
-"TRIGGER;VALUE=DURATION:-PT15M\n"
-"END:VEVENT\n";
-
-
- c = icalparser_parse_string ((char *) test_icalcomp_str);
- ok("icalparser_parse_string()", (c!= NULL));
- assert(c!=NULL);
-
- is("parsed triggers", icalcomponent_as_ical_string(c), (char*)test_icalcomp_str);
-
- for(p = icalcomponent_get_first_property(c,ICAL_TRIGGER_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(c,ICAL_TRIGGER_PROPERTY)){
- tr = icalproperty_get_trigger(p);
-
- if(!icaltime_is_null_time(tr.time)){
- if (VERBOSE) printf("value=DATE-TIME:%s\n", icaltime_as_ical_string(tr.time));
- } else {
- if (VERBOSE) printf("value=DURATION:%s\n", icaldurationtype_as_ical_string(tr.duration));
- }
- }
-
- icalcomponent_free(c);
-
- /* Trigger, as a DATETIME */
- tr.duration = icaldurationtype_null_duration();
- tr.time = icaltime_from_string("19970101T120000");
- p = icalproperty_new_trigger(tr);
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\n");
- icalproperty_free(p);
-
- /* TRIGGER, as a DURATION */
- tr.time = icaltime_null_time();
- tr.duration = icaldurationtype_from_string("P3DT3H50M45S");
- p = icalproperty_new_trigger(tr);
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\n");
- icalproperty_free(p);
-
- /* TRIGGER, as a DATETIME, VALUE=DATETIME*/
- tr.duration = icaldurationtype_null_duration();
- tr.time = icaltime_from_string("19970101T120000");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DATETIME));
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\n");
- icalproperty_free(p);
-
- /*TRIGGER, as a DURATION, VALUE=DATETIME */
- tr.time = icaltime_null_time();
- tr.duration = icaldurationtype_from_string("P3DT3H50M45S");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DATETIME ));
-
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\n");
- icalproperty_free(p);
-
- /* TRIGGER, as a DATETIME, VALUE=DURATION*/
- tr.duration = icaldurationtype_null_duration();
- tr.time = icaltime_from_string("19970101T120000");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DURATION));
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\n");
- icalproperty_free(p);
-
- /*TRIGGER, as a DURATION, VALUE=DURATION */
- tr.time = icaltime_null_time();
- tr.duration = icaldurationtype_from_string("P3DT3H50M45S");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DURATION));
-
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\n");
- icalproperty_free(p);
-
-
- /* TRIGGER, as a DATETIME, VALUE=BINARY */
- tr.duration = icaldurationtype_null_duration();
- tr.time = icaltime_from_string("19970101T120000");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\n");
- icalproperty_free(p);
-
- /*TRIGGER, as a DURATION, VALUE=BINARY */
- tr.time = icaltime_null_time();
- tr.duration = icaldurationtype_from_string("P3DT3H50M45S");
- p = icalproperty_new_trigger(tr);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
-
- str = icalproperty_as_ical_string(p);
-
- is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\n");
- icalproperty_free(p);
-}
-
-
-void test_rdate()
-{
-
- struct icaldatetimeperiodtype dtp;
- icalproperty *p;
- const char* str;
- struct icalperiodtype period;
-
- period.start = icaltime_from_string("19970101T120000");
- period.end = icaltime_null_time();
- period.duration = icaldurationtype_from_string("PT3H10M15S");
-
- /* RDATE, as DATE-TIME */
- dtp.time = icaltime_from_string("19970101T120000");
- dtp.period = icalperiodtype_null_period();
- p = icalproperty_new_rdate(dtp);
- str = icalproperty_as_ical_string(p);
-
- is("RDATE as DATE-TIME",
- "RDATE;VALUE=DATE-TIME:19970101T120000\n",str);
- icalproperty_free(p);
-
- /* RDATE, as PERIOD */
- dtp.time = icaltime_null_time();
- dtp.period = period;
- p = icalproperty_new_rdate(dtp);
-
- str = icalproperty_as_ical_string(p);
- is("RDATE, as PERIOD", "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\n",str);
- icalproperty_free(p);
-
- /* RDATE, as DATE-TIME, VALUE=DATE-TIME */
- dtp.time = icaltime_from_string("19970101T120000");
- dtp.period = icalperiodtype_null_period();
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_DATETIME));
- str = icalproperty_as_ical_string(p);
-
- is("RDATE, as DATE-TIME, VALUE=DATE-TIME",
- "RDATE;VALUE=DATE-TIME:19970101T120000\n",str);
- icalproperty_free(p);
-
-
- /* RDATE, as PERIOD, VALUE=DATE-TIME */
- dtp.time = icaltime_null_time();
- dtp.period = period;
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_DATETIME));
- str = icalproperty_as_ical_string(p);
- is("RDATE, as PERIOD, VALUE=DATE-TIME",
- "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\n",str);
- icalproperty_free(p);
-
-
- /* RDATE, as DATE-TIME, VALUE=PERIOD */
- dtp.time = icaltime_from_string("19970101T120000");
- dtp.period = icalperiodtype_null_period();
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_PERIOD));
- str = icalproperty_as_ical_string(p);
-
- is("RDATE, as DATE-TIME, VALUE=PERIOD",
- "RDATE;VALUE=DATE-TIME:19970101T120000\n",str);
- icalproperty_free(p);
-
-
- /* RDATE, as PERIOD, VALUE=PERIOD */
- dtp.time = icaltime_null_time();
- dtp.period = period;
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_PERIOD));
- str = icalproperty_as_ical_string(p);
-
- is("RDATE, as PERIOD, VALUE=PERIOD",
- "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\n",str);
- icalproperty_free(p);
-
-
- /* RDATE, as DATE-TIME, VALUE=BINARY */
- dtp.time = icaltime_from_string("19970101T120000");
- dtp.period = icalperiodtype_null_period();
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
- str = icalproperty_as_ical_string(p);
-
- is("RDATE, as DATE-TIME, VALUE=BINARY",
- "RDATE;VALUE=DATE-TIME:19970101T120000\n",str);
- icalproperty_free(p);
-
-
- /* RDATE, as PERIOD, VALUE=BINARY */
- dtp.time = icaltime_null_time();
- dtp.period = period;
- p = icalproperty_new_rdate(dtp);
- icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
- str = icalproperty_as_ical_string(p);
-
- is("RDAE, as PERIOD, VALUE=BINARY",
- "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\n",str);
- icalproperty_free(p);
-}
-
-
-void test_langbind()
-{
- icalcomponent *c, *inner;
- icalproperty *p;
- char *test_str_parsed;
- static const char test_str[] =
-"BEGIN:VEVENT\n"
-"ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n"
-"COMMENT: Comment that \n spans a line\n"
-"COMMENT: Comment with \"quotable\" \'characters\' and other \t bad magic \n things \f Yeah.\n"
-"DTSTART:19970101T120000\n"
-"DTSTART:19970101T120000Z\n"
-"DTSTART:19970101\n"
-"DURATION:P3DT4H25M\n"
-"FREEBUSY:19970101T120000/19970101T120000\n"
-"FREEBUSY:19970101T120000/P3DT4H25M\n"
-"END:VEVENT\n";
-
- static const char *test_str_parsed_good =
-"BEGIN:VEVENT\n"
-"ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:\n"
-" employee-A@host.com\n"
-"COMMENT: Comment that spans a line\n"
-"COMMENT: Comment with \\\"quotable\\\" 'characters' and other \\t bad magic \n"
-" things \\f Yeah.\n"
-"DTSTART:19970101T120000\n"
-"DTSTART:19970101T120000Z\n"
-"DTSTART;VALUE=DATE:19970101\n"
-"DURATION:P3DT4H25M\n"
-"FREEBUSY:19970101T120000/19970101T120000\n"
-"FREEBUSY:19970101T120000/P3DT4H25M\n"
-"END:VEVENT\n";
-
- if (VERBOSE) printf("%s\n",test_str);
-
- c = icalparser_parse_string(test_str);
-
- ok("icalparser_parse_string()", (c!=NULL));
- assert(c != NULL);
-
- test_str_parsed = icalcomponent_as_ical_string(c);
-
- is("parsed version with bad chars, etc",
- test_str_parsed,
- test_str_parsed_good);
-
-
- inner = icalcomponent_get_inner(c);
-
- for(
- p = icallangbind_get_first_property(inner,"ANY");
- p != 0;
- p = icallangbind_get_next_property(inner,"ANY")
- ) {
-
- const char *str = icallangbind_property_eval_string(p,":");
- /** TODO add tests **/
- if (VERBOSE) printf("%s\n",str);
- }
-
-
- p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY);
-
- icalproperty_set_parameter_from_string(p,"CUTYPE","INDIVIDUAL");
-
- is ("Set attendee parameter",
- icalproperty_as_ical_string(p),
- "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL:MAILTO:\n"
- " employee-A@host.com\n");
-
- icalproperty_set_value_from_string(p,"mary@foo.org","TEXT");
-
- is ("Set attendee parameter value",
- icalproperty_as_ical_string(p),
- "ATTENDEE;VALUE=TEXT;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL:\n"
-" mary@foo.org\n");
-
- icalcomponent_free(c);
-}
-
-void test_property_parse()
-{
- icalproperty *p;
- const char *str;
-
- p= icalproperty_new_from_string(
- "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com");
-
- ok("icalproperty_from_string(), ATTENDEE", (p != 0));
- assert (p != 0);
-
- str = icalproperty_as_ical_string(p);
- if (VERBOSE) printf("%s\n",str);
-
- icalproperty_free(p);
-
- p= icalproperty_new_from_string("DTSTART:19970101T120000Z\n");
-
- ok("icalproperty_from_string(), simple DTSTART", (p != 0));
- assert (p != 0);
-
- str = icalproperty_as_ical_string(p);
- if (VERBOSE) printf("%s\n",str);
-
- icalproperty_free(p);
-
-}
-
-
-void test_value_parameter()
-{
-
- icalcomponent *c;
- icalproperty *p;
- icalparameter *param;
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\n"
-"DTSTART;VALUE=DATE-TIME:19971123T123000\n"
-"DTSTART;VALUE=DATE:19971123\n"
-"DTSTART;VALUE=FOO:19971123T123000\n"
-"END:VEVENT\n";
-
- c = icalparser_parse_string ((char *) test_icalcomp_str);
- ok("icalparser_parse_string()", (c != NULL));
- if (!c) {
- exit (EXIT_FAILURE);
- }
-
- if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c));
-
- p = icalcomponent_get_first_property(c,ICAL_DTSTART_PROPERTY);
- param = icalproperty_get_first_parameter(p,ICAL_VALUE_PARAMETER);
-
- ok("icalproperty_get_value()", (icalparameter_get_value(param) == ICAL_VALUE_DATETIME));
-
- p = icalcomponent_get_next_property(c,ICAL_DTSTART_PROPERTY);
- param = icalproperty_get_first_parameter(p,ICAL_VALUE_PARAMETER);
- ok("icalproperty_get_first_parameter()",(icalparameter_get_value(param) == ICAL_VALUE_DATE));
-
- icalcomponent_free(c);
-}
-
-
-void test_x_parameter()
-{
- icalproperty *p;
-
- p= icalproperty_new_from_string(
- "COMMENT;X-A=1;X-B=2: This is a note");
-
- if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p));
-
- ok("COMMENT property",(icalproperty_isa(p) == ICAL_COMMENT_PROPERTY));
- is("COMMENT parses param", icalproperty_get_comment(p)," This is a note");
-
- icalproperty_set_parameter_from_string(p,"X-LIES", "no");
- icalproperty_set_parameter_from_string(p,"X-LAUGHS", "big");
- icalproperty_set_parameter_from_string(p,"X-TRUTH", "yes");
- icalproperty_set_parameter_from_string(p,"X-HUMOUR", "bad");
-
- if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p));
-
- is("Check X-LIES", icalproperty_get_parameter_as_string(p, "X-LIES"), "no");
- is("Check X-LAUGHS", icalproperty_get_parameter_as_string(p, "X-LAUGHS"), "big");
- is("Check X-TRUTH", icalproperty_get_parameter_as_string(p, "X-TRUTH"), "yes");
- is("Check X-HUMOUR", icalproperty_get_parameter_as_string(p, "X-HUMOUR"), "bad");
-
- icalproperty_free(p);
-}
-
-
-
-void test_x_property()
-{
- icalproperty *p;
-
- p= icalproperty_new_from_string(
- "X-LIC-PROPERTY: This is a note");
-
- if (VERBOSE && p) printf("%s\n",icalproperty_as_ical_string(p));
-
- ok("x-property is correct kind",(icalproperty_isa(p) == ICAL_X_PROPERTY));
- is("icalproperty_get_x_name() works",
- icalproperty_get_x_name(p),"X-LIC-PROPERTY");
- is("icalproperty_get_x() works",
- icalproperty_get_x(p)," This is a note");
-
- icalproperty_free(p);
-}
-
-void test_utcoffset()
-{
- icalproperty *p;
-
- p = icalproperty_new_from_string("TZOFFSETFROM:-001608");
- ok("parse TZOOFSETFROM:-001608", (p!=NULL));
-
- if (VERBOSE && p) printf("%s\n",icalproperty_as_ical_string(p));
-
- if (p) icalproperty_free(p);
-}
-
-void test_attach()
-{
- icalcomponent *c;
-
- static const char test_icalcomp_str[] =
-"BEGIN:VEVENT\n"
-"ATTACH:CID:jsmith.part3.960817T083000.xyzMain@host1.com\n"
-"ATTACH:FMTTYPE=application/postscript;ftp://xyzCorp.com/pub/reports/r-960812.ps\n"
-"END:VEVENT\n";
-
- c = icalparser_parse_string ((char *) test_icalcomp_str);
- ok("parse simple attachment", (c != NULL));
-
- if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c));
-
- if (c) icalcomponent_free(c);
-}
-
-
-void test_vcal(void)
-{
- VObject *vcal = 0;
- icalcomponent *comp;
- char* file = "../../test-data/user-cal.vcf";
-
- vcal = Parse_MIME_FromFileName(file);
-
- ok("Parsing ../../test-data/user-cal.vcf", (vcal != 0));
-
- comp = icalvcal_convert(vcal);
-
- ok("Converting to ical component", (comp != 0));
-
- if (VERBOSE && comp)
- printf("%s\n",icalcomponent_as_ical_string(comp));
-
- if (comp) icalcomponent_free(comp);
- if (vcal) deleteVObject(vcal);
-}
-
-int main(int argc, char *argv[])
-{
- int c;
- extern char *optarg;
- extern int optopt;
- int errflg=0;
- char* program_name = strrchr(argv[0],'/');
- int do_test = 0;
- int do_header = 0;
-
- set_zone_directory("../../zoneinfo");
- putenv("TZ=");
-
- test_start(0);
-
-
-#ifndef WIN32
- while ((c = getopt(argc, argv, "lvq")) != -1) {
- switch (c) {
- case 'v': {
- VERBOSE = 1;
- break;
- }
- case 'q': {
- QUIET = 1;
- break;
- }
- case 'l': {
- do_header = 1;;
- }
- case '?': {
- errflg++;
- }
- }
- }
- if (optind < argc) {
- do_test = atoi(argv[argc-1]);
- }
-#else
- if (argc>1)
- do_test = atoi(argv[2]);
-
-#endif
-
-
- test_run("Test time parser functions", test_time_parser, do_test, do_header);
- test_run("Test time", test_time, do_test, do_header);
- test_run("Test day of Year", test_doy, do_test, do_header);
- test_run("Test duration", test_duration, do_test, do_header);
- test_run("Test period", test_period, do_test, do_header);
- test_run("Test DTSTART", test_dtstart, do_test, do_header);
- test_run("Test day of year of week start", test_start_of_week, do_test, do_header);
- test_run("Test recur parser", test_recur_parser, do_test, do_header);
- test_run("Test recur", test_recur, do_test, do_header);
- test_run("Test Recurring Events File", test_recur_file, do_test, do_header);
- test_run("Test parameter bug", test_recur_parameter_bug, do_test, do_header);
- test_run("Test Array Expansion", test_expand_recurrence, do_test, do_header);
- test_run("Test Free/Busy lists", test_fblist, do_test, do_header);
- test_run("Test Overlaps", test_overlaps, do_test, do_header);
-
- test_run("Test Span", test_icalcomponent_get_span, do_test, do_header);
- test_run("Test Gauge SQL", test_gauge_sql, do_test, do_header);
- test_run("Test Gauge Compare", test_gauge_compare, do_test, do_header);
- test_run("Test File Set", test_fileset, do_test, do_header);
- test_run("Test File Set (Extended)", test_fileset_extended, do_test, do_header);
- test_run("Test Dir Set", test_dirset, do_test, do_header);
- test_run("Test Dir Set (Extended)", test_dirset_extended, do_test, do_header);
-
- test_run("Test File Locks", test_file_locks, do_test, do_header);
- test_run("Test X Props and Params", test_x, do_test, do_header);
- test_run("Test Trigger", test_trigger, do_test, do_header);
- test_run("Test Restriction", test_restriction, do_test, do_header);
- test_run("Test RDATE", test_rdate, do_test, do_header);
- test_run("Test language binding", test_langbind, do_test, do_header);
- test_run("Test property parser", test_property_parse, do_test, do_header);
- test_run("Test Action", test_action, do_test, do_header);
- test_run("Test Value Parameter", test_value_parameter, do_test, do_header);
- test_run("Test X property", test_x_property, do_test, do_header);
- test_run("Test X parameter", test_x_parameter, do_test, do_header);
- test_run("Test request status", test_requeststat, do_test, do_header);
- test_run("Test UTC-OFFSET", test_utcoffset, do_test, do_header);
- test_run("Test Values", test_values, do_test, do_header);
- test_run("Test Parameters", test_parameters, do_test, do_header);
- test_run("Test Properties", test_properties, do_test, do_header);
- test_run("Test Components", test_components, do_test, do_header);
- test_run("Test Convenience", test_convenience, do_test, do_header);
- test_run("Test classify ", test_classify, do_test, do_header);
- test_run("Test Iterators", test_iterators, do_test, do_header);
- test_run("Test strings", test_strings, do_test, do_header);
- test_run("Test Compare", test_compare, do_test, do_header);
- test_run("Create Simple Component", create_simple_component, do_test, do_header);
- test_run("Create Components", create_new_component, do_test, do_header);
- test_run("Create Components with vaargs", create_new_component_with_va_args, do_test, do_header);
- test_run("Test Memory", test_memory, do_test, do_header);
- test_run("Test Attachment", test_attach, do_test, do_header);
- test_run("Test icalcalendar", test_calendar, do_test, do_header);
- test_run("Test Dirset", test_dirset, do_test, do_header);
- test_run("Test vCal to iCal conversion", test_vcal, do_test, do_header);
- test_run("Test UTF-8 Handling", test_utf8, do_test, do_header);
-
- /** OPTIONAL TESTS go here... **/
-
-#ifdef WITH_CXX_BINDINGS
- test_run("Test C++ API", test_cxx, do_test, do_header);
-#endif
-
-#ifdef WITH_BDB
- test_run("Test BDB Set", test_bdbset, do_test, do_header);
-#endif
-
-
- icaltimezone_free_builtin_timezones();
- icalmemory_free_ring();
- free_zone_directory();
-
- test_end();
-
- return 0;
-}
-
-
diff --git a/libical/src/test/regression.h b/libical/src/test/regression.h
deleted file mode 100644
index 633cd3295d..0000000000
--- a/libical/src/test/regression.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int VERBOSE;
-extern int QUIET;
-
-/* regression-component.c */
-void create_new_component(void);
-void create_new_component_with_va_args(void);
-void create_simple_component(void);
-void test_icalcomponent_get_span(void);
-void create_new_component_with_va_args(void);
-
-/* regression-classify.c */
-void test_classify(void);
-
-/* regression-recur.c */
-void test_recur_file(void);
-
-/* regression-cxx.c */
-void test_cxx(void);
-
-/* regression-storage.c */
-void test_fileset_extended(void);
-void test_dirset_extended(void);
-void test_bdbset(void);
-
-/* regression-utils.c */
-const char* ical_timet_string(const time_t t);
-const char* ictt_as_string(struct icaltimetype t);
-char* icaltime_as_ctime(struct icaltimetype t);
-
-
-void _ok(char*name, int result, char*file, int linenum, char *test);
-void _is(char* test_name, const char* str1, const char* str2, char *file, int linenum);
-void _int_is(char* test_name, int i1, int i2, char *file, int linenum);
-#define ok(TEST, EX) (_ok(TEST, EX, __FILE__, __LINE__, #EX))
-#define is(S1, S2, EX) (_is(S1, S2, EX, __FILE__, __LINE__))
-#define int_is(I1, I2, EX) (_int_is(I1, I2, EX, __FILE__, __LINE__))
-void test_header(char*title, int test_set);
-void test_start(int);
-void test_end(void);
-void test_run(char *test_name,
- void (*test_fcn)(void),
- int do_test, int headeronly);
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/libical/src/test/storage.c b/libical/src/test/storage.c
deleted file mode 100644
index acd9d95734..0000000000
--- a/libical/src/test/storage.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: storage.c
- CREATOR: eric 03 April 1999
-
- DESCRIPTION:
-
- $Id$
- $Locker$
-
- (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
- The original code is usecases.c
-
-
- ======================================================================*/
-
-#include <libical/ical.h>
-#include <assert.h>
-#include <string.h> /* for strdup */
-#include <stdlib.h> /* for malloc */
-#include <stdio.h> /* for printf */
-#include <time.h> /* for time() */
-#include "icalmemory.h"
-#include "icaldirset.h"
-#include "icalfileset.h"
-#ifdef WITH_BDB4
-#include "icalbdbset.h"
-#endif
-#include "icalerror.h"
-#include "icalrestriction.h"
-#include "icalcalendar.h"
-
-#define OUTPUT_FILE "filesetout.ics"
-#define DATABASE "calendar.db"
-
-/* define sample calendar struct */
-struct calendar {
- int ID;
- int total_size;
-
- /* offsets */
- int total_size_offset;
- int vcalendar_size_offset;
- int vcalendar_offset;
- int title_size_offset;
- int title_offset;
-
- /* data */
- int vcalendar_size;
- char *vcalendar;
-
- int title_size;
- char *title;
-
-};
-
-int vcalendar_init(struct calendar **cal, char *vcalendar, char *title);
-
-#ifdef WITH_BDB4
-int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey);
-char * parse_vcalendar(const DBT *dbt) ;
-#endif
-
-char * pack_calendar(struct calendar *cal, int size);
-struct calendar * unpack_calendar(char *str, int size);
-
-char str[] = "BEGIN:VCALENDAR\n\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\
-VERSION:2.0\n\
-BEGIN:VTIMEZONE\n\
-TZID:US-Eastern\n\
-BEGIN:STANDARD\n\
-DTSTART:19981025T020000\n\
-RDATE:19981025T020000\n\
-TZOFFSETFROM:-0400\n\
-TZOFFSETTO:-0500\n\
-TZNAME:EST\n\
-END:STANDARD\n\
-BEGIN:DAYLIGHT\n\
-DTSTART:19990404T020000\n\
-RDATE:19990404T020000\n\
-TZOFFSETFROM:-0500\n\
-TZOFFSETTO:-0400\n\
-TZNAME:EDT\n\
-END:DAYLIGHT\n\
-END:VTIMEZONE\n\
-BEGIN:VEVENT\n\
-DTSTAMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\
-DESCRIPTION:Project XYZ Review Meeting\n\
-CATEGORIES:MEETING\n\
-CLASS:PUBLIC\n\
-CREATED:19980309T130000Z\n\
-SUMMARY:XYZ Project Review\n\
-DTSTART;TZID=US-Eastern:19980312T083000\n\
-DTEND;TZID=US-Eastern:19980312T093000\n\
-LOCATION:1CP Conference Room 4350\n\
-END:VEVENT\n\
-BEGIN:BOOGA\n\
-DTSTAMP:19980309T231000Z\n\
-X-LIC-FOO:Booga\n\
-DTSTOMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-END:BOOGA\n\
-END:VCALENDAR";
-
-char str2[] = "BEGIN:VCALENDAR\n\
-PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\
-VERSION:2.0\n\
-BEGIN:VEVENT\n\
-DTSTAMP:19980309T231000Z\n\
-UID:guid-1.host1.com\n\
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\
-DESCRIPTION:Project XYZ Review Meeting\n\
-CATEGORIES:MEETING\n\
-CLASS:PUBLIC\n\
-CREATED:19980309T130000Z\n\
-SUMMARY:XYZ Project Review\n\
-DTSTART;TZID=US-Eastern:19980312T083000\n\
-DTEND;TZID=US-Eastern:19980312T093000\n\
-LOCATION:1CP Conference Room 4350\n\
-END:VEVENT\n\
-END:VCALENDAR\n\
-";
-
-void test_fileset()
-{
- icalfileset *cout;
- int month = 0;
- int count=0;
- struct icaltimetype start, end;
- icalcomponent *c,*clone, *itr;
-
- start = icaltime_from_timet( time(0),0);
- end = start;
- end.hour++;
-
- cout = icalfileset_new(OUTPUT_FILE);
- assert(cout != 0);
-
- c = icalparser_parse_string(str2);
- assert(c != 0);
-
- /* Add data to the file */
-
- for(month = 1; month < 10; month++){
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- cout = icalfileset_new(OUTPUT_FILE);
- assert(cout != 0);
-
- start.month = month;
- end.month = month;
-
- clone = icalcomponent_new_clone(c);
- assert(clone !=0);
- event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT);
- assert(event != 0);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- assert(dtstart!=0);
- icalproperty_set_dtstart(dtstart,start);
-
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
- assert(dtend!=0);
- icalproperty_set_dtend(dtend,end);
-
- icalfileset_add_component(cout,clone);
- icalfileset_commit(cout);
-
- icalset_free(cout);
-
- }
-
- /* Print them out */
-
- cout = icalfileset_new(OUTPUT_FILE);
- assert(cout != 0);
-
- for (itr = icalfileset_get_first_component(cout);
- itr != 0;
- itr = icalfileset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
-
- /* Remove all of them */
-
- icalset_free(cout);
-
- cout = icalfileset_new(OUTPUT_FILE);
- assert(cout != 0);
-
- for (itr = icalfileset_get_first_component(cout);
- itr != 0;
- itr = icalfileset_get_next_component(cout)){
-
-
- icalfileset_remove_component(cout, itr);
- }
-
- icalset_free(cout);
-
-
- /* Print them out again */
-
- cout = icalfileset_new(OUTPUT_FILE);
- assert(cout != 0);
- count =0;
-
- for (itr = icalfileset_get_first_component(cout);
- itr != 0;
- itr = icalfileset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
-
- icalset_free(cout);
-
-
-}
-
-/*
- In this example, we're storing a calendar with several components
- under the reference id "calendar_7286" and retrieving records based
- on title, "month_1" through "month_10". We use a number of the
- "optional" arguments to specify secondary indices, sub-databases
- (i.e. having multiple databases residing within a single Berkeley
- DB file), and keys for storage and retrieval.
-*/
-
-#ifdef WITH_BDB4
-void test_bdbset()
-{
- icalbdbset *cout;
- int month = 0;
- int count=0;
- int num_components=0;
- int szdata_len=0;
- int ret=0;
- char *subdb, *szdata, *szpacked_data;
- char uid[255];
- struct icaltimetype start, end;
- icalcomponent *c,*clone, *itr;
- DB *dbp, *sdbp;
- DBT key, data;
- DBC *dbcp;
-
- struct calendar *cal;
- int cal_size;
-
- start = icaltime_from_timet( time(0),0);
- end = start;
- end.hour++;
-
- /* Note: as per the Berkeley DB ref pages:
- *
- * The database argument is optional, and allows applications to
- * have multiple databases in a single file. Although no database
- * argument needs to be specified, it is an error to attempt to
- * open a second database in a file that was not initially created
- * using a database name.
- *
- */
-
- subdb = "calendar_id";
- sdbp = 0;
-
- /* open database, using subdb */
- dbp = icalbdbset_database_open(DATABASE, subdb, DB_HASH);
- sdbp = icalbdbset_secondary_open(dbp,
- DATABASE,
- "title",
- get_title,
- DB_HASH);
-
- c = icalparser_parse_string(str2);
- assert(c != 0);
-
- /* Add data to the file */
-
- for(month = 1; month < 10; month++){
- icalcomponent *event;
- icalproperty *dtstart, *dtend, *location;
-
- /* retrieve data */
- cout = icalbdbset_new(dbp, sdbp, NULL);
- assert(cout != 0);
-
- start.month = month;
- end.month = month;
-
- clone = icalcomponent_new_clone(c);
- assert(clone !=0);
- event = icalcomponent_get_first_component(clone,
- ICAL_VEVENT_COMPONENT);
- assert(event != 0);
-
- dtstart = icalcomponent_get_first_property(event,
- ICAL_DTSTART_PROPERTY);
- assert(dtstart!=0);
- icalproperty_set_dtstart(dtstart,start);
-
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
- assert(dtend!=0);
- icalproperty_set_dtend(dtend,end);
-
- location = icalcomponent_get_first_property(event, ICAL_LOCATION_PROPERTY);
- assert(location!=0);
-
-#if 0
- /* change the uid to include the month */
- sprintf(uid, "%s_%d", icalcomponent_get_uid(clone), month);
- icalcomponent_set_uid(clone, uid);
-#endif
-
- icalbdbset_add_component(cout,clone);
-
- /* commit changes */
- icalbdbset_commit(cout);
-
- num_components = icalcomponent_count_components(clone, ICAL_ANY_COMPONENT);
-
- icalset_free(cout);
-
- }
-
- /* try out the cursor operations */
- memset(&key, 0, sizeof(DBT));
- memset(&data, 0, sizeof(DBT));
-
- ret = icalbdbset_acquire_cursor(dbp, &dbcp);
- ret = icalbdbset_get_first(dbcp, &key, &data);
- ret = icalbdbset_get_next(dbcp, &key, &data);
- ret = icalbdbset_get_last(dbcp, &key, &data);
-
- /* Print them out */
-
- for(month = 1, count=0; month < 10; month++){
- char *title;
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- cout = icalbdbset_new(dbp, sdbp, NULL);
- assert(cout != 0);
-
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
- icalset_free(cout);
- }
-
- /* close database */
- icalbdbset_database_close(dbp);
- icalbdbset_database_close(sdbp);
-
- /* open database */
- dbp = icalbdbset_database_open(DATABASE, subdb, DB_HASH);
- sdbp = icalbdbset_secondary_open(dbp,
- DATABASE,
- "title",
- get_title,
- DB_HASH);
-
- /* Remove all of them */
- for(month = 1; month < 10; month++){
-
- cout = icalbdbset_new(dbp, sdbp, NULL);
- assert(cout != 0);
-
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalbdbset_remove_component(cout, itr);
- }
-
- icalbdbset_commit(cout);
- icalset_free(cout);
-
- }
-
- /* Print them out again */
-
- for(month = 1, count=0; month < 10; month++){
- char *title;
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- cout = icalbdbset_new(dbp, sdbp, NULL);
- assert(cout != 0);
-
- for (itr = icalbdbset_get_first_component(cout);
- itr != 0;
- itr = icalbdbset_get_next_component(cout)){
-
- icalcomponent *event;
- icalproperty *dtstart, *dtend;
-
- count++;
-
- event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY);
- dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY);
-
- printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart),
- icalproperty_as_ical_string(dtend));
-
- }
- icalset_free(cout);
- }
-}
-
-/* get_title -- extracts a secondary key (the vcalendar)
- * from a primary key/data pair */
-
-/* just create a random title for now */
-
-int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey)
-{
- icalcomponent *cl;
- char title[255];
-
- memset(skey, 0, sizeof(DBT));
-
- cl = icalparser_parse_string((char *)pdata->data);
- sprintf(title, "title_%s", icalcomponent_get_uid(cl));
-
- skey->data = strdup(title);
- skey->size = strlen(skey->data);
- return (0);
-}
-
-char * parse_vcalendar(const DBT *dbt)
-{
- char *str;
- struct calendar *cal;
-
- str = (char *)dbt->data;
- cal = unpack_calendar(str, dbt->size);
-
- return cal->vcalendar;
-}
-
-#endif
-
-
-int vcalendar_init(struct calendar **rcal, char *vcalendar, char *title)
-{
- int vcalendar_size, title_size, total_size;
- struct calendar *cal;
-
- if(vcalendar)
- vcalendar_size = strlen(vcalendar);
- else {
- vcalendar = "";
- vcalendar_size = strlen(vcalendar);
- }
-
- if(title)
- title_size = strlen(title);
- else {
- title = "";
- title_size = strlen(title);
- }
-
- total_size = sizeof(struct calendar) + vcalendar_size + title_size;
-
- if((cal = (struct calendar *)malloc(total_size))==NULL)
- return 0;
- memset(cal, 0, total_size);
-
- /* offsets */
- cal->total_size_offset = sizeof(int);
- cal->vcalendar_size_offset = (sizeof(int) * 7);
- cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int);
- cal->title_size_offset = cal->vcalendar_offset + vcalendar_size;
- cal->title_offset = cal->title_size_offset + sizeof(int);
-
- /* sizes */
- cal->total_size = total_size;
- cal->vcalendar_size = vcalendar_size;
- cal->title_size = title_size;
-
- if (vcalendar && *vcalendar)
- cal->vcalendar = strdup(vcalendar);
-
- if (title && *title)
- cal->title = strdup(title);
-
- *rcal = cal;
-
- return 0;
-}
-
-char * pack_calendar(struct calendar *cal, int size)
-{
- char *str;
-
- if((str = (char *)malloc(sizeof(char) * size))==NULL)
- return 0;
-
- /* ID */
- memcpy(str, &cal->ID, sizeof(cal->ID));
-
- /* total_size */
- memcpy(str + cal->total_size_offset,
- &cal->total_size,
- sizeof(cal->total_size));
-
- /* vcalendar_size */
- memcpy(str + cal->vcalendar_size_offset,
- &cal->vcalendar_size,
- sizeof(cal->vcalendar_size));
-
- /* vcalendar */
- memcpy(str + cal->vcalendar_offset,
- cal->vcalendar,
- cal->vcalendar_size);
-
- /* title_size */
- memcpy(str + cal->title_size_offset,
- &cal->title_size,
- sizeof(cal->title_size));
-
- /* title */
- memcpy(str + cal->title_offset,
- cal->title,
- cal->title_size);
-
- return str;
-}
-
-struct calendar * unpack_calendar(char *str, int size)
-{
- struct calendar *cal;
- if((cal = (struct calendar *) malloc(size))==NULL)
- return 0;
- memset(cal, 0, size);
-
- /* offsets */
- cal->total_size_offset = sizeof(int);
- cal->vcalendar_size_offset = (sizeof(int) * 7);
- cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int);
-
- /* ID */
- memcpy(&cal->ID, str, sizeof(cal->ID));
-
- /* total_size */
- memcpy(&cal->total_size,
- str + cal->total_size_offset,
- sizeof(cal->total_size));
-
- /* vcalendar_size */
- memcpy(&cal->vcalendar_size,
- str + cal->vcalendar_size_offset,
- sizeof(cal->vcalendar_size));
-
- if((cal->vcalendar = (char *)malloc(sizeof(char) *
- cal->vcalendar_size))==NULL)
- return 0;
-
- /* vcalendar */
- memcpy(cal->vcalendar,
- (char *)(str + cal->vcalendar_offset),
- cal->vcalendar_size);
-
- cal->title_size_offset = cal->vcalendar_offset + cal->vcalendar_size;
- cal->title_offset = cal->title_size_offset + sizeof(int);
-
- /* title_size */
- memcpy(&cal->title_size,
- str + cal->title_size_offset,
- sizeof(cal->title_size));
-
- if((cal->title = (char *)malloc(sizeof(char) *
- cal->title_size))==NULL)
- return 0;
-
- /* title*/
- memcpy(cal->title,
- (char *)(str + cal->title_offset),
- cal->title_size);
-
- return cal;
-}
-
-int test_dirset()
-{
-
- icalcomponent *c, *gauge;
- icalerrorenum error;
- icalcomponent *itr;
- icalfileset* cluster;
- struct icalperiodtype rtime;
- icaldirset *s = icaldirset_new("store");
- int i;
-
- assert(s != 0);
-
- rtime.start = icaltime_from_timet( time(0),0);
-
- cluster = icalfileset_new(OUTPUT_FILE);
-
- assert(cluster != 0);
-
-#define NUMCOMP 4
-
- /* Duplicate every component in the cluster NUMCOMP times */
-
- icalerror_clear_errno();
-
- for (i = 1; i<NUMCOMP+1; i++){
-
- /*rtime.start.month = i%12;*/
- rtime.start.month = i;
- rtime.end = rtime.start;
- rtime.end.hour++;
-
- for (itr = icalfileset_get_first_component(cluster);
- itr != 0;
- itr = icalfileset_get_next_component(cluster)){
- icalcomponent *clone, *inner;
- icalproperty *p;
-
- inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
- if (inner == 0){
- continue;
- }
-
- /* Change the dtstart and dtend times in the component
- pointed to by Itr*/
-
- clone = icalcomponent_new_clone(itr);
- inner = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT);
-
- assert(icalerrno == ICAL_NO_ERROR);
- assert(inner !=0);
-
- /* DTSTART*/
- p = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY);
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.start);
- icalcomponent_add_property(inner,p);
- } else {
- icalproperty_set_dtstart(p,rtime.start);
- }
- assert(icalerrno == ICAL_NO_ERROR);
-
- /* DTEND*/
- p = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY);
- assert(icalerrno == ICAL_NO_ERROR);
-
- if (p == 0){
- p = icalproperty_new_dtstart(rtime.end);
- icalcomponent_add_property(inner,p);
- } else {
- icalproperty_set_dtstart(p,rtime.end);
- }
- assert(icalerrno == ICAL_NO_ERROR);
-
- printf("\n----------\n%s\n---------\n",icalcomponent_as_ical_string(inner));
-
- error = icaldirset_add_component(s,
- icalcomponent_new_clone(itr));
-
- assert(icalerrno == ICAL_NO_ERROR);
-
- }
-
- }
-
- gauge =
- icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_summary(
- "Submit Income Taxes",
- icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL),
- 0),
- 0),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_vanew_summary(
- "Bastille Day Party",
- icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL),
- 0),
- 0),
- 0);
-
-#if 0
-
-
- icaldirset_select(s,gauge);
-
- for(c = icaldirset_first(s); c != 0; c = icaldirset_next(s)){
-
- printf("Got one! (%d)\n", count++);
-
- if (c != 0){
- printf("%s", icalcomponent_as_ical_string(c));;
- if (icaldirset_store(s2,c) == 0){
- printf("Failed to write!\n");
- }
- icalcomponent_free(c);
- } else {
- printf("Failed to get component\n");
- }
- }
-
-
- icalset_free(s2);
-#endif
-
-
- for(c = icaldirset_get_first_component(s);
- c != 0;
- c = icaldirset_get_next_component(s)){
-
- if (c != 0){
- printf("%s", icalcomponent_as_ical_string(c));;
- } else {
- printf("Failed to get component\n");
- }
-
- }
-
- /* Remove all of the components */
- i=0;
- while((c=icaldirset_get_current_component(s)) != 0 ){
- i++;
-
- icaldirset_remove_component(s,c);
- }
-
-
- icalset_free(s);
- return 0;
-}
-
-#if 0
-void test_calendar()
-{
- icalcomponent *comp;
- icalfileset *c;
- icaldirset *s;
- icalcalendar* calendar = icalcalendar_new("calendar");
- icalerrorenum error;
- struct icaltimetype atime = icaltime_null_time();
-
- comp = icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_version("2.0"),
- icalproperty_new_description("This is an event"),
- icalproperty_new_dtstart(atime),
- icalproperty_vanew_comment(
- "Another Comment",
- icalparameter_new_cn("A Common Name 1"),
- icalparameter_new_cn("A Common Name 2"),
- icalparameter_new_cn("A Common Name 3"),
- icalparameter_new_cn("A Common Name 4"),
- 0),
- icalproperty_vanew_xlicerror(
- "This is only a test",
- icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR),
- 0),
-
- 0);
-
-
- s = icalcalendar_get_booked(calendar);
-
- error = icaldirset_add_component(s,comp);
-
- assert(error == ICAL_NO_ERROR);
-
- c = icalcalendar_get_properties(calendar);
-
- error = icalfileset_add_component(c,icalcomponent_new_clone(comp));
-
- assert(error == ICAL_NO_ERROR);
-
- icalcalendar_free(calendar);
-
-}
-#endif
-
-int main(int argc, char *argv[])
-{
-
- printf("\n------------Test File Set---------------\n");
- test_fileset();
-
- printf("\n------------Test Dir Set---------------\n");
- test_dirset();
-
-#ifdef WITH_BDB4
- printf("\n------------Test BerkeleyDB Set---------------\n");
- test_bdbset();
-#endif
-
-#if 0
- printf("\n------------Test Calendar---------------\n");
- test_calendar();
-#endif
-
- return 0;
-}
-
-
-
diff --git a/libical/src/test/stow.c b/libical/src/test/stow.c
deleted file mode 100644
index 52307420bb..0000000000
--- a/libical/src/test/stow.c
+++ /dev/null
@@ -1,888 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: stow.c
- CREATOR: eric 29 April 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Initial Developer of the Original Code is Eric Busboom
-
- ======================================================================*/
-
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h> /* for PATH_MAX */
-#include <assert.h>
-#include <stdlib.h>
-#include <sys/utsname.h> /* for uname */
-#include <sys/stat.h> /* for stat */
-#include <unistd.h> /* for stat, getpid, getopt */
-#include <pwd.h> /* For getpwent */
-#include <sys/types.h> /* For getpwent */
-#include <ctype.h> /* for tolower */
-
-#include <libical/ical.h>
-#include <libicalss/icalss.h>
-
-char* program_name;
-#define TMPSIZE 2048
-#define SENDMAIL "/usr/lib/sendmail -t"
-
-void usage(char *message);
-
-#ifndef PATH_MAX
-#define PATH_MAX 256 /* HACK */
-#endif
-
-
-enum options {
- STORE_IN_FILE,
- STORE_IN_DB,
- INPUT_IS_MIME,
- INPUT_IS_ICAL,
- INPUT_FROM_STDIN,
- INPUT_FROM_FILE,
- ERRORS_TO_STDOUT,
- ERRORS_TO_ORGANIZER
-};
-
-struct options_struct
-{
- enum options storage;
- enum options input_type;
- enum options input_source;
- enum options errors;
- char* input_file;
- char* calid;
- char* output_file;
-};
-
-
-enum file_type
-{
- ERROR,
- NO_FILE,
- DIRECTORY,
- REGULAR,
- OTHER
-};
-
-enum file_type test_file(char *path)
-{
- struct stat sbuf;
- enum file_type type;
-
- errno = 0;
-
- /* Check if the path already exists and if it is a directory*/
- if (stat(path,&sbuf) != 0){
-
- /* A file by the given name does not exist, or there was
- another error */
- if(errno == ENOENT)
- {
- type = NO_FILE;
- } else {
- type = ERROR;
- }
-
- } else {
- /* A file by the given name exists, but is it a directory? */
-
- if (S_ISDIR(sbuf.st_mode)){
- type = DIRECTORY;
- } else if(S_ISREG(sbuf.st_mode)){
- type = REGULAR;
- } else {
- type = OTHER;
- }
- }
-
- return type;
-}
-
-char* lowercase(const char* str)
-{
- char* p = 0;
- char* new = strdup(str);
-
- if(str ==0){
- return 0;
- }
-
- for(p = new; *p!=0; p++){
- *p = tolower(*p);
- }
-
- return new;
-}
-
-#if 0
-char* get_local_attendee(struct options_struct *opt)
-{
- char attendee[PATH_MAX];
-
- if(opt->calid){
-
- strncpy(attendee,opt->calid,PATH_MAX);
-
- } else {
-
- char* user = getenv("USER");
- struct utsname uts;
- uname(&utget_option);
- /* HACK nodename may not be a fully qualified domain name */
- snprintf(attendee,PATH_MAX,"%s@%s",user,uts.nodename);
-
- }
-
- return lowercase(attendee);
-}
-#endif
-
-
-icalcomponent* get_first_real_component(icalcomponent *comp)
-{
- icalcomponent *c;
-
- for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){
- if (icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT ||
- icalcomponent_isa(c) == ICAL_VTODO_COMPONENT ||
- icalcomponent_isa(c) == ICAL_VJOURNAL_COMPONENT )
- {
- return c;
- }
- }
-
- return 0;
-}
-
-
-
-char* make_mime(const char* to, const char* from, const char* subject,
- const char* text_message, const char* method,
- const char* ical_message)
-{
- size_t size = strlen(to)+strlen(from)+strlen(subject)+
- strlen(text_message)+ strlen(ical_message)+TMPSIZE;
-
- char mime_part_1[TMPSIZE];
- char mime_part_2[TMPSIZE];
- char content_id[TMPSIZE];
- char boundary[TMPSIZE];
- struct utsname uts;
- char* m;
-
-
- if ((m = malloc(sizeof(char)*size)) == 0){
- fprintf(stderr,"%s: Can't allocate memory: %s\n",program_name,strerror(errno));
- exit(1);
- }
-
- uname(&uts);
-
- srand(time(0)<<getpid());
- sprintf(content_id,"%d-%d@%s",(int)time(0),rand(),uts.nodename);
- sprintf(boundary,"%d-%d-%s",(int)time(0),rand(),uts.nodename);
-
- sprintf(mime_part_1,"Content-ID: %s\n\
-Content-type: text/plain\n\
-Content-Description: Text description of error message\n\n\
-%s\n\n--%s",
- content_id,text_message,boundary);
-
- if(ical_message != 0 && method != 0){
- sprintf(mime_part_2,"Content-ID: %s\n\
-Content-type: text/calendar; method=%s\n\
-Content-Description: iCal component reply\n\n\
-%s\n\n--%s--",
- content_id,method,ical_message,boundary);
- }
-
- sprintf(m,"To: %s\n\
-From: %s\n\
-Subject: %s\n\
-MIME-Version: 1.0\n\
-Content-ID: %s\n\
-Content-Type: multipart/mixed; boundary=\"%s\"\n\
-\n\
- This is a multimedia message in MIME format\n\
-\n\
---%s\n\
-%s\n\
-",
- to,from,subject,content_id,boundary,boundary,
- mime_part_1);
-
- if(ical_message != 0 && method != 0){
- strcat(m, mime_part_2);
- } else {
- strcat(m,"--\n");
- }
-
- return m;
-}
-
-/* The incoming component had fatal errors */
-void return_failure(icalcomponent* comp, char* message,
- struct options_struct *opt)
-{
- char* local_attendee = opt->calid;
- FILE* p;
- const char *org_addr;
-
- icalcomponent *inner = get_first_real_component(comp);
-
- icalproperty *organizer_prop = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY);
- const char *organizer = icalproperty_get_organizer(organizer_prop);
-
- org_addr = strchr(organizer,':');
-
- if(org_addr != 0){
- org_addr++; /* Skip the ';' */
- } else {
- org_addr = organizer;
- }
-
- if (opt->errors == ERRORS_TO_ORGANIZER){
- p = popen(SENDMAIL,"w");
- } else {
- p = stdout;
- }
-
- if(p == 0){
- fprintf(stderr,
- "%s: fatal. Could not open pipe to sendmail (\"%s\") \n",
- program_name,SENDMAIL);
- exit(1);
- }
-
- fputs(make_mime(org_addr, local_attendee, "iMIP error",
- message, "reply",
- icalcomponent_as_ical_string(comp)),p);
-
- if (opt->errors == ERRORS_TO_ORGANIZER){
- pclose(p);
- }
-}
-
-/* The program had a fatal error and could not process the incoming component*/
-void return_error(icalcomponent* comp, char* message, struct options_struct *opt)
-{
-
-
- fputs(make_mime("Dest", "Source", "iMIP system failure",
- message, 0,0),stdout);
-
-}
-
-icalcomponent* make_reply(icalcomponent *comp, icalproperty *return_status,
- struct options_struct *opt)
-
-{
- icalcomponent *reply, *rinner;
- icalcomponent *inner = get_first_real_component(comp);
- icalproperty *p=0;
- char* local_attendee = opt->calid;
- char attendee[TMPSIZE];
-
- char prodid[TMPSIZE];
-
- snprintf(attendee,TMPSIZE,"mailto:%s",local_attendee);
-
- snprintf(prodid,TMPSIZE,"-//Softwarestudio.org//%s version %s//EN",PACKAGE,VERSION);
-
- /* Create the base component */
- reply = icalcomponent_vanew(
- ICAL_VCALENDAR_COMPONENT,
- icalproperty_new_version(strdup("2.0")),
- icalproperty_new_prodid(strdup(prodid)),
- icalproperty_new_method(ICAL_METHOD_REPLY),
- icalcomponent_vanew(
- ICAL_VEVENT_COMPONENT,
- icalproperty_new_clone(
- icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY)),
- icalproperty_new_clone(
- icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY)),
- icalproperty_new_clone(
- icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY)),
- icalproperty_new_attendee(attendee),
- 0),
- 0);
-
-
- /* Convert errors into request-status properties and transfers
- them to the reply component */
-
- icalcomponent_convert_errors(comp);
-
- rinner = get_first_real_component(reply);
-
- for(p = icalcomponent_get_first_property(inner,
- ICAL_REQUESTSTATUS_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(inner,
- ICAL_REQUESTSTATUS_PROPERTY)){
-
- icalcomponent_add_property(rinner,icalproperty_new_clone(p));
- }
-
- if(return_status != 0){
- icalcomponent_add_property(rinner, return_status);
- }
-
- return reply;
-
-}
-
-int check_attendee(icalproperty *p, struct options_struct *opt){
- const char* s = icalproperty_get_attendee(p);
- char* lower_attendee = lowercase(s);
- char* local_attendee = opt->calid;
-
- /* Check that attendee begins with "mailto:" */
- if (strncmp(lower_attendee,"mailto:",7) == 0){
- /* skip over the mailto: part */
- lower_attendee += 7;
-
- if(strcmp(lower_attendee,local_attendee) == 0){
- return 1;
- }
-
- lower_attendee -= 7;
-
- free(lower_attendee);
- }
-
- return 0;
-}
-
-char static_component_error_str[PATH_MAX];
-char* check_component(icalcomponent* comp, icalproperty **return_status,
- struct options_struct *opt)
-{
- char* component_error_str=0;
- icalcomponent* inner;
- int errors = 0;
- icalproperty *p;
- int found_attendee = 0;
- struct icalreqstattype rs;
-
- rs.code = ICAL_UNKNOWN_STATUS;
- rs.desc = 0;
- rs.debug = 0;
-
- /*{
- icalrequeststatus code;
- const char* desc;
- const char* debug;
- };*/
-
- *return_status = 0;
-
- /* This do/while loop only executes once because it is being used
- to fake exceptions */
-
- do {
-
- /* Check that we actually got a component */
- if(comp == 0){
- strcpy(static_component_error_str,
- "Did not find a component");
- component_error_str = static_component_error_str;
- break;
- }
-
- /* Check that the root component is a VCALENDAR */
- if(icalcomponent_isa(comp) != ICAL_VCALENDAR_COMPONENT){
- strcpy(static_component_error_str,
- "Root component is not a VCALENDAR");
- component_error_str = static_component_error_str;
- rs.code = ICAL_3_11_MISSREQCOMP_STATUS;
-
- break;
- }
-
-
- /* Check that the component has a METHOD */
-
- if (icalcomponent_get_first_property(comp,ICAL_METHOD_PROPERTY) == 0)
- {
- strcpy(static_component_error_str,
- "The component you sent did not have a METHOD property");
- component_error_str = static_component_error_str;
- rs.code = ICAL_3_11_MISSREQCOMP_STATUS;
- break;
- }
-
- inner = get_first_real_component(comp);
-
-
- /* Check that the compopnent has an organizer */
- if(icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY) == 0){
- fprintf(stderr,"%s: fatal. Component does not have an ORGANIZER property\n",program_name);
- rs.code = ICAL_3_11_MISSREQCOMP_STATUS;
- break;
- }
-
-
- /* Check for this user as an attendee or organizer */
-
- for(p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(inner,ICAL_ATTENDEE_PROPERTY)){
-
- found_attendee += check_attendee(p,opt);
- }
-
- for(p = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY);
- p != 0;
- p = icalcomponent_get_next_property(inner,ICAL_ORGANIZER_PROPERTY)){
-
- found_attendee += check_attendee(p,opt);
- }
-
- if (found_attendee == 0){
- struct icalreqstattype rs;
- memset(static_component_error_str,0,PATH_MAX);
-
- snprintf(static_component_error_str,PATH_MAX,
- "This target user (%s) is not listed as an attendee or organizer",
- opt->calid );
- component_error_str = static_component_error_str;
-
- rs.code = ICAL_3_7_INVCU_STATUS;
-
- break;
- }
-
-
-
- /* Check that the component passes iTIP restrictions */
-
- errors = icalcomponent_count_errors(comp);
- icalrestriction_check(comp);
-
- if(errors != icalcomponent_count_errors(comp)){
- snprintf(static_component_error_str,PATH_MAX,
- "The component does not conform to iTIP restrictions.\n Here is the original component; look at the X-LIC-ERROR properties\nfor details\n\n%s",icalcomponent_as_ical_string(comp));
- component_error_str = static_component_error_str;
- break;
- }
-
-
-
- } while(0);
-
- if(rs.code != ICAL_UNKNOWN_STATUS){
- *return_status = icalproperty_new_requeststatus(rs);
- }
-
- return component_error_str;
-}
-
-
-void usage(char *message)
-{
- fprintf(stderr,"Usage: %s [-emdcn] [-i inputfile] [-o outputfile] [-u calid]\n",program_name);
- fprintf(stderr,"-e\tInput data is encapsulated in a MIME Message \n\
--m\tInput is raw iCal \n\
--i\tSpecify input file. Otherwise, input comes from stdin\n\
--o\tSpecify file to save incoming message to\n\
--d\tSpecify database to send data to\n\
--u\tSet the calid to store the data to\n\
--n\tSend errors to stdout instead of organizer\n\
-");
-
-}
-
-
-void get_options(int argc, char* argv[], struct options_struct *opt)
-{
- int c;
- extern char *optarg;
- extern int optind, optopt;
- int errflg=0;
-
- opt->storage = STORE_IN_FILE;
- opt->input_source = INPUT_FROM_STDIN;
- opt->input_type = INPUT_IS_ICAL;
- opt->input_file = 0;
- opt->errors = ERRORS_TO_ORGANIZER;
- opt->calid = 0;
- opt->output_file = 0;
-
-
- while ((c = getopt(argc, argv, "nemu:o:d:b:c:i:")) != -1) {
- switch (c) {
- case 'e': { /* Input data is MIME encapsulated */
- opt->input_type = INPUT_IS_MIME;
- break;
- }
- case 'm': { /* Input is iCal. Default*/
- opt->input_type = INPUT_IS_ICAL;
- break;
- }
- case 'i': { /* Input comes from named file */
- opt->input_source = INPUT_FROM_FILE;
- opt->input_file = strdup(optarg);
- break;
- }
- case 'o': { /* Output goes to named file. Default*/
- opt->output_file = strdup(optarg);
- opt->storage = STORE_IN_FILE;
- break;
- }
- case 'd': { /* Output goes to database */
- fprintf(stderr,"%s: option -d is unimplmented\n",program_name);
- opt->storage = STORE_IN_DB;
- errflg++;
- break;
- }
- case 'c': {
-
- break;
- }
- case 'u': { /* Set the calid for the output database or
- file. Default is user name of user running
- program */
- opt->calid = strdup(optarg);
- break;
- }
-
- case 'n': { /* Dump error to stdout. Default is to
- send error to the organizer specified
- in the iCal data */
- opt->errors = ERRORS_TO_STDOUT;
- break;
- }
-
- case ':': {/* Option given without an operand */
- fprintf(stderr,
- "%s: Option -%c requires an operand\n",
- program_name,optopt);
- errflg++;
- break;
- }
- case '?': {
- errflg++;
- }
-
- }
-
- if (errflg >0){
- usage("");
- exit(1);
- }
- }
-
- if(opt->calid == 0){
- /* If no calid specified, use username */
- char attendee[PATH_MAX];
- char* user = getenv("USER");
- struct utsname uts;
- uname(&uts);
- /* HACK nodename may not be a fully qualified domain name */
- snprintf(attendee,PATH_MAX,"%s@%s",user,uts.nodename);
-
- opt->calid = lowercase(attendee);
- }
-
- if(opt->storage == STORE_IN_FILE &&
- opt->output_file ==0){
- char file[PATH_MAX];
- char* user = getenv("USER");
- struct passwd *pw;
-
- if(!user){
- fprintf(stderr,"%s: Can't get username. Try explicitly specifing the output file with -o", program_name);
- exit(1);
- }
-
- /* Find password entry for user */
- while( (pw = getpwent())!=0){
- if(strcmp(user,pw->pw_name)==0){
- break;
- }
- }
-
- if(pw==0){
- fprintf(stderr,"%s: Can't get get password entry for user \"%s\" Try explicitly specifing the output file with -o",
- program_name,user);
- exit(1);
- }
-
- if(pw->pw_dir==0){
- fprintf(stderr,"%s: User \"%s\" has no home directory. Try explicitly specifing the output file with -o",
- program_name, user);
- exit(1);
- }
-
- snprintf(file,PATH_MAX,"%s/.facs/%s",pw->pw_dir,opt->calid);
-
- opt->output_file = strdup(file);
- }
-
-
- /* Now try to create the calendar directory if it does
- not exist */
-
- if(opt->storage == STORE_IN_FILE ) {
- char * p;
- char* facspath = strdup(opt->output_file);
- enum file_type type;
-
- /* Cut off the last slash to make it just a directoy */
-
- p = strrchr(facspath,'/');
-
- if (p != 0){
- /* Use some other directory */
- *p='\0';
-
- type = test_file(facspath);
-
- errno = 0;
- if (type == NO_FILE){
-
- if(mkdir(facspath,0775) != 0){
- fprintf(stderr,
- "%s: Failed to create calendar directory %s: %s\n",
- program_name,facspath, strerror(errno));
- exit(1);
- } else {
- fprintf(stderr,"%s: Creating calendar directory %s\n",
- program_name,facspath);
- }
-
- } else if(type==REGULAR || type == ERROR){
- fprintf(stderr,"%s: Cannot create calendar directory %s\n",
- program_name,facspath);
- exit(1);
- }
- }
- }
-}
-
-char* check_options(struct options_struct *opt)
-{
- return 0;
-}
-
-void store_component(icalcomponent *comp, struct options_struct *opt)
-{
- icalerrorenum error;
-
-
- if(opt->storage == STORE_IN_FILE){
- icalset *fs = icalfileset_new(opt->output_file);
-
- if (fs == 0){
- fprintf(stderr,
- "%s: Failed to get incoming component directory: %s\n",
- program_name, icalerror_strerror(icalerrno));
- exit(1);
- }
-
-
- error = icalfileset_add_component(fs,comp);
-
- if (error != ICAL_NO_ERROR){
- fprintf(stderr,"%s: Failed to write incoming component: %s\n",
- program_name, icalerror_strerror(icalerrno));
- exit(1);
- }
-
- error = icalfileset_commit(fs);
-
- if (error != ICAL_NO_ERROR){
- fprintf(stderr,"%s: Failed to commit incoming cluster: %s\n",
- program_name, icalerror_strerror(icalerrno));
- exit(1);
- }
-
- icalset_free(fs);
-
- return;
- } else {
- assert(0);
- }
-}
-
-char* read_stream(char *s, size_t size, void *d)
-{
- char *c = fgets(s,size, (FILE*)d);
-
- return c;
-}
-
-icalcomponent* read_nonmime_component(struct options_struct *opt)
-{
- FILE *stream;
- icalcomponent *comp;
- icalparser* parser = icalparser_new();
- icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR);
- char* line;
-
- if(opt->input_source == INPUT_FROM_FILE){
- stream = fopen(opt->input_file,"r");
-
- if (stream == 0){
- perror("Can't open input file");
- exit(1);
- }
-
- } else {
- stream = stdin;
- }
-
- assert(stream != 0);
- icalparser_set_gen_data(parser,stream);
-
- do {
- line = icalparser_get_line(parser,read_stream);
-
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL);
- comp = icalparser_add_line(parser,line);
- icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es);
-
- if (comp != 0){
- return comp;
- }
-
- } while ( line != 0);
-
- if(opt->input_source == INPUT_FROM_FILE){
- fclose(stream);
- }
-
-
- return comp;
- }
-
-icalcomponent* find_vcalendar(icalcomponent* comp)
-{
- icalcomponent *c,*rtrn;
-
- for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT);
- c != 0;
- c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){
-
- if(icalcomponent_isa(c) == ICAL_VCALENDAR_COMPONENT){
- icalcomponent_remove_component(comp,c);
- return c;
- }
-
- if((rtrn=find_vcalendar(c)) != 0){
- return rtrn;
- }
- }
-
- return 0;
-}
-
-icalcomponent* read_mime_component(struct options_struct *opt)
-{
- icalcomponent *comp,*mimecomp;
- FILE* stream;
-
- if(opt->input_source == INPUT_FROM_FILE){
- stream = fopen(opt->input_file,"r");
-
- if (stream == 0){
- perror("Can't open input file");
- exit(1);
- }
-
- } else {
- stream = stdin;
- }
-
- assert(stream != 0);
-
- mimecomp = icalmime_parse(read_stream,(void*)stream);
-
- /* now find the iCal component embedded within the mime component */
- comp = find_vcalendar(mimecomp);
-
-
- if(comp == 0){
- return 0;
- }
-
- return comp;
-}
-
-icalcomponent* read_component(struct options_struct *opt)
-{
- if(opt->input_type == INPUT_IS_MIME){
- return read_mime_component(opt);
- } else if (opt->input_type == INPUT_IS_ICAL){
- return read_nonmime_component(opt);
- } else {
- fprintf(stderr,"%s: Internal Error; unknown option for input_type\n",
- program_name);
- exit(1);
- }
-}
-
-int main(int argc, char* argv[] )
-{
- char* options_error_str;
- char* component_error_str;
- icalcomponent* comp, *reply;
- struct options_struct opt;
- icalproperty *return_status;
-
- program_name = strrchr(argv[0],'/');
-
- get_options(argc, argv, &opt);
-
- if ( (options_error_str = check_options(&opt)) != 0 ){
- usage(options_error_str);
- exit(1);
- }
-
- comp = read_component(&opt);
-
- /* If the component had any fatal errors, return an error message
- to the organizer */
- if ( (component_error_str =
- check_component(comp,&return_status,&opt)) != 0){
-
- reply = make_reply(comp,return_status,&opt);
-
- return_failure(reply, component_error_str, &opt);
- icalcomponent_free(reply);
- exit(0);
-
- }
-
- store_component(comp,&opt);
-
-
- /* Don't free the component comp, since it is now part of the
- store, and will be freed there */
-
- exit(0);
-}
-
diff --git a/libical/src/test/test_fileset.ics b/libical/src/test/test_fileset.ics
deleted file mode 100644
index 35799e4569..0000000000
--- a/libical/src/test/test_fileset.ics
+++ /dev/null
@@ -1,60 +0,0 @@
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000101T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000102T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000103T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000104T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000105T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000106T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000107T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000108T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000109T120000Z
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20000110T120000Z
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/src/test/testclassify.c b/libical/src/test/testclassify.c
deleted file mode 100644
index 6e8385cbc4..0000000000
--- a/libical/src/test/testclassify.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: testclassify.c
- CREATOR: eric 11 February 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#include <stdio.h> /* for printf */
-#include <libical/ical.h>
-#include <errno.h>
-#include <string.h> /* For strerror */
-#include <libicalss/icalss.h>
-
-/* Get a note about the purpose of the property*/
-const char* get_note(icalcomponent *c)
-{
- icalproperty *p;
- const char* note = 0;
-
- if(c != 0){
- for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY);
- p!= 0;
- p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){
- if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){
- note = icalproperty_get_x(p);
- }
- }
- }
-
- if(note == 0){
- note = "None";
- }
-
- return note;
-}
-
-
-int main(int argc, char* argv[])
-{
- icalcomponent *c;
- int i=0;
-
- /* Open up the two storage files, one for the incomming components,
- one for the calendar */
- icalset* incoming = icalset_new_file("../../test-data/incoming.ics");
- icalset* cal = icalset_new_file("../../test-data/calendar.ics");
-
- assert(incoming!= 0);
- assert(cal!=0);
-
- /* Iterate through all of the incoming components */
- for(c=icalset_get_first_component(incoming);c!=0;
- c=icalset_get_next_component(incoming)){
-
- icalproperty_xlicclass class;
- icalcomponent *match = 0;
- const char* this_uid;
-
- i++;
-
- /* Check this component against the restrictions imposed by
- iTIP. An errors will be inserted as X-LIC-ERROR properties
- in the component. The Parser will also insert errors if it
- cannot parse the component */
- icalcomponent_check_restrictions(c);
-
- /* If there are any errors, print out the component */
- if(icalcomponent_count_errors(c) != 0){
- printf("----- Component has errors ------- \n%s-----------------\n",
- icalcomponent_as_ical_string(c));
- }
-
- /* Use one of the icalcomponent convenience routines to get
- the UID. This routine will save you from having to use
- icalcomponent_get_inner(),
- icalcomponent_get_first_property(), checking the return
- value, and then calling icalproperty_get_uid. There are
- several other convenience routines for DTSTART, DTEND,
- DURATION, SUMMARY, METHOD, and COMMENT */
- this_uid = icalcomponent_get_uid(c);
-
- if(this_uid != 0){
- /* Look in the calendar for a component with the same UID
- as the incomming component. We should reall also be
- checking the RECURRENCE-ID. Another way to do this
- operation is to us icalset_find_match(), which does use
- the RECURRENCE-ID. */
- match = icalset_fetch(cal,this_uid);
- }
-
-
- /* Classify the incoming component. The third argument is the
- calid of the user who owns the calendar. In a real program,
- you would probably switch() on the class.*/
- class = icalclassify(c,match,"A@example.com");
-
- printf("Test %d\n\
-Incoming: %s\n\
-Matched: %s\n\
-Classification: %s\n\n",
- i,get_note(c),get_note(match),
- icalproperty_enum_to_string(class));
- }
-
- return 0;
-}
-
-
diff --git a/libical/src/test/testmime.c b/libical/src/test/testmime.c
deleted file mode 100644
index 1fd455a001..0000000000
--- a/libical/src/test/testmime.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE:
- CREATOR: eric 25 June 2000
-
- $Id$
- $Locker$
-
- 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.
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- The LGPL as published by the Free Software Foundation, version
- 2.1, available at: http://www.fsf.org/copyleft/lesser.html
-
- Or:
-
- The Mozilla Public License Version 1.0. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- The Initial Developer of the Original Code is Eric Busboom
-
- (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
- ======================================================================*/
-
-#include <libical/ical.h>
-
-#include <stdlib.h> /* For rand */
-#include <string.h> /* for strrchr, strdup*/
-#include <unistd.h> /* for getopt */
-
-/*int sspm_parse_mime(struct sspm_part *parts,
- size_t max_parts,
- struct sspm_action_map *actions,
- char* (*get_string)(char *s, size_t size, void* data),
- void *get_string_data,
- struct sspm_header *first_header
- );
-*/
-
-
-
-char* major_type_string[] = {
- "TEXT",
- "IMAGE",
- "AUDIO",
- "VIDEO",
- "APPLICATION",
- "MULTIPART",
- "MESSAGE",
- "UNKNOWN",
- "NO"
-};
-
-char* minor_type_string[] = {
- "ANY",
- "PLAIN",
- "RFC822",
- "DIGEST",
- "CALENDAR",
- "MIXED",
- "RELATED",
- "ALTERNATIVE",
- "PARALLEL",
- "UNKNOWN",
- "NO"
-};
-
-
-char* read_stream(char *s, size_t size, void *d)
-{
- char *c = fgets(s,size, (FILE*)d);
-
- return c;
-
-}
-
-
-int main(int argc, char* argv[]) {
-
- FILE *f;
- int c;
- extern char *optarg;
- extern int optind, optopt;
- int errflg=0;
- char* program_name;
-
- struct options{
- int normal;
- int stress;
- int base64;
- int qp;
- int sleep;
- int count;
- char* input_file;
- } opt;
-
- memset(&opt,0,sizeof(opt));
-
- program_name = (char*)strrchr((char*)argv[0],'/');
- program_name++;
-
- while ((c = getopt(argc, argv, "nsbqi:S:c:")) != -1) {
- switch (c) {
- case 'i': { /* Input comes from named file */
- opt.input_file = strdup(optarg);
- break;
- }
- case 'n':{ /* Normal */
-
- if(opt.stress+opt.base64+opt.qp != 0){
- fprintf(stderr,
- "%s: Use only one of n,s,b and q\n",
- program_name);
- }
- opt.normal = 1;
- break;
- }
- case 's':{ /* Stress-test*/
- if(opt.base64+opt.normal+opt.qp != 0){
- fprintf(stderr,
- "%s: Use only one of n,s,b and q\n",
- program_name);
- }
- opt.stress = 1;
- break;
- }
- case 'b':{ /* test base64 decoding*/
- if(opt.stress+opt.normal+opt.qp != 0){
- fprintf(stderr,
- "%s: Use only one of n,s,b and q\n",
- program_name);
- }
- opt.base64 = 1;
- break;
- }
- case 'q':{ /* test quoted-printable decoding*/
- if(opt.stress+opt.base64+opt.normal != 0){
- fprintf(stderr,
- "%s: Use only one of n,s,b and q\n",
- program_name);
- }
- opt.qp = 1;
- break;
- }
- case 'S':{ /* sleep at end of run */
- opt.sleep = atoi(optarg);
- break;
- }
-
- case 'c':{ /* number of iterations of stress test */
- opt.count = atoi(optarg);
- break;
- }
-
- case ':': {/* Option given without an operand */
- fprintf(stderr,
- "%s: Option -%c requires an operand\n",
- program_name,optopt);
- errflg++;
- break;
- }
- case '?': {
- errflg++;
- }
- }
- }
-
- if (errflg >0){
- fprintf(stderr,"Usage: %s [-n|-s|-b|-q] [-i input_file]\n",
- program_name);
- exit(1);
- }
-
- if(opt.stress+opt.base64+opt.normal+opt.qp == 0){
- fprintf(stderr,
- "%s: Must have one of n,s,b or q\n",
- program_name);
- }
-
- if(opt.input_file){
- f = fopen(opt.input_file,"r");
- if (f == 0){
- fprintf(stderr,"Could not open input file \"%s\"\n",
- opt.input_file);
- exit(1);
- }
- } else {
- f = stdin;
- }
-
-
-
- if(opt.normal == 1){
- icalcomponent *c;
-
- c = icalmime_parse(read_stream,f);
-
- printf("%s\n",icalcomponent_as_ical_string(c));
-
- icalcomponent_free(c);
-
- } else if (opt.stress==1 ){
- /* Read file in by lines, then randomize the lines into a
- string buffer */
-
- char *array[1024];
- char temp[1024];
- char *buf;
- int i,last;
- int size;
- int non_rand;
- int rand_lines;
- int r;
- int j;
- icalcomponent *c;
- struct slg_data {
- char* pos;
- char* str;
- } d;
-
- for(i=0; !feof(f); i++){
- fgets(temp,1024,f);
- array[i] = strdup(temp);
- size += strlen(temp);
- }
- last = i;
-
- buf = malloc(size*2);
- assert(buf != 0);
-
-
- for(j=0; j<opt.count; j++){
-
- srand(j);
- memset(buf,0,size*2);
- /* First insert some non-randomized lines */
- non_rand = ((float)rand()/(float)RAND_MAX) * last;
- for(i=0;i<non_rand;i++){
- strcat(buf,array[i]);
- }
-
- /* Then, insert some lines at random */
-
- rand_lines = last - non_rand;
-
- for(i=0;i<rand_lines;i++){
- srand(i);
- r = ((float)rand()/(float)RAND_MAX) * rand_lines;
- strcat(buf,array[r+non_rand]);
-
- }
-
- d.pos = 0;
- d.str = buf;
-
- c = icalmime_parse(icalparser_string_line_generator,&d);
-
- printf("%s\n",icalcomponent_as_ical_string(c));
-
- icalcomponent_free(c);
-
- }
-
- free(buf);
-
- for(i=0; i<last; i++){
- free(array[i]);
- }
-
- } else if(opt.qp == 1){
- char str[4096];
- char conv[4096];
-
- memset(str,0,4096);
-
- while(!feof(f) && fgets(str,4096,f)!=0){
- size_t size;
-
- size = strlen(str);
- memset(conv,0,4096);
- decode_quoted_printable(conv,str,&size);
-
- conv[size] = '\0';
- printf("%s",conv);
- memset(str,0,4096);
-
- }
- } else if (opt.base64 == 1) {
- char str[4096];
- char conv[4096];
-
- memset(str,0,4096);
-
- while(!feof(f) && fgets(str,4096,f)!=0){
- size_t size;
-
- size = strlen(str);
- memset(conv,0,4096);
- decode_base64(conv,str,&size);
-
- conv[size] = '\0';
- printf("%s",conv);
- memset(str,0,4096);
-
- }
- }
-
- if (opt.sleep != 0){
- sleep(opt.sleep);
- }
-
- if( opt.input_file != 0){
- free(opt.input_file);
- }
-
- icalmemory_free_ring();
-
- return 0;
-
-}
-
-
-
-
-
-
-
-
diff --git a/libical/src/test/testvcal.c b/libical/src/test/testvcal.c
deleted file mode 100644
index 80b227b148..0000000000
--- a/libical/src/test/testvcal.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C -*-
- ======================================================================
- FILE: vcal.c
- CREATOR: eric 26 May 2000
-
- $Id$
- $Locker$
-
- (C) COPYRIGHT 2000 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 Code is eric. The Initial Developer of the Original
- Code is Eric Busboom
-
-
- ======================================================================*/
-
-#include <libicalvcal/icalvcal.h>
-#include <stdio.h>
-
-/* Given a vCal data file as its first argument, this program will
- print out an equivalent iCal component.
-
- For instance:
-
- ./testvcal ../../test-data/user-cal.vcf
-
-*/
-
-int main(int argc, char* argv[])
-{
- VObject *vcal = 0;
- icalcomponent *comp;
- char* file;
-
- if (argc != 2){
- file = "../../test-data/user-cal.vcf";
- } else {
- file = argv[1];
- }
-
-
- vcal = Parse_MIME_FromFileName(file);
-
- assert(vcal != 0);
-
- comp = icalvcal_convert(vcal);
-
- printf("%s\n",icalcomponent_as_ical_string(comp));
-
- return 0;
-}
-
-
diff --git a/libical/test-data/.cvsignore b/libical/test-data/.cvsignore
deleted file mode 100644
index 6e5ca7ed41..0000000000
--- a/libical/test-data/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
diff --git a/libical/test-data/0 b/libical/test-data/0
deleted file mode 100644
index ed915ad582..0000000000
--- a/libical/test-data/0
+++ /dev/null
@@ -1,7 +0,0 @@
-BEGIN:VCALENDAR
-BEGIN:VEVENT
-SUMMARY:Bastille Day Party This option indicates that xauth should attempt to break any authority file locks before proceeding.
-SUMMARY:Bastille Day Party This option indicates that xauth should
- attempt to break any authority file locks before proceeding.
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/1 b/libical/test-data/1
deleted file mode 100644
index a4d078d47b..0000000000
--- a/libical/test-data/1
+++ /dev/null
@@ -1,38 +0,0 @@
-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
-DTSTAR: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/test-data/1.1 b/libical/test-data/1.1
deleted file mode 100644
index a7c92c33bd..0000000000
--- a/libical/test-data/1.1
+++ /dev/null
@@ -1,13 +0,0 @@
-BEGIN:VCALENDAR
-DURATION:P15DT5H0M20S
-DURATION:P7W
-URL;CN=John Smith:http://example.com/urivalue.html
-X-SKI-TITLE;RSVP=TRUE: This is an extension property
-SUMMARY:"No Property"
-SUMMARY;RSVP=TRUE;RSVP=FALSE:Calendaring Interoperability Planning Meeting
-SUMMARY;ALTREP=This is an xname:altrep
-SUMMARY;CUTYPE=DESCRIPTION is a keyword:Xname parameter
-DTEND:19990605
-DTSTART:19990605T103012
-CATEGORIES;RSVP=TRUE;RSVP=FALSE:one,two
-END:VCALENDAR
diff --git a/libical/test-data/2 b/libical/test-data/2
deleted file mode 100644
index 50ba609ab3..0000000000
--- a/libical/test-data/2
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-METHOD:xyz
-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
-ATTENDEE;RSVP=TRUE:MAILTO:jsmith@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
diff --git a/libical/test-data/2445.ics b/libical/test-data/2445.ics
deleted file mode 100644
index ecf6f106ff..0000000000
--- a/libical/test-data/2445.ics
+++ /dev/null
@@ -1,331 +0,0 @@
-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:19970901T130000Z
-DTSTART:19970903T163000Z
-DTEND:19970903T190000Z
-SUMMARY:Annual Employee Review
-CLASS:PRIVATE
-CATEGORIES:BUSINESS,HUMAN RESOURCES
-END:VEVENT
-
-BEGIN:VEVENT
-UID:19970901T130000Z-123402@host.com
-DTSTAMP:19970901T130000Z
-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:19970901T130000Z
-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:19970901T130000Z
-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:19970901T130000Z
-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
-DTSTART:19971015T050000Z
-DTEND:19971016T050000Z
-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:19970324T120000Z
-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:P1DT25M
-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/test-data/2446.ics b/libical/test-data/2446.ics
deleted file mode 100644
index c6e2359aa1..0000000000
--- a/libical/test-data/2446.ics
+++ /dev/null
@@ -1,1006 +0,0 @@
-
-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:19970701T200000Z
-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-PROCESS
-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/19970819T220000Z
-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/test-data/3 b/libical/test-data/3
deleted file mode 100644
index 008373ebfa..0000000000
--- a/libical/test-data/3
+++ /dev/null
@@ -1,21 +0,0 @@
-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;VALUE=DATE-TIME:19980403T120000
-ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud
-REPEAT:4
-DURATION:PT1H
-END:VALARM
-END:VTODO
-END:VCALENDAR
diff --git a/libical/test-data/4 b/libical/test-data/4
deleted file mode 100644
index 59c3d6917b..0000000000
--- a/libical/test-data/4
+++ /dev/null
@@ -1,23 +0,0 @@
-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
diff --git a/libical/test-data/5 b/libical/test-data/5
deleted file mode 100644
index ba1fd09f7f..0000000000
--- a/libical/test-data/5
+++ /dev/null
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//RDU Software//NONSGML HandCal//EN
-BEGIN:VFREEBUSY
-ORGANIZER:MAILTO:jsmith@host.com
-DTSTART:19980313T141711Z
-DTEND:19980410T141711
-FREEBUSY:19980314T233000Z/19980315T003000Z
-FREEBUSY:19980316T153000Z/19980316T163000Z
-FREEBUSY:19980318T030000/19980318T040000,19980318T030000/19980318T040000
-URL:http://www.host.com/calendar/busytime/jsmith.ifb
-END:VFREEBUSY
-END:VCALENDAR
-
-
-
diff --git a/libical/test-data/6 b/libical/test-data/6
deleted file mode 100644
index 753bd2b66c..0000000000
--- a/libical/test-data/6
+++ /dev/null
@@ -1,12 +0,0 @@
-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
diff --git a/libical/test-data/7 b/libical/test-data/7
deleted file mode 100644
index 0a255fc514..0000000000
--- a/libical/test-data/7
+++ /dev/null
@@ -1,14 +0,0 @@
-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
diff --git a/libical/test-data/Makefile.am b/libical/test-data/Makefile.am
deleted file mode 100644
index 572010875d..0000000000
--- a/libical/test-data/Makefile.am
+++ /dev/null
@@ -1,27 +0,0 @@
-EXTRA_DIST = \
-0 \
-1 \
-1.1 \
-2 \
-2445.ics \
-2446.ics \
-3 \
-4 \
-5 \
-6 \
-7 \
-smallcluster.ics \
-recur.txt \
-user-cal.vcf \
-complex-mime.txt \
-simple-mime.txt \
-stresstest.ics \
-classify.ics \
-incoming.ics \
-process-incoming.ics \
-calendar.ics \
-restriction.ics \
-overlaps.ics \
-spanlist.ics
-
-
diff --git a/libical/test-data/calendar.ics b/libical/test-data/calendar.ics
deleted file mode 100644
index 417ce5079b..0000000000
--- a/libical/test-data/calendar.ics
+++ /dev/null
@@ -1,63 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:CREATE
-X-LIC-NOTE: #C1. Rescheduled by #I2\ and updated by #I3
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:19970701T190000Z
-DTEND:19970701T193000Z
-SUMMARY:Conference
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:1
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE: #C2. The test user is the organizer.
-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-873970198738785@example.com
-SEQUENCE:0
-DTSTAMP:19970613T190000Z
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:CREATED
-X-LIC-NOTE: #C3. Publish
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@example.com
-DTSTAMP:19970610T190000Z
-DTSTART:19970701T100000Z
-DTEND:19970701T1100000Z
-SUMMARY:Conference
-UID:calsrv.example.com-1002@example.com
-STATUS:CONFIRMED
-SEQUENCE:2
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/classify.ics b/libical/test-data/classify.ics
deleted file mode 100644
index c7c5a1e438..0000000000
--- a/libical/test-data/classify.ics
+++ /dev/null
@@ -1,43 +0,0 @@
-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:19960701T200000Z
-DTEND:19970701T200000Z
-SUMMARY:Conference
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:1
-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;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:19950611T190000Z
-DTSTART:19970701T200000Z
-DTEND:19970701T200000Z
-SUMMARY:Conference in the park
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:0
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/complex-mime-error.txt b/libical/test-data/complex-mime-error.txt
deleted file mode 100644
index 8beb20f3e2..0000000000
--- a/libical/test-data/complex-mime-error.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-From: foo1@example.com
-MIME-Version: 1.0
-To: foo2@example.com,foo3@example.com
-Subject: REQUEST - Phone Conference
-Content-Type:multipart/related;boundary="--FEE3790DC7E35189CA67CE2C"
-
-----FEE3790DC7E35189CA67CE2C
-Content-Type: multipart/alternat;
- 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
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:foo1@example.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
-DTSTAMP:19970611T190000Z
-DTSTART:19970621T170000Z
-DTEND:199706211T173000Z
-SUMMARY:Let's discuss the attached document
-UID:calsvr.example.com-873970198738777-8aa
-SEQUENCE:0
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-00FEE3790DC7E35189CA67CE2C00--
-
-----FEE3790DC7E35189CA67CE2C
-Content-Type: application/msword; name="FieldReport
-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.
-
diff --git a/libical/test-data/complex-mime.txt b/libical/test-data/complex-mime.txt
deleted file mode 100644
index 32cb106dfd..0000000000
--- a/libical/test-data/complex-mime.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-From: foo1@example.com
-MIME-Version: 1.0
-To: foo2@example.com,foo3@example.com
-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: quoted-printable
-Content-Disposition: attachment; filename="event.vcs"
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-VERSION:2.0
-METHOD:REQUEST
-BEGIN:VEVENT
-ORGANIZER:foo1@example.com
-ATTENDEE;RSVP=3DTRUE;ROLE=3DREQ-PARTICIPANT;CUTYPE=3DGROUP:MAILTO:employe=
-e-A@host.com
-ATTENDEE;RSVP=3DTRUE;ROLE=3DREQ-PARTICIPANT;CUTYPE=3DGROUP:mailto:Employe=
-e-B@HOST.com
-ATTENDEE;RSVP=3DTRUE;ROLE=3DREQ-PARTICIPANT;CUTYPE=3DGROUP:MailTo:Eric@Ag=
-ony.Busboom.org
-DTSTAMP:19970611T190000Z
-DTSTART:19970621T170000Z
-DTEND:199706211T173000Z
-SUMMARY:Let's discuss the attached document
-UID:calsvr.example.com-873970198738777-8aa
-SEQUENCE:0
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-----00FEE3790DC7E35189CA67CE2C00
-Content-Type:text/calendar; method=REQUEST; charset=US-ASCII;
- Component=vevent
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment; filename="event.vcs"
-
-QkVHSU46VkNBTEVOREFSClBST0RJRDotLy9BQ01FL0Rlc2t0b3BDYWxlbmRhci8vRU4KVkVS
-U0lPTjoyLjAKQkVHSU46VkVWRU5UCk9SR0FOSVpFUjpmb28xQGV4YW1wbGUuY29tCkFUVEVO
-REVFO1JTVlA9VFJVRTtST0xFPVJFUS1QQVJUSUNJUEFOVDtDVVRZUEU9R1JPVVA6TUFJTFRP
-OmVtcGxveWVlLUFAaG9zdC5jb20KQVRURU5ERUU7UlNWUD1UUlVFO1JPTEU9UkVRLVBBUlRJ
-Q0lQQU5UO0NVVFlQRT1HUk9VUDptYWlsdG86RW1wbG95ZWUtQkBIT1NULmNvbQpBVFRFTkRF
-RTtSU1ZQPVRSVUU7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7Q1VUWVBFPUdST1VQOk1haWxUbzpF
-cmljQEFnb255LlF1YWxjb21tLmNvbQpEVFNUQU1QOjE5OTcwNjExVDE5MDAwMFoKRFRTVEFS
-VDoxOTk3MDYyMVQxNzAwMDBaCkRURU5EOjE5OTcwNjIxMVQxNzMwMDBaClNVTU1BUlk6TGV0
-J3MgZGlzY3VzcyB0aGUgYXR0YWNoZWQgZG9jdW1lbnQKVUlEOmNhbHN2ci5leGFtcGxlLmNv
-bS04NzM5NzAxOTg3Mzg3NzctOGFhClNFUVVFTkNFOjAKU1RBVFVTOkNPTkZJUk1FRApFTkQ6
-VkVWRU5UCkVORDpWQ0FMRU5EQVIK
-
-
-----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/test-data/incoming.ics b/libical/test-data/incoming.ics
deleted file mode 100644
index dd77861ad4..0000000000
--- a/libical/test-data/incoming.ics
+++ /dev/null
@@ -1,294 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE:#I1. New Request
-X-LIC-EXPECT:REQUEST-NEW
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:19970610T190000Z
-DTSTART:19970701T100000Z
-DTEND:19970701T10300Z
-SUMMARY:Conference
-UID:calsrv.example.com-873970198738776@example.com
-SEQUENCE:2
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE:#I2. Reschedules C1
-X-LIC-EXPECT:REQUEST-RESCHEDULE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:19970701T200000Z
-SUMMARY:Conference
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:2
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE:#I3. Updates C1
-X-LIC-EXPECT:REQUEST-UPDATE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:19970611T193000Z
-DTSTART:19970701T190000Z
-DTEND:19970701T193000Z
-SUMMARY: Pool party
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:2
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE:#I4: This is an obsolete request\, otherwise identical to #I1
-X-LIC-EXPECT:OBSOLETE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:19960701T180000Z
-DTEND:19970701T190000Z
-SUMMARY:Phone Conference
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:0
-DTSTAMP:19960613T190000Z
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REPLY
-X-LIC-NOTE:#I5: User B is accepting A's request\, #C2
-X-LIC-EXPECT:REPLY-ACCEPT
-VERSION:2.0
-BEGIN:VEVENT
-ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com
-ORGANIZER:MAILTO:A@example.com
-UID:calsrv.example.com-873970198738785@example.com
-SEQUENCE:1
-REQUEST-STATUS:2.0;Success
-DTSTAMP:19970612T190000Z
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REPLY
-X-LIC-NOTE:#I6: User B's reply delegating to C\, #C2
-X-LIC-EXPECT:REPLY-DELEGATE
-VERSION:2.0
-BEGIN:VEVENT
-ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-TO="Mailto:C@example.com"
- :Mailto:B@example.com
-ORGANIZER:MAILTO:A@example.com
-UID:calsrv.example.com-873970198738785@example.com
-SEQUENCE:1
-REQUEST-STATUS:2.0;Success
-DTSTAMP:19970612T190000Z
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REQUEST
-X-LIC-NOTE:#I7: User C's delegation to A\, new event
-X-LIC-EXPECT:REQUEST-DELEGATE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@example.com
-ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C;DELEGATED-TO="Mailto:A@example.com"
- :Mailto:C@example.com
-ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=A;DELEGATED-FROM="Mailto:C@example.com"
- :Mailto:A@example.com
-DTSTAMP:19970611T190000Z
-DTSTART:19970701T190000Z
-DTEND:19970701T193000Z
-SUMMARY:Conference
-UID:calsrv.example.com-873970198738779@example.com
-SEQUENCE:2
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REPLY
-X-LIC-NOTE:#I8: User C is rejecting A's request\, #C2
-X-LIC-EXPECT:REPLY-DECLINE
-VERSION:2.0
-BEGIN:VEVENT
-ATTENDEE;PARTSTAT=DECLINED:Mailto:C@example.com
-ORGANIZER:MAILTO:A@example.com
-UID:calsrv.example.com-873970198738785@example.com
-SEQUENCE:1
-REQUEST-STATUS:2.0;Success
-DTSTAMP:19970612T190000Z
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REPLY
-X-LIC-NOTE:#I9: Crasher X is accepting A's request\, #C2
-X-LIC-EXPECT:REPLY-CRASHER-ACCEPT
-VERSION:2.0
-BEGIN:VEVENT
-ATTENDEE;PARTSTAT=ACCEPTED:Mailto:X@example.com
-ORGANIZER:MAILTO:A@example.com
-UID:calsrv.example.com-873970198738785@example.com
-SEQUENCE:1
-REQUEST-STATUS:2.0;Success
-DTSTAMP:19970612T190000Z
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:REPLY
-X-LIC-NOTE:#I10: Crasher Y is declining A's request\, #C2
-X-LIC-EXPECT:REPLY-CRASHER-DECLINE
-VERSION:2.0
-BEGIN:VEVENT
-ATTENDEE;PARTSTAT=DECLINED:Mailto:Y@example.com
-ORGANIZER:MAILTO:A@example.com
-UID:calsrv.example.com-873970198738785@example.com
-SEQUENCE:1
-REQUEST-STATUS:2.0;Success
-DTSTAMP:19970612T190000Z
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:CANCEL
-X-LIC-NOTE:#I11: Cancel #c1
-X-LIC-EXPECT:CANCEL-EVENT
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@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:COUNTER
-X-LIC-NOTE:#I12. Counter to #C1. Changed DTEND to DURATION.
-X-LIC-EXPECT:COUNTER
-VERSION:2.0
-BEGIN:VEVENT
-DTSTAMP:19970611T190000Z
-DTSTART:19970701T190000Z
-DURATION:PT2H
-ORGANIZER:Mailto:B@example.com
-ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com
-SUMMARY:Conference
-COMMENT: I think the conference should be 2 hours long
-UID:calsrv.example.com-873970198738777@example.com
-SEQUENCE:1
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:PUBLISH
-X-LIC-NOTE:#I13. New Publish
-X-LIC-EXPECT:PUBLISH-UPDATE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@example.com
-DTSTAMP:19970610T190000Z
-DTSTART:19970701T100000Z
-DTEND:19970701T103000Z
-SUMMARY:Conference
-UID:calsrv.example.com-1001@example.com
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-METHOD:PUBLISH
-X-LIC-NOTE:#I14. Publish Update
-X-LIC-EXPECT:PUBLISH-UPDATE
-VERSION:2.0
-BEGIN:VEVENT
-ORGANIZER:Mailto:B@example.com
-DTSTAMP:19970610T190000Z
-DTSTART:19970701T100000Z
-DTEND:19970701T110000Z
-SUMMARY:Conference
-UID:calsrv.example.com-1002@example.com
-STATUS:CONFIRMED
-SEQUENCE:2
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-PRODID:-//ACME/DesktopCalendar//EN
-VERSION:2.0
-METHOD:PUBLISH
-X-LIC-NOTE:#I15. Publish VFREEBUSY
-X-LIC-EXPECT:PUBLISH-FREEBUSY
-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
diff --git a/libical/test-data/large.ics b/libical/test-data/large.ics
deleted file mode 100644
index a7cc783513..0000000000
--- a/libical/test-data/large.ics
+++ /dev/null
@@ -1,40533 +0,0 @@
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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
-
-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
-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/test-data/overlaps.ics b/libical/test-data/overlaps.ics
deleted file mode 100644
index 57a5c57cc3..0000000000
--- a/libical/test-data/overlaps.ics
+++ /dev/null
@@ -1,32 +0,0 @@
-BEGIN:VEVENT
-DTSTART
- :20001104T150000
-DTEND
- :20001104T160000
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTART
- :20001104T153000
-DTEND
- :20001104T163000
-END:VEVENT
-BEGIN:VEVENT
-DTSTART
- :20001104T160000
-DTEND
- :20001104T170000
-END:VEVENT
-BEGIN:VEVENT
-DTSTART
- :20001104T163000
-DTEND
- :20001104T173000
-END:VEVENT
-BEGIN:VEVENT
-DTSTART
- :20001104T170000
-DTEND
- :20001104T180000
-END:VEVENT
-
diff --git a/libical/test-data/process-calendar.ics b/libical/test-data/process-calendar.ics
deleted file mode 100644
index e3099001a9..0000000000
--- a/libical/test-data/process-calendar.ics
+++ /dev/null
@@ -1,108 +0,0 @@
-BEGIN:VCALENDAR
-X-LIC-NOTE: Slot 1\, 1200 to 1300
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T000000Z
-DTSTART
- :19970701T120000Z
-DTEND
- :19970701T1300Z
-SUMMARY
- : Event 1
-UID
- :calsrv.example.com-873970198738700@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-X-LIC-NOTE: Slot 2\, 1300 to 1400
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T010000Z
-DTSTART
- :19970701T13000Z
-DTEND
- :19970701T140000Z
-SUMMARY
- : Event 2
-UID
- :calsrv.example.com-873970198738701@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-X-LIC-NOTE: Slot 3\, 1400 to 1500
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T030000Z
-DTSTART
- :19970701T140000Z
-DTEND
- :19970701T150000Z
-SUMMARY
- :Event 3
-UID
- :calsrv.example.com-873970198738702@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
diff --git a/libical/test-data/process-incoming.ics b/libical/test-data/process-incoming.ics
deleted file mode 100644
index 5f66fb69c7..0000000000
--- a/libical/test-data/process-incoming.ics
+++ /dev/null
@@ -1,107 +0,0 @@
-BEGIN:VCALENDAR
-X-LIC-NOTE: Overlap with Slot 1\, 1200 to 1300\, should be delegated
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T030000Z
-DTSTART
- :19970701T120000Z
-DTEND
- :19970701T1300Z
-SUMMARY
- : Overlap 1
-UID
- :calsrv.example.com-873970198738703@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-X-LIC-NOTE: Overlap with Slot 2\, 1300 to 1400\, should be counterproposed
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T040000Z
-DTSTART
- :19970701T13000Z
-DTEND
- :19970701T140000Z
-SUMMARY
- :Overlap 2
-UID
- :calsrv.example.com-873970198738704@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
-
-BEGIN:VCALENDAR
-X-LIC-NOTE: Overlap with Slot 3\, 1400 to 1500\, should be declined
-METHOD
- :REQUEST
-VERSION
- :2.0
-BEGIN:VEVENT
-ORGANIZER
- :Mailto:bob@cal.softwarestudio.org
-ATTENDEE
- ;ROLE=CHAIR
- ;CUTYPE=INDIVIDUAL
- ;CN=Alice
- :Mailto:alice@cal.softwarestudio.org
-ATTENDEE
- ;RSVP=TRUE
- ;CUTYPE=INDIVIDUAL
- ;CN=B
- :Mailto:B@example.com
-DTSTAMP
- :19970611T050000Z
-DTSTART
- :19970701T140000Z
-DTEND
- :19970701T150000Z
-SUMMARY
- :Overlap 3
-UID
- :calsrv.example.com-873970198738705@example.com
-SEQUENCE
- :0
-STATUS
- :CONFIRMED
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/recur-errors.txt b/libical/test-data/recur-errors.txt
deleted file mode 100644
index 5d4812add9..0000000000
--- a/libical/test-data/recur-errors.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-BEGIN:VEVENT
-DESCRIPTION
- :An example where the days generated makes a difference because of
- WKST:
-DTSTART
- ;TZID=US-Eastern
- :19970805T090000
-RRULE
- :FREQ=WEEKLY;COUNT=4;INTERVAL=2;BYDAY=TU,SU
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :An example where the days generated makes a difference because of
- WKST. Changing only WKST from MO to SU yields different results...
-DTSTART
- ;TZID=US-Eastern
- :19970805T090000
-RRULE
- :FREQ=WEEKLY;COUNT=4;INTERVAL=2;BYDAY=TU,SU
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :The 3rd instance into the month of one of Tuesday\, Wednesday or
- Thursday\, for the next 6 months:
-DTSTART
- ;TZID=US-Eastern
- :19970904T090000
-RRULE
- :FREQ=MONTHLY;COUNT=6;INTERVAL=1;BYDAY=TU,WE,TH;BYSETPOS=3
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :The 2nd to last weekday of the month:
-DTSTART
- ;TZID=US-Eastern
- :19970929T090000
-RRULE
- :FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2
-END:VEVENT
-
-
diff --git a/libical/test-data/recur.txt b/libical/test-data/recur.txt
deleted file mode 100644
index e1b00a65a2..0000000000
--- a/libical/test-data/recur.txt
+++ /dev/null
@@ -1,644 +0,0 @@
-BEGIN:VEVENT
-DESCRIPTION
- :Repeat every tuesday and wednesday starting Tue 2nd April 2002
-RRULE
- :FREQ=WEEKLY;INTERVAL=1;COUNT=6;BYDAY=TU,WE
-DTSTART
- :20020402T114500
-DTEND
- :20020402T124500
-X-EXPECT-NUMEVENTS: 6
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Repeat every thursday starting Tue 2nd April 2002
-RRULE
- :FREQ=WEEKLY;INTERVAL=1;COUNT=6;BYDAY=TH
-DTSTART
- :20020402T114500
-DTEND
- :20020402T124500
-X-EXPECT-NUMEVENTS: 7
-END:VEVENT
-
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every year on the same day\, forever
-RRULE
- :FREQ=YEARLY;INTERVAL=1
-DTSTART
- :19990201T172000
-DTEND
- :19990201T182000
-X-EXPECT-NUMEVENTS: 39
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monday of week number 20 (where the default start of the week is Monday)\,
- forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970512T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1;COUNT=10;BYDAY=MO;BYWEEKNO=20
-X-EXPECT-NUMEVENTS: 11
-END:VEVENT
-
-
-BEGIN:VEVENT
-DESCRIPTION
- : Once a Year
-DTSTART
- ;TZID=America/Los_Angeles
- :20010205T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1
-X-EXPECT-NUMEVENTS: 37
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Recur every sunday and tuesday
-RRULE
- :FREQ=WEEKLY;COUNT=10;INTERVAL=1;BYDAY=SU,TU
-DTSTART
- :20011216T192500
-DTEND
- :20011216T202500
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every first tuesday of the month
-RRULE
- :FREQ=MONTHLY;INTERVAL=1;COUNT=3;BYDAY=1TU
-DTSTART
- :20011204T153500
-DTEND
- :20011204T163500
-X-EXPECT-NUMEVENTS: 3
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Daily for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=DAILY;COUNT=10;INTERVAL=1
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Daily until December 24\, 1997:
-DTSTART
- ;TZID=America/Los_Angeles
- :19971215T090000
-RRULE
- :FREQ=DAILY;UNTIL=19971224T000000Z;INTERVAL=1
-X-EXPECT-NUMEVENTS: 9
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other day - forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=DAILY;COUNT=10;INTERVAL=2
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 10 days\, 5 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=DAILY;COUNT=5;INTERVAL=10
-X-EXPECT-NUMEVENTS: 5
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Daily for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=DAILY;COUNT=10;INTERVAL=1
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every day in January\, for 3 years
-DTSTART
- ;TZID=America/Los_Angeles
- :19980101T090000
-RRULE
- :FREQ=YEARLY;UNTIL=20000131T090000Z;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR,SA;BYMONTH=1
-X-EXPECT-NUMEVENTS: 93
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Everyday in January\, for 3 years:
-DTSTART
- ;TZID=America/Los_Angeles
- :19980101T090000
-RRULE
- :FREQ=DAILY;UNTIL=20000131T170000Z;INTERVAL=1;BYMONTH=1
-X-EXPECT-NUMEVENTS: 93
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Repeat every tuesday and wednesday starting Tue 2nd April 2002
-RRULE
- :FREQ=WEEKLY;INTERVAL=1;COUNT=6;BYDAY=TU,WE
-DTSTART
- :20020402T114500
-DTEND
- :20020402T124500
-X-EXPECT-NUMEVENTS: 6
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Day start the first day in January\, except saturday and sunday. This should be up to March.
-RRULE
- :FREQ=DAILY;COUNT=50;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
-DTSTART
- :20020101T090000Z
-X-EXPECT-NUMEVENTS: 50
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Day in January\, but only in Tuesday\, Wednesday and Thursday
-RRULE
- :FREQ=DAILY;UNTIL=20020120T090000Z;INTERVAL=1;BYDAY=TU,WE,TH
-DTSTART
- :20020101T090000Z
-X-EXPECT-NUMEVENTS: 9
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Day in January\, except saturday and sunday. This is MS Outlook every weekday case.
-RRULE
- :FREQ=DAILY;UNTIL=20020120T090000Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU
-DTSTART
- :20020101T090000Z
-X-EXPECT-NUMEVENTS: 14
-END:VEVENT
-
-
-BEGIN:VEVENT
-DESCRIPTION
- :Weekly for 10 occurrences
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;COUNT=10;INTERVAL=1
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Weekly until December 24\, 1997
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;UNTIL=19971224T000000Z;INTERVAL=1
-X-EXPECT-NUMEVENTS: 17
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other week - 10 times:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;INTERVAL=2;COUNT=10
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Weekly on Tuesday and Thursday for 5 weeks:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;UNTIL=19971007T000000Z;INTERVAL=1;BYDAY=TU,TH
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Weekly on Tuesday and Thursday for 5 weeks:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;COUNT=10;INTERVAL=1;BYDAY=TU,TH
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other week on Monday\, Wednesday and Friday until December
- 24\,1997\, but starting on Tuesday\, September 2\, 1997:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;BYDAY=MO,WE,FR;WKST=SU
-X-EXPECT-NUMEVENTS: 25
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other week on Tuesday and Thursday\, for 8 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=WEEKLY;COUNT=8;INTERVAL=2;BYDAY=TU,TH
-X-EXPECT-NUMEVENTS: 8
-END:VEVENT
-
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the 1st Friday for ten occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970905T090000
-RRULE
- :FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYDAY=FR
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the 1st Friday until December 24\, 1997:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970905T090000
-RRULE
- :FREQ=MONTHLY;UNTIL=19971224T000000Z;INTERVAL=1;BYDAY=1FR
-X-EXPECT-NUMEVENTS: 4
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other month on the 1st and last Sunday of the month for 10 occurrences
- :
-DTSTART
- ;TZID=America/Los_Angeles
- :19970907T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the second to last Monday of the month for 6 months:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970922T090000
-RRULE
- :FREQ=MONTHLY;COUNT=6;INTERVAL=1;BYDAY=-2MO
-X-EXPECT-NUMEVENTS: 6
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the third to the last day of the month\, forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970928T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=1;COUNT=10;BYMONTHDAY=-3
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the 2nd and 15th of the month for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYMONTHDAY=2,15
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monthly on the first and last day of the month for 10 occurrences:\n
-DTSTART
- ;TZID=America/Los_Angeles
- :19970930T090000
-RRULE
- :FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYMONTHDAY=1,-1
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 18 months on the 10th thru 15th of the month for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970910T090000
-RRULE
- :FREQ=MONTHLY;COUNT=10;INTERVAL=18;BYMONTHDAY=10,11,12,13,14,15
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Tuesday\, every other month:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=TU
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Yearly in June and July for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970610T090000
-RRULE
- :FREQ=YEARLY;COUNT=10;INTERVAL=1;BYMONTH=6,7
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every other year on January\, February\, and March for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970310T090000
-RRULE
- :FREQ=YEARLY;COUNT=10;INTERVAL=2;BYMONTH=1,2,3
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 3rd year on the 1st\, 100th and 200th day for 10 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970101T090000
-RRULE
- :FREQ=YEARLY;COUNT=10;INTERVAL=3;BYYEARDAY=1,100,200
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 20th Monday of the year\, forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970519T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1;COUNT=10;BYDAY=20MO
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Monday of week number 20 (where the default start of the week is Monday)\,
- forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970512T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1;COUNT=10;BYDAY=MO;BYWEEKNO=20
-X-EXPECT-NUMEVENTS: 11
-END:VEVENT
-
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Thursday in March\, forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970313T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1;COUNT=10;BYDAY=TH;BYMONTH=3
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Thursday\, but only during June\, July\, and August\, forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970605T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=1;COUNT=10;BYDAY=TH;BYMONTH=6,7,8
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Friday the 13th\, forever:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=1;COUNT=10;BYDAY=FR;BYMONTHDAY=13
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :The first Saturday that follows the first Sunday of the month\,
-DTSTART
- ;TZID=America/Los_Angeles
- :19970913T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=1;COUNT=10;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every four years\, the first Tuesday after a Monday in November\,
- forever (U.S. Presidential Election day):
-DTSTART
- ;TZID=America/Los_Angeles
- :19961105T090000
-RRULE
- :FREQ=YEARLY;INTERVAL=4;COUNT=10;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8;BYMONTH=11
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :The 3rd instance into the month of one of Tuesday\, Wednesday or
- Thursday\, for the next 3 months:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970904T090000
-RRULE
- :FREQ=MONTHLY;COUNT=3;INTERVAL=1;BYDAY=TU,WE,TH;BYSETPOS=3
-X-EXPECT-NUMEVENTS: 3
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :The 2nd to last weekday of the month:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970929T090000
-RRULE
- :FREQ=MONTHLY;INTERVAL=1;COUNT=10;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2
-X-EXPECT-NUMEVENTS: 10
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 3 hours from 9:00 AM to 5:00 PM on a specific day:
-DTSTART
- :19970902T090000Z
-RRULE
- :FREQ=HOURLY;UNTIL=19970902T170000Z;INTERVAL=3
-X-EXPECT-NUMEVENTS: 3
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 15 minutes for 6 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MINUTELY;COUNT=6;INTERVAL=15
-X-EXPECT-NUMEVENTS: 6
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every hour and a half for 4 occurrences:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MINUTELY;COUNT=4;INTERVAL=90
-X-EXPECT-NUMEVENTS: 4
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 20 minutes from 9:00 AM to 4:40 PM every day:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=DAILY;COUNT=20;INTERVAL=1;BYMINUTE=0,20,40;BYHOUR=9,10,11,12,13,14,15,16
-X-EXPECT-NUMEVENTS: 20
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every 20 minutes from 9:00 AM to 4:40 PM every day:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970902T090000
-RRULE
- :FREQ=MINUTELY;COUNT=20;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16
-X-EXPECT-NUMEVENTS: 20
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :An example where the days generated makes a difference because of
- WKST:
-DTSTART
- ;TZID=America/Los_Angeles
- :19970805T090000
-RRULE
- :FREQ=WEEKLY;COUNT=4;INTERVAL=2;BYDAY=TU,SU
-X-EXPECT-NUMEVENTS: 4
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :An example where the days generated makes a difference because of
- WKST. Changing only WKST from MO to SU yields different results...
-DTSTART
- ;TZID=America/Los_Angeles
- :19970805T090000
-RRULE
- :FREQ=WEEKLY;COUNT=4;INTERVAL=2;BYDAY=TU,SU
-X-EXPECT-NUMEVENTS: 4
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Repeat every tuesday and wednesday starting 2 April 2002
-RRULE
- :FREQ=WEEKLY;INTERVAL=1;COUNT=6;BYDAY=TU,WE
-DTSTART
- :20020402T114500
-X-EXPECT-NUMEVENTS: 6
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Use count=1 to repeat zero times.
-RRULE
- :FREQ=DAILY;COUNT=1
-DTSTART
- :20020402T114500
-X-EXPECT-NUMEVENTS: 1
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Use EXDATE to eliminate the base event
-RRULE
- :FREQ=DAILY;COUNT=1
-DTSTART
- :20020402T114500Z
-EXDATE
- :20020402T114500Z
-X-EXPECT-NUMEVENTS: 0
-END:VEVENT
-
-BEGIN:VEVENT
-DESCRIPTION
- :Every Day in January\, except saturday and sunday\, using 2 EXRULEs. (NOT IMPLEMENTED)
-RRULE
- :FREQ=DAILY;INTERVAL=1;UNTIL=20020201T000000Z
-EXRULE
- :FREQ=WEEKLY;INTERVAL=1;UNTIL=20020201T000000Z;BYDAY=SU
-EXRULE
- :FREQ=WEEKLY;INTERVAL=1;UNTIL=20020201T000000Z;BYDAY=SA
-DTSTART
- :20020101T090000Z
-X-EXPECT-NUMEVENTS: 23
-END:VEVENT
-
diff --git a/libical/test-data/restriction.ics b/libical/test-data/restriction.ics
deleted file mode 100644
index b06493bbb3..0000000000
--- a/libical/test-data/restriction.ics
+++ /dev/null
@@ -1,49 +0,0 @@
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN
-METHOD: REQUEST
-BEGIN:VEVENT
-UID:19970901T130000Z-123401@host.com
-DTSTAMP:19970901T1300Z
-DTSTART:19970903T163000Z
-DTEND:19970903T190000Z
-DURATION:PT15M
-SUMMARY:Annual Employee Review
-CLASS:PRIVATE
-CATEGORIES:BUSINESS,HUMAN RESOURCES
-STATUS:TENTATIVE
-END:VEVENT
-END:VCALENDAR
-
-
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN
-METHOD: PUBLISHca
-BEGIN:VEVENT
-RECURRENCE-ID:19970701T210000Z
-RECURRENCE-ID:19970701T210000Z
-SEQUENCE:0
-SEQUENCE:1
-CATEGORIES: A
-CATEGORIES: B
-CLASS: A
-CLASS: B
-ATTENDEE: BOB
-REQUEST-STATUS: 3.0
-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
-DTSTAMP:19970611T190000Z
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/simple-mime.txt b/libical/test-data/simple-mime.txt
deleted file mode 100644
index db7f8a6c39..0000000000
--- a/libical/test-data/simple-mime.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-From: foo1@example.com
-MIME-Version: 1.0
-To: foo2@example.com,foo3@example.com
-Subject: REQUEST - Phone Conference
-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
-VERSION:2.0
-METHOD:REQUEST
-BEGIN:VEVENT
-ORGANIZER:foo1@example.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.busboom.org
-DTSTAMP:19970611T190000Z
-DTSTART:19970621T170000Z
-DTEND:19970621T173000Z
-SUMMARY:Let's discuss the attached document
-UID:calsvr.example.com-873970198738777-8aa
-SEQUENCE:0
-STATUS:CONFIRMED
-END:VEVENT
-END:VCALENDAR
diff --git a/libical/test-data/smallcluster.ics b/libical/test-data/smallcluster.ics
deleted file mode 100644
index 2902136bab..0000000000
--- a/libical/test-data/smallcluster.ics
+++ /dev/null
@@ -1,13 +0,0 @@
-BEGIN:VCALENDAR
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN
-BEGIN:VEVENT
-DTSTART
- :19970714T170000Z
-DTEND:19970715T035959Z
-SUMMARY:Bastille Day Party
-RRULE:FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2,-3,4,-5,6,-7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54;BYSECOND=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26
-END:VEVENT
-END:VCALENDAR
-END:VCALENDAR
diff --git a/libical/test-data/spanlist.ics b/libical/test-data/spanlist.ics
deleted file mode 100644
index 792b535a56..0000000000
--- a/libical/test-data/spanlist.ics
+++ /dev/null
@@ -1,35 +0,0 @@
-BEGIN:VEVENT
-DTSTART:
- 19980101T000000Z
-DTEND:
- 19980101T010000Z
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTART:
- 19980102T010000Z
-DTEND:
- 19980103T020000Z
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTART:
- 19980103T030000Z
-DTEND:
- 19980103T040000Z
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTART:
- 19980104T040000Z
-DTEND:
- 19980105T050000Z
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTART:
- 19980106T060000Z
-DTEND:
- 19980106T070000Z
-END:VEVENT
-
diff --git a/libical/test-data/stresstest.ics b/libical/test-data/stresstest.ics
deleted file mode 100644
index f64cf6bbc9..0000000000
--- a/libical/test-data/stresstest.ics
+++ /dev/null
@@ -1,178 +0,0 @@
-BEGIN:VCALENDAR
-ACTION:AUDIO
-ACTION:
-ACTION:~!@#$%^&*()_+}{:"<>?/.,
-ATTACH:ftp://ftp.example.com/~pub%eof/ed/minutes100197.txt
-ATTACH:http://www.dukes.com/
-ATTENDEE:MAILTO:john_doe@host.com
-ATTENDEE:;john_public@host2.com
-ATTENDEE:MAILTO:john_public@host2.com
-ATTENDEE:Mailto:B@example.com
-ATTENDEE;PARTSTAT=ACCEPTED;PARTSTAT=DECLINED:Mailto:B@example.com
-ATTENDEE;PARTSTAT=*&^*&:Mailto:B@example.com
-ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
-ATTENDEE;ROLE=ATTENDEE:Mailto:A@example.com
-ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com
-ATTENDEE;ROLE=NONPARTICIPANT;RSVP=NO:Mailto:E@example.com
-ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com
-ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com
-ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:Bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb@example.com
-CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION;ANNIVERSARY,PERSONAL,SPECIAL OCCASION;ANNIVERSARY,PERSONAL,SPECIAL OCCASION;
-CATEGORIES;RSVP=TRUE;RSVP=FALSE:one,two
-CLASS:PUBLIC
-COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR
- DUKES forfeit the game
- I'll send you my input by e-mail
- May we bump this by an hour? I have a conflict
- Mr. B cannot attend. It's raining. Lets cancel.
-Sorry, I cannot change this meeting time
-Sorry, I will be out of town at that time.
-This iCalendar file contains busy time information for
-COMMENT:This time works much better and I think the big conference
-COMMENT:You're off the hook for this meeting
-CREATED:19980309T130000Z
-CREATED:19980309T130000
-CREATED:19980309T13000
-CREATED:19980309T1300
-CREATED:19980309T130
-CREATED:19980309T13
-CREATED:19980309T1
-CREATED:19980309T
-CREATED:19980309
-CREATED:1998030
-CREATED:199803
-CREATED:19980
-CREATED:1998
-CREATED:199
-CREATED:19
-CREATED:1
-CREATED:
-DTSTAMP:9999999T9999999X
-DTSTART:T103012
-DTSTART;VALUE=DATE:19970317
-DTSTART;VALUE=TIME:19970714
-DUE:19980415T235959
-DUE:19980415T235959
-DURATION:P15DT5H0M20S
-DURATION:P7W7W8w
-DURATION:PT15M
-DURATION:PT1H
-FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M,19980101T180000Z/19980101T190000Z,19980103T020000Z/19980103T050000Z,19980107T020000Z/19980107T050000Z
-FREEBUSY:19980318T030000Z/19980318T040000Z
-FREEBUSY:19980318T030000Z/19980318T040000
-FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M,
-LOCATION;VALUE=URI:http://www.midwaystadium.com/
-METHOD:ADD
-METHOD:DESTROY
-METHOD:xyz
-METHOD:X-LIC-METHOD
-PERCENT-COMPLETE:40
-PERCENT-COMPLETE:.75
-PERCENT-COMPLETE:0
-PRIORITY:1
-PRIORITY:2
-PRIORITY:134645983456666098345624598726459872445897345987
-PRODID:"-//RDU Software//NONSGML HandCal//EN"
-PRODID:'-//ABC Corporation//NONSGML '
-PRODID:-//ABC Corporation;foo//NONSGML My Product//EN
-RDATE:19970406T020000
-RDATE:19971026T020000
-RDATE:19980304T180000Z
-RDATE:19980304T180000Z
-RDATE:19980311T160000Z
-RDATE:19980311T180000Z
-RDATE:19980315T180000Z
-RDATE:19980318T180000Z
-RDATE:19981025T020000
-RDATE:19981025T020000
-RDATE:19990404T020000
-RDATE:19990404T020000
-RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z
-RECURRENCE-ID:19970701T210000Z
-RECURRENCE-ID:19970715T210000Z
-RECURRENCE-ID:19970801T210000Z
-RECURRENCE-ID:19970809T210000Z
-RECURRENCE-ID:19980101T170000Z
-RECURRENCE-ID:19980311T160000Z
-RECURRENCE-ID:19980311T180000Z
-RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z
-RELATED-TO:0981234-1234234-14@example.com
-RELATED-TO:0981234-1234234-2402-35@example.com
-REPEAT:2
-REPEAT:23
-REPEAT:4
-REPEAT:4
-REPEAT:4
-REQUEST-STATUS:2.0;Success
-REQUEST-STATUS:2.0;Success
-REQUEST-STATUS:2.0;Success
-REQUEST-STATUS:2.0;Success
-REQUEST-STATUS:2.0;Success
-REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single
-REQUEST-STATUS:3.0;Invalid Property Name;FOO
-RESOURCES:SCOREBOARD
-RRULE:FREQ=MONTHLY;BYMONTHDAY=1
-RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z
-RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
-RRULE:FREQ=WEEKLY
-RRULE:FREQ=WEEKLY
-RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU
-RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU
-RRULE:FREQ=YEARLY
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
-RRULE:FREQ=YEARLY;INTERVAL=1
-RRULE:WKST=SU;BYDAY=TH;FREQ=WEEKLY
-RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY
-SCALE:GREGORIAN
-SEQUENCE:0
-SEQUENCE:.03486
-SEQUENCE:dflkjhfg
-SEQUENCE:
-SEQUENCE:7
-STATUS:CANCELLED
-STATUS:NEEDS-ACTION
-STATUS:Needs Action
-SUMMARY: Bastille Day
-SUMMARY:"No Property"
-SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
-SUMMARY:1996 Income Tax Preparation
-SUMMARY:Annual Employee Review
-SUMMARY:Bastille Day Party
-SUMMARY:Calendaring Interoperability Planning Meeting
-SUMMARY:Calendaring Interoperability Planning Meeting
-SUMMARY;RSVP=TRUE;RSVP=FALSE:Calendaring Interoperability Planning Meeting
-TRANSP:TRANSPARENT
-TRIGGER:-P2D
-TRIGGER:-PT2H
-TRIGGER:-PT30M
-TRIGGER:-PT30M
-TRIGGER;VALUE=DATE-TIME:19970317T133000Z
-TRIGGER;VALUE=DATE-TIME:19980101T050000Z
-TRIGGER;VALUE=DATE-TIME:19980403T120000
-TRIGGER;VALUE=DATE-TIME:19980403T120000Z
-TZID:America-Chicago
-TZID:America-SanJose
-TZNAME:PST
-TZOFFSETFROM:-0600
-TZOFFSETFROM:0700
-TZOFFSETFROM:4.56
-TZURL:http://zones.stds_r_us.net/tz/America-Chicago
-TZURL:http://zones.stds_r_us.net/tz/America-SanJose
-TZURL:http://zones.stds_r_us.net/tz/US-Eastern
-UID:uid5@host1.com
-URL:http://www.host.com/calendar/busytime/jsmith.ifb
-VERSION:2.0
-VERSION:.0
-VERSION:2.0.0.0
-X-SKI-TITLE;RSVP=TRUE: This is an extension property
-END:VCALENDAR \ No newline at end of file
diff --git a/libical/test-data/user-cal.vcf b/libical/test-data/user-cal.vcf
deleted file mode 100644
index 3cf005fa21..0000000000
--- a/libical/test-data/user-cal.vcf
+++ /dev/null
@@ -1,76 +0,0 @@
-BEGIN:VCALENDAR
-X-COMMENT: This file was contributed by Ola Lundqvist <olalu526@student.liu.se>
-PRODID:-//GNOME//NONSGML GnomeCalendar//EN
-TZ:CEST
-VERSION:1.1.4
-BEGIN:VEVENT
-UID:20000511T125528-23888-500-1-494
-SEQUENCE:-1
-DTSTART:20000530T150000
-DTEND:20000530T170000
-DCREATED:20000524T125250
-LAST-MODIFIED:20000524T125250
-SUMMARY:Omphalic for ataraxia
-STATUS:NEEDS ACTION
-CLASS:PUBLIC
-PRIORITY:0
-TRANSP:0
-ORGNAME:ola
-X-PILOTID:4441126
-X-PILOTSTAT:0
-END:VEVENT
-
-BEGIN:VEVENT
-UID:20000511T125528-23888-500-1-492
-SEQUENCE:-1
-DTSTART:20000529T130000
-DTEND:20000529T130000
-DCREATED:20000524T125250
-LAST-MODIFIED:20000524T125250
-SUMMARY:Eurphrates et filistu
-STATUS:NEEDS ACTION
-CLASS:PUBLIC
-PRIORITY:0
-TRANSP:0
-ORGNAME:ola
-X-PILOTID:4441124
-X-PILOTSTAT:0
-END:VEVENT
-
-BEGIN:VEVENT
-UID:20000524T125250-1004-500-1-13
-SEQUENCE:-1
-DTSTART:20000528T000000
-DTEND:20000528T235900
-DCREATED:20000524T125250
-LAST-MODIFIED:20000524T125250
-SUMMARY:Calaphgyian, napiform malefactors
-STATUS:NEEDS ACTION
-CLASS:PUBLIC
-PRIORITY:0
-TRANSP:0
-ORGNAME:ola
-X-PILOTID:4441156
-X-PILOTSTAT:0
-END:VEVENT
-
-BEGIN:VEVENT
-UID:20000524T125250-1004-500-1-12
-SEQUENCE:-1
-DTSTART:20000527T150000
-DTEND:20000527T160000
-DCREATED:20000524T125250
-LAST-MODIFIED:20000524T125250
-SUMMARY: aphasiac puntildictus
-STATUS:NEEDS ACTION
-CLASS:PUBLIC
-PRIORITY:0
-TRANSP:0
-ORGNAME:ola
-X-PILOTID:4441155
-X-PILOTSTAT:0
-END:VEVENT
-
-
-END:VCALENDAR
-
diff --git a/libical/zoneinfo/.cvsignore b/libical/zoneinfo/.cvsignore
deleted file mode 100644
index 282522db03..0000000000
--- a/libical/zoneinfo/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/libical/zoneinfo/Africa/Abidjan.ics b/libical/zoneinfo/Africa/Abidjan.ics
deleted file mode 100644
index 88b139f615..0000000000
--- a/libical/zoneinfo/Africa/Abidjan.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Abidjan
-X-LIC-LOCATION:Africa/Abidjan
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Accra.ics b/libical/zoneinfo/Africa/Accra.ics
deleted file mode 100644
index e656c92f74..0000000000
--- a/libical/zoneinfo/Africa/Accra.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Accra
-X-LIC-LOCATION:Africa/Accra
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Addis_Ababa.ics b/libical/zoneinfo/Africa/Addis_Ababa.ics
deleted file mode 100644
index baed76bb70..0000000000
--- a/libical/zoneinfo/Africa/Addis_Ababa.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Addis_Ababa
-X-LIC-LOCATION:Africa/Addis_Ababa
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Algiers.ics b/libical/zoneinfo/Africa/Algiers.ics
deleted file mode 100644
index c188e61da7..0000000000
--- a/libical/zoneinfo/Africa/Algiers.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Algiers
-X-LIC-LOCATION:Africa/Algiers
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Asmera.ics b/libical/zoneinfo/Africa/Asmera.ics
deleted file mode 100644
index 76d5699e79..0000000000
--- a/libical/zoneinfo/Africa/Asmera.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Asmera
-X-LIC-LOCATION:Africa/Asmera
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Bamako.ics b/libical/zoneinfo/Africa/Bamako.ics
deleted file mode 100644
index bfa290ecd0..0000000000
--- a/libical/zoneinfo/Africa/Bamako.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Bamako
-X-LIC-LOCATION:Africa/Bamako
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Bangui.ics b/libical/zoneinfo/Africa/Bangui.ics
deleted file mode 100644
index bccb9bdbde..0000000000
--- a/libical/zoneinfo/Africa/Bangui.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Bangui
-X-LIC-LOCATION:Africa/Bangui
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Banjul.ics b/libical/zoneinfo/Africa/Banjul.ics
deleted file mode 100644
index 260425eff8..0000000000
--- a/libical/zoneinfo/Africa/Banjul.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Banjul
-X-LIC-LOCATION:Africa/Banjul
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Bissau.ics b/libical/zoneinfo/Africa/Bissau.ics
deleted file mode 100644
index 9dd1b8f6fe..0000000000
--- a/libical/zoneinfo/Africa/Bissau.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Bissau
-X-LIC-LOCATION:Africa/Bissau
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Blantyre.ics b/libical/zoneinfo/Africa/Blantyre.ics
deleted file mode 100644
index 3f1e457fb7..0000000000
--- a/libical/zoneinfo/Africa/Blantyre.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Blantyre
-X-LIC-LOCATION:Africa/Blantyre
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Brazzaville.ics b/libical/zoneinfo/Africa/Brazzaville.ics
deleted file mode 100644
index 58bda78a8d..0000000000
--- a/libical/zoneinfo/Africa/Brazzaville.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Brazzaville
-X-LIC-LOCATION:Africa/Brazzaville
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Bujumbura.ics b/libical/zoneinfo/Africa/Bujumbura.ics
deleted file mode 100644
index 2d9be57f44..0000000000
--- a/libical/zoneinfo/Africa/Bujumbura.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Bujumbura
-X-LIC-LOCATION:Africa/Bujumbura
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Cairo.ics b/libical/zoneinfo/Africa/Cairo.ics
deleted file mode 100644
index e389677d3b..0000000000
--- a/libical/zoneinfo/Africa/Cairo.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Cairo
-X-LIC-LOCATION:Africa/Cairo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700424T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19700925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1FR
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Casablanca.ics b/libical/zoneinfo/Africa/Casablanca.ics
deleted file mode 100644
index 5490ee8923..0000000000
--- a/libical/zoneinfo/Africa/Casablanca.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Casablanca
-X-LIC-LOCATION:Africa/Casablanca
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Ceuta.ics b/libical/zoneinfo/Africa/Ceuta.ics
deleted file mode 100644
index 7e5e530fbe..0000000000
--- a/libical/zoneinfo/Africa/Ceuta.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Ceuta
-X-LIC-LOCATION:Africa/Ceuta
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Conakry.ics b/libical/zoneinfo/Africa/Conakry.ics
deleted file mode 100644
index 4afba60896..0000000000
--- a/libical/zoneinfo/Africa/Conakry.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Conakry
-X-LIC-LOCATION:Africa/Conakry
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Dakar.ics b/libical/zoneinfo/Africa/Dakar.ics
deleted file mode 100644
index ccfdb5b484..0000000000
--- a/libical/zoneinfo/Africa/Dakar.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Dakar
-X-LIC-LOCATION:Africa/Dakar
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Dar_es_Salaam.ics b/libical/zoneinfo/Africa/Dar_es_Salaam.ics
deleted file mode 100644
index d8148c76b2..0000000000
--- a/libical/zoneinfo/Africa/Dar_es_Salaam.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Dar_es_Salaam
-X-LIC-LOCATION:Africa/Dar_es_Salaam
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Djibouti.ics b/libical/zoneinfo/Africa/Djibouti.ics
deleted file mode 100644
index 0885e36b37..0000000000
--- a/libical/zoneinfo/Africa/Djibouti.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Djibouti
-X-LIC-LOCATION:Africa/Djibouti
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Douala.ics b/libical/zoneinfo/Africa/Douala.ics
deleted file mode 100644
index 866e975fdb..0000000000
--- a/libical/zoneinfo/Africa/Douala.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Douala
-X-LIC-LOCATION:Africa/Douala
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/El_Aaiun.ics b/libical/zoneinfo/Africa/El_Aaiun.ics
deleted file mode 100644
index e8a8151320..0000000000
--- a/libical/zoneinfo/Africa/El_Aaiun.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/El_Aaiun
-X-LIC-LOCATION:Africa/El_Aaiun
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Freetown.ics b/libical/zoneinfo/Africa/Freetown.ics
deleted file mode 100644
index 9ad13410d4..0000000000
--- a/libical/zoneinfo/Africa/Freetown.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Freetown
-X-LIC-LOCATION:Africa/Freetown
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Gaborone.ics b/libical/zoneinfo/Africa/Gaborone.ics
deleted file mode 100644
index 953a9beff9..0000000000
--- a/libical/zoneinfo/Africa/Gaborone.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Gaborone
-X-LIC-LOCATION:Africa/Gaborone
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Harare.ics b/libical/zoneinfo/Africa/Harare.ics
deleted file mode 100644
index 81f6b0b37f..0000000000
--- a/libical/zoneinfo/Africa/Harare.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Harare
-X-LIC-LOCATION:Africa/Harare
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Johannesburg.ics b/libical/zoneinfo/Africa/Johannesburg.ics
deleted file mode 100644
index 169211e2d2..0000000000
--- a/libical/zoneinfo/Africa/Johannesburg.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Johannesburg
-X-LIC-LOCATION:Africa/Johannesburg
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Kampala.ics b/libical/zoneinfo/Africa/Kampala.ics
deleted file mode 100644
index 9daede7074..0000000000
--- a/libical/zoneinfo/Africa/Kampala.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Kampala
-X-LIC-LOCATION:Africa/Kampala
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Khartoum.ics b/libical/zoneinfo/Africa/Khartoum.ics
deleted file mode 100644
index 410c8ac578..0000000000
--- a/libical/zoneinfo/Africa/Khartoum.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Khartoum
-X-LIC-LOCATION:Africa/Khartoum
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Kigali.ics b/libical/zoneinfo/Africa/Kigali.ics
deleted file mode 100644
index d8815ebafa..0000000000
--- a/libical/zoneinfo/Africa/Kigali.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Kigali
-X-LIC-LOCATION:Africa/Kigali
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Kinshasa.ics b/libical/zoneinfo/Africa/Kinshasa.ics
deleted file mode 100644
index 072a7f0195..0000000000
--- a/libical/zoneinfo/Africa/Kinshasa.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Kinshasa
-X-LIC-LOCATION:Africa/Kinshasa
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Lagos.ics b/libical/zoneinfo/Africa/Lagos.ics
deleted file mode 100644
index 61e2fb23f8..0000000000
--- a/libical/zoneinfo/Africa/Lagos.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Lagos
-X-LIC-LOCATION:Africa/Lagos
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Libreville.ics b/libical/zoneinfo/Africa/Libreville.ics
deleted file mode 100644
index b67424043c..0000000000
--- a/libical/zoneinfo/Africa/Libreville.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Libreville
-X-LIC-LOCATION:Africa/Libreville
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Lome.ics b/libical/zoneinfo/Africa/Lome.ics
deleted file mode 100644
index e1703f5e54..0000000000
--- a/libical/zoneinfo/Africa/Lome.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Lome
-X-LIC-LOCATION:Africa/Lome
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Luanda.ics b/libical/zoneinfo/Africa/Luanda.ics
deleted file mode 100644
index c2283b5922..0000000000
--- a/libical/zoneinfo/Africa/Luanda.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Luanda
-X-LIC-LOCATION:Africa/Luanda
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Lubumbashi.ics b/libical/zoneinfo/Africa/Lubumbashi.ics
deleted file mode 100644
index 10eccfc4af..0000000000
--- a/libical/zoneinfo/Africa/Lubumbashi.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Lubumbashi
-X-LIC-LOCATION:Africa/Lubumbashi
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Lusaka.ics b/libical/zoneinfo/Africa/Lusaka.ics
deleted file mode 100644
index 339c568aaa..0000000000
--- a/libical/zoneinfo/Africa/Lusaka.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Lusaka
-X-LIC-LOCATION:Africa/Lusaka
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Malabo.ics b/libical/zoneinfo/Africa/Malabo.ics
deleted file mode 100644
index e1a5445854..0000000000
--- a/libical/zoneinfo/Africa/Malabo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Malabo
-X-LIC-LOCATION:Africa/Malabo
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Maputo.ics b/libical/zoneinfo/Africa/Maputo.ics
deleted file mode 100644
index f1dab41a16..0000000000
--- a/libical/zoneinfo/Africa/Maputo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Maputo
-X-LIC-LOCATION:Africa/Maputo
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Maseru.ics b/libical/zoneinfo/Africa/Maseru.ics
deleted file mode 100644
index d486fe2278..0000000000
--- a/libical/zoneinfo/Africa/Maseru.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Maseru
-X-LIC-LOCATION:Africa/Maseru
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Mbabane.ics b/libical/zoneinfo/Africa/Mbabane.ics
deleted file mode 100644
index 345a2c927b..0000000000
--- a/libical/zoneinfo/Africa/Mbabane.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Mbabane
-X-LIC-LOCATION:Africa/Mbabane
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Mogadishu.ics b/libical/zoneinfo/Africa/Mogadishu.ics
deleted file mode 100644
index 3161cef17d..0000000000
--- a/libical/zoneinfo/Africa/Mogadishu.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Mogadishu
-X-LIC-LOCATION:Africa/Mogadishu
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Monrovia.ics b/libical/zoneinfo/Africa/Monrovia.ics
deleted file mode 100644
index 75aaab3332..0000000000
--- a/libical/zoneinfo/Africa/Monrovia.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Monrovia
-X-LIC-LOCATION:Africa/Monrovia
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Nairobi.ics b/libical/zoneinfo/Africa/Nairobi.ics
deleted file mode 100644
index 0fa8b28dba..0000000000
--- a/libical/zoneinfo/Africa/Nairobi.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Nairobi
-X-LIC-LOCATION:Africa/Nairobi
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Ndjamena.ics b/libical/zoneinfo/Africa/Ndjamena.ics
deleted file mode 100644
index 7732657293..0000000000
--- a/libical/zoneinfo/Africa/Ndjamena.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Ndjamena
-X-LIC-LOCATION:Africa/Ndjamena
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Niamey.ics b/libical/zoneinfo/Africa/Niamey.ics
deleted file mode 100644
index 7c0347d4aa..0000000000
--- a/libical/zoneinfo/Africa/Niamey.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Niamey
-X-LIC-LOCATION:Africa/Niamey
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Nouakchott.ics b/libical/zoneinfo/Africa/Nouakchott.ics
deleted file mode 100644
index e5f77760d8..0000000000
--- a/libical/zoneinfo/Africa/Nouakchott.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Nouakchott
-X-LIC-LOCATION:Africa/Nouakchott
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Ouagadougou.ics b/libical/zoneinfo/Africa/Ouagadougou.ics
deleted file mode 100644
index c66649bbfd..0000000000
--- a/libical/zoneinfo/Africa/Ouagadougou.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Ouagadougou
-X-LIC-LOCATION:Africa/Ouagadougou
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Porto-Novo.ics b/libical/zoneinfo/Africa/Porto-Novo.ics
deleted file mode 100644
index 995f0de0da..0000000000
--- a/libical/zoneinfo/Africa/Porto-Novo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Porto-Novo
-X-LIC-LOCATION:Africa/Porto-Novo
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Sao_Tome.ics b/libical/zoneinfo/Africa/Sao_Tome.ics
deleted file mode 100644
index ffaade3cfe..0000000000
--- a/libical/zoneinfo/Africa/Sao_Tome.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Sao_Tome
-X-LIC-LOCATION:Africa/Sao_Tome
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Timbuktu.ics b/libical/zoneinfo/Africa/Timbuktu.ics
deleted file mode 100644
index 19ec6fba5e..0000000000
--- a/libical/zoneinfo/Africa/Timbuktu.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Africa/Timbuktu
-X-LIC-LOCATION:Africa/Timbuktu
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Tripoli.ics b/libical/zoneinfo/Africa/Tripoli.ics
deleted file mode 100644
index c4905ca762..0000000000
--- a/libical/zoneinfo/Africa/Tripoli.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Tripoli
-X-LIC-LOCATION:Africa/Tripoli
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Tunis.ics b/libical/zoneinfo/Africa/Tunis.ics
deleted file mode 100644
index 9e334d5c2a..0000000000
--- a/libical/zoneinfo/Africa/Tunis.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Tunis
-X-LIC-LOCATION:Africa/Tunis
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Africa/Windhoek.ics b/libical/zoneinfo/Africa/Windhoek.ics
deleted file mode 100644
index 79cb5bbcca..0000000000
--- a/libical/zoneinfo/Africa/Windhoek.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Africa/Windhoek
-X-LIC-LOCATION:Africa/Windhoek
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:WAST
-DTSTART:19700906T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Adak.ics b/libical/zoneinfo/America/Adak.ics
deleted file mode 100644
index 8cd319a72e..0000000000
--- a/libical/zoneinfo/America/Adak.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Adak
-X-LIC-LOCATION:America/Adak
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Anchorage.ics b/libical/zoneinfo/America/Anchorage.ics
deleted file mode 100644
index 8055b67c19..0000000000
--- a/libical/zoneinfo/America/Anchorage.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Anchorage
-X-LIC-LOCATION:America/Anchorage
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Anguilla.ics b/libical/zoneinfo/America/Anguilla.ics
deleted file mode 100644
index 9c9bb0a3e8..0000000000
--- a/libical/zoneinfo/America/Anguilla.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Anguilla
-X-LIC-LOCATION:America/Anguilla
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Antigua.ics b/libical/zoneinfo/America/Antigua.ics
deleted file mode 100644
index 2d341cb9b9..0000000000
--- a/libical/zoneinfo/America/Antigua.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Antigua
-X-LIC-LOCATION:America/Antigua
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Araguaina.ics b/libical/zoneinfo/America/Araguaina.ics
deleted file mode 100644
index 729eeb9afc..0000000000
--- a/libical/zoneinfo/America/Araguaina.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Araguaina
-X-LIC-LOCATION:America/Araguaina
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Aruba.ics b/libical/zoneinfo/America/Aruba.ics
deleted file mode 100644
index d21f73ed53..0000000000
--- a/libical/zoneinfo/America/Aruba.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Aruba
-X-LIC-LOCATION:America/Aruba
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Asuncion.ics b/libical/zoneinfo/America/Asuncion.ics
deleted file mode 100644
index 5af56fe1cf..0000000000
--- a/libical/zoneinfo/America/Asuncion.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Asuncion
-X-LIC-LOCATION:America/Asuncion
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19700405T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:19700906T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Barbados.ics b/libical/zoneinfo/America/Barbados.ics
deleted file mode 100644
index 3d10e0067f..0000000000
--- a/libical/zoneinfo/America/Barbados.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Barbados
-X-LIC-LOCATION:America/Barbados
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Belem.ics b/libical/zoneinfo/America/Belem.ics
deleted file mode 100644
index 1a9a260e3b..0000000000
--- a/libical/zoneinfo/America/Belem.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Belem
-X-LIC-LOCATION:America/Belem
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Belize.ics b/libical/zoneinfo/America/Belize.ics
deleted file mode 100644
index 7e050f23a1..0000000000
--- a/libical/zoneinfo/America/Belize.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Belize
-X-LIC-LOCATION:America/Belize
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Boa_Vista.ics b/libical/zoneinfo/America/Boa_Vista.ics
deleted file mode 100644
index e2c7db092c..0000000000
--- a/libical/zoneinfo/America/Boa_Vista.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Boa_Vista
-X-LIC-LOCATION:America/Boa_Vista
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Bogota.ics b/libical/zoneinfo/America/Bogota.ics
deleted file mode 100644
index 3881498298..0000000000
--- a/libical/zoneinfo/America/Bogota.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Bogota
-X-LIC-LOCATION:America/Bogota
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:COT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Boise.ics b/libical/zoneinfo/America/Boise.ics
deleted file mode 100644
index 95bf6b777f..0000000000
--- a/libical/zoneinfo/America/Boise.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Boise
-X-LIC-LOCATION:America/Boise
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Buenos_Aires.ics b/libical/zoneinfo/America/Buenos_Aires.ics
deleted file mode 100644
index 1d47dc9100..0000000000
--- a/libical/zoneinfo/America/Buenos_Aires.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Buenos_Aires
-X-LIC-LOCATION:America/Buenos_Aires
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cambridge_Bay.ics b/libical/zoneinfo/America/Cambridge_Bay.ics
deleted file mode 100644
index b1260aaeb8..0000000000
--- a/libical/zoneinfo/America/Cambridge_Bay.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Cambridge_Bay
-X-LIC-LOCATION:America/Cambridge_Bay
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cancun.ics b/libical/zoneinfo/America/Cancun.ics
deleted file mode 100644
index 655ba074bc..0000000000
--- a/libical/zoneinfo/America/Cancun.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Cancun
-X-LIC-LOCATION:America/Cancun
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Caracas.ics b/libical/zoneinfo/America/Caracas.ics
deleted file mode 100644
index 17b94d65eb..0000000000
--- a/libical/zoneinfo/America/Caracas.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Caracas
-X-LIC-LOCATION:America/Caracas
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:VET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Catamarca.ics b/libical/zoneinfo/America/Catamarca.ics
deleted file mode 100644
index 565b24483f..0000000000
--- a/libical/zoneinfo/America/Catamarca.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Catamarca
-X-LIC-LOCATION:America/Catamarca
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cayenne.ics b/libical/zoneinfo/America/Cayenne.ics
deleted file mode 100644
index 2d282240e7..0000000000
--- a/libical/zoneinfo/America/Cayenne.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Cayenne
-X-LIC-LOCATION:America/Cayenne
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:GFT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cayman.ics b/libical/zoneinfo/America/Cayman.ics
deleted file mode 100644
index 33599214dd..0000000000
--- a/libical/zoneinfo/America/Cayman.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Cayman
-X-LIC-LOCATION:America/Cayman
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Chicago.ics b/libical/zoneinfo/America/Chicago.ics
deleted file mode 100644
index 37cf55020a..0000000000
--- a/libical/zoneinfo/America/Chicago.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Chicago
-X-LIC-LOCATION:America/Chicago
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Chihuahua.ics b/libical/zoneinfo/America/Chihuahua.ics
deleted file mode 100644
index 205a152f66..0000000000
--- a/libical/zoneinfo/America/Chihuahua.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Chihuahua
-X-LIC-LOCATION:America/Chihuahua
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cordoba.ics b/libical/zoneinfo/America/Cordoba.ics
deleted file mode 100644
index 21e1a73e46..0000000000
--- a/libical/zoneinfo/America/Cordoba.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Cordoba
-X-LIC-LOCATION:America/Cordoba
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Costa_Rica.ics b/libical/zoneinfo/America/Costa_Rica.ics
deleted file mode 100644
index 0478f976b3..0000000000
--- a/libical/zoneinfo/America/Costa_Rica.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Costa_Rica
-X-LIC-LOCATION:America/Costa_Rica
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Cuiaba.ics b/libical/zoneinfo/America/Cuiaba.ics
deleted file mode 100644
index 4818c217b5..0000000000
--- a/libical/zoneinfo/America/Cuiaba.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Cuiaba
-X-LIC-LOCATION:America/Cuiaba
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Curacao.ics b/libical/zoneinfo/America/Curacao.ics
deleted file mode 100644
index d336bfee4f..0000000000
--- a/libical/zoneinfo/America/Curacao.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Curacao
-X-LIC-LOCATION:America/Curacao
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Danmarkshavn.ics b/libical/zoneinfo/America/Danmarkshavn.ics
deleted file mode 100644
index 4c6ec309d7..0000000000
--- a/libical/zoneinfo/America/Danmarkshavn.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_2/America/Danmarkshavn
-X-LIC-LOCATION:America/Danmarkshavn
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Dawson.ics b/libical/zoneinfo/America/Dawson.ics
deleted file mode 100644
index 5836ed421b..0000000000
--- a/libical/zoneinfo/America/Dawson.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Dawson
-X-LIC-LOCATION:America/Dawson
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Dawson_Creek.ics b/libical/zoneinfo/America/Dawson_Creek.ics
deleted file mode 100644
index b302206b44..0000000000
--- a/libical/zoneinfo/America/Dawson_Creek.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Dawson_Creek
-X-LIC-LOCATION:America/Dawson_Creek
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Denver.ics b/libical/zoneinfo/America/Denver.ics
deleted file mode 100644
index 2687e62c72..0000000000
--- a/libical/zoneinfo/America/Denver.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Denver
-X-LIC-LOCATION:America/Denver
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Detroit.ics b/libical/zoneinfo/America/Detroit.ics
deleted file mode 100644
index 196fa31f15..0000000000
--- a/libical/zoneinfo/America/Detroit.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Detroit
-X-LIC-LOCATION:America/Detroit
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Dominica.ics b/libical/zoneinfo/America/Dominica.ics
deleted file mode 100644
index 127f1e8dca..0000000000
--- a/libical/zoneinfo/America/Dominica.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Dominica
-X-LIC-LOCATION:America/Dominica
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Edmonton.ics b/libical/zoneinfo/America/Edmonton.ics
deleted file mode 100644
index e1e2f02918..0000000000
--- a/libical/zoneinfo/America/Edmonton.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Edmonton
-X-LIC-LOCATION:America/Edmonton
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Eirunepe.ics b/libical/zoneinfo/America/Eirunepe.ics
deleted file mode 100644
index bd4daaf496..0000000000
--- a/libical/zoneinfo/America/Eirunepe.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Eirunepe
-X-LIC-LOCATION:America/Eirunepe
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/El_Salvador.ics b/libical/zoneinfo/America/El_Salvador.ics
deleted file mode 100644
index 816d83c675..0000000000
--- a/libical/zoneinfo/America/El_Salvador.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/El_Salvador
-X-LIC-LOCATION:America/El_Salvador
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Fortaleza.ics b/libical/zoneinfo/America/Fortaleza.ics
deleted file mode 100644
index 5a243bb7b6..0000000000
--- a/libical/zoneinfo/America/Fortaleza.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Fortaleza
-X-LIC-LOCATION:America/Fortaleza
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Glace_Bay.ics b/libical/zoneinfo/America/Glace_Bay.ics
deleted file mode 100644
index 771b6328dc..0000000000
--- a/libical/zoneinfo/America/Glace_Bay.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Glace_Bay
-X-LIC-LOCATION:America/Glace_Bay
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Godthab.ics b/libical/zoneinfo/America/Godthab.ics
deleted file mode 100644
index 983765bd0f..0000000000
--- a/libical/zoneinfo/America/Godthab.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Godthab
-X-LIC-LOCATION:America/Godthab
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:WGST
-DTSTART:19700328T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19701024T230000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Goose_Bay.ics b/libical/zoneinfo/America/Goose_Bay.ics
deleted file mode 100644
index f2bda05eea..0000000000
--- a/libical/zoneinfo/America/Goose_Bay.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Goose_Bay
-X-LIC-LOCATION:America/Goose_Bay
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19700405T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19701025T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Grand_Turk.ics b/libical/zoneinfo/America/Grand_Turk.ics
deleted file mode 100644
index 71d4360b54..0000000000
--- a/libical/zoneinfo/America/Grand_Turk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Grand_Turk
-X-LIC-LOCATION:America/Grand_Turk
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Grenada.ics b/libical/zoneinfo/America/Grenada.ics
deleted file mode 100644
index 3ceb58646a..0000000000
--- a/libical/zoneinfo/America/Grenada.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Grenada
-X-LIC-LOCATION:America/Grenada
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Guadeloupe.ics b/libical/zoneinfo/America/Guadeloupe.ics
deleted file mode 100644
index 75736ec5a4..0000000000
--- a/libical/zoneinfo/America/Guadeloupe.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Guadeloupe
-X-LIC-LOCATION:America/Guadeloupe
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Guatemala.ics b/libical/zoneinfo/America/Guatemala.ics
deleted file mode 100644
index d7a89d4bd8..0000000000
--- a/libical/zoneinfo/America/Guatemala.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Guatemala
-X-LIC-LOCATION:America/Guatemala
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Guayaquil.ics b/libical/zoneinfo/America/Guayaquil.ics
deleted file mode 100644
index 273e89c139..0000000000
--- a/libical/zoneinfo/America/Guayaquil.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Guayaquil
-X-LIC-LOCATION:America/Guayaquil
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:ECT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Guyana.ics b/libical/zoneinfo/America/Guyana.ics
deleted file mode 100644
index e93ceb8eba..0000000000
--- a/libical/zoneinfo/America/Guyana.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Guyana
-X-LIC-LOCATION:America/Guyana
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:GYT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Halifax.ics b/libical/zoneinfo/America/Halifax.ics
deleted file mode 100644
index e385a87dfe..0000000000
--- a/libical/zoneinfo/America/Halifax.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Halifax
-X-LIC-LOCATION:America/Halifax
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Havana.ics b/libical/zoneinfo/America/Havana.ics
deleted file mode 100644
index ed1704d3fb..0000000000
--- a/libical/zoneinfo/America/Havana.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Havana
-X-LIC-LOCATION:America/Havana
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19701025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19700405T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Hermosillo.ics b/libical/zoneinfo/America/Hermosillo.ics
deleted file mode 100644
index dd2d95dd4a..0000000000
--- a/libical/zoneinfo/America/Hermosillo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Hermosillo
-X-LIC-LOCATION:America/Hermosillo
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Indiana/Indianapolis.ics b/libical/zoneinfo/America/Indiana/Indianapolis.ics
deleted file mode 100644
index f51bf92d24..0000000000
--- a/libical/zoneinfo/America/Indiana/Indianapolis.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Indiana/Indianapolis
-X-LIC-LOCATION:America/Indiana/Indianapolis
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Indiana/Knox.ics b/libical/zoneinfo/America/Indiana/Knox.ics
deleted file mode 100644
index c1a2c54fb5..0000000000
--- a/libical/zoneinfo/America/Indiana/Knox.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Indiana/Knox
-X-LIC-LOCATION:America/Indiana/Knox
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Indiana/Marengo.ics b/libical/zoneinfo/America/Indiana/Marengo.ics
deleted file mode 100644
index fb56bb68bb..0000000000
--- a/libical/zoneinfo/America/Indiana/Marengo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Indiana/Marengo
-X-LIC-LOCATION:America/Indiana/Marengo
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Indiana/Vevay.ics b/libical/zoneinfo/America/Indiana/Vevay.ics
deleted file mode 100644
index eb9afbd5b1..0000000000
--- a/libical/zoneinfo/America/Indiana/Vevay.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Indiana/Vevay
-X-LIC-LOCATION:America/Indiana/Vevay
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Indianapolis.ics b/libical/zoneinfo/America/Indianapolis.ics
deleted file mode 100644
index 393ef71296..0000000000
--- a/libical/zoneinfo/America/Indianapolis.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Indianapolis
-X-LIC-LOCATION:America/Indianapolis
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Inuvik.ics b/libical/zoneinfo/America/Inuvik.ics
deleted file mode 100644
index 0b746a73b8..0000000000
--- a/libical/zoneinfo/America/Inuvik.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Inuvik
-X-LIC-LOCATION:America/Inuvik
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Iqaluit.ics b/libical/zoneinfo/America/Iqaluit.ics
deleted file mode 100644
index a9a849709f..0000000000
--- a/libical/zoneinfo/America/Iqaluit.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Iqaluit
-X-LIC-LOCATION:America/Iqaluit
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Jamaica.ics b/libical/zoneinfo/America/Jamaica.ics
deleted file mode 100644
index 3b47dec08b..0000000000
--- a/libical/zoneinfo/America/Jamaica.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Jamaica
-X-LIC-LOCATION:America/Jamaica
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Jujuy.ics b/libical/zoneinfo/America/Jujuy.ics
deleted file mode 100644
index ebfb931d2a..0000000000
--- a/libical/zoneinfo/America/Jujuy.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Jujuy
-X-LIC-LOCATION:America/Jujuy
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Juneau.ics b/libical/zoneinfo/America/Juneau.ics
deleted file mode 100644
index 9e3c65153e..0000000000
--- a/libical/zoneinfo/America/Juneau.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Juneau
-X-LIC-LOCATION:America/Juneau
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Kentucky/Louisville.ics b/libical/zoneinfo/America/Kentucky/Louisville.ics
deleted file mode 100644
index ddf7aef939..0000000000
--- a/libical/zoneinfo/America/Kentucky/Louisville.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Kentucky/Louisville
-X-LIC-LOCATION:America/Kentucky/Louisville
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Kentucky/Monticello.ics b/libical/zoneinfo/America/Kentucky/Monticello.ics
deleted file mode 100644
index 02e21276c9..0000000000
--- a/libical/zoneinfo/America/Kentucky/Monticello.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Kentucky/Monticello
-X-LIC-LOCATION:America/Kentucky/Monticello
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/La_Paz.ics b/libical/zoneinfo/America/La_Paz.ics
deleted file mode 100644
index 7bf54edd30..0000000000
--- a/libical/zoneinfo/America/La_Paz.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/La_Paz
-X-LIC-LOCATION:America/La_Paz
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:BOT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Lima.ics b/libical/zoneinfo/America/Lima.ics
deleted file mode 100644
index 4dad17ba16..0000000000
--- a/libical/zoneinfo/America/Lima.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Lima
-X-LIC-LOCATION:America/Lima
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:PET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Los_Angeles.ics b/libical/zoneinfo/America/Los_Angeles.ics
deleted file mode 100644
index 2a9fb2a8d3..0000000000
--- a/libical/zoneinfo/America/Los_Angeles.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Los_Angeles
-X-LIC-LOCATION:America/Los_Angeles
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Louisville.ics b/libical/zoneinfo/America/Louisville.ics
deleted file mode 100644
index 4dff88643f..0000000000
--- a/libical/zoneinfo/America/Louisville.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Louisville
-X-LIC-LOCATION:America/Louisville
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Maceio.ics b/libical/zoneinfo/America/Maceio.ics
deleted file mode 100644
index ee358782de..0000000000
--- a/libical/zoneinfo/America/Maceio.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Maceio
-X-LIC-LOCATION:America/Maceio
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Managua.ics b/libical/zoneinfo/America/Managua.ics
deleted file mode 100644
index 41f614f8bf..0000000000
--- a/libical/zoneinfo/America/Managua.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Managua
-X-LIC-LOCATION:America/Managua
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Manaus.ics b/libical/zoneinfo/America/Manaus.ics
deleted file mode 100644
index 5a0c53f969..0000000000
--- a/libical/zoneinfo/America/Manaus.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Manaus
-X-LIC-LOCATION:America/Manaus
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Martinique.ics b/libical/zoneinfo/America/Martinique.ics
deleted file mode 100644
index ae259351f9..0000000000
--- a/libical/zoneinfo/America/Martinique.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Martinique
-X-LIC-LOCATION:America/Martinique
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Mazatlan.ics b/libical/zoneinfo/America/Mazatlan.ics
deleted file mode 100644
index a98207999a..0000000000
--- a/libical/zoneinfo/America/Mazatlan.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Mazatlan
-X-LIC-LOCATION:America/Mazatlan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Mendoza.ics b/libical/zoneinfo/America/Mendoza.ics
deleted file mode 100644
index e2a2e33f2f..0000000000
--- a/libical/zoneinfo/America/Mendoza.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Mendoza
-X-LIC-LOCATION:America/Mendoza
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Menominee.ics b/libical/zoneinfo/America/Menominee.ics
deleted file mode 100644
index e86d668237..0000000000
--- a/libical/zoneinfo/America/Menominee.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Menominee
-X-LIC-LOCATION:America/Menominee
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Merida.ics b/libical/zoneinfo/America/Merida.ics
deleted file mode 100644
index f751d6d566..0000000000
--- a/libical/zoneinfo/America/Merida.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Merida
-X-LIC-LOCATION:America/Merida
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Mexico_City.ics b/libical/zoneinfo/America/Mexico_City.ics
deleted file mode 100644
index 52b5c02342..0000000000
--- a/libical/zoneinfo/America/Mexico_City.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Mexico_City
-X-LIC-LOCATION:America/Mexico_City
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Miquelon.ics b/libical/zoneinfo/America/Miquelon.ics
deleted file mode 100644
index 315e7f86fd..0000000000
--- a/libical/zoneinfo/America/Miquelon.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Miquelon
-X-LIC-LOCATION:America/Miquelon
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:PMST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:PMDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Monterrey.ics b/libical/zoneinfo/America/Monterrey.ics
deleted file mode 100644
index 79d6da029a..0000000000
--- a/libical/zoneinfo/America/Monterrey.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Monterrey
-X-LIC-LOCATION:America/Monterrey
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Montevideo.ics b/libical/zoneinfo/America/Montevideo.ics
deleted file mode 100644
index 377f7f9d33..0000000000
--- a/libical/zoneinfo/America/Montevideo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Montevideo
-X-LIC-LOCATION:America/Montevideo
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:UYT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Montreal.ics b/libical/zoneinfo/America/Montreal.ics
deleted file mode 100644
index 4a00cb53d0..0000000000
--- a/libical/zoneinfo/America/Montreal.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Montreal
-X-LIC-LOCATION:America/Montreal
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Montserrat.ics b/libical/zoneinfo/America/Montserrat.ics
deleted file mode 100644
index 16bc0e52e3..0000000000
--- a/libical/zoneinfo/America/Montserrat.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Montserrat
-X-LIC-LOCATION:America/Montserrat
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Nassau.ics b/libical/zoneinfo/America/Nassau.ics
deleted file mode 100644
index d94ba74010..0000000000
--- a/libical/zoneinfo/America/Nassau.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Nassau
-X-LIC-LOCATION:America/Nassau
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/New_York.ics b/libical/zoneinfo/America/New_York.ics
deleted file mode 100644
index 65c5dd14e9..0000000000
--- a/libical/zoneinfo/America/New_York.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/New_York
-X-LIC-LOCATION:America/New_York
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Nipigon.ics b/libical/zoneinfo/America/Nipigon.ics
deleted file mode 100644
index 7605b6a62d..0000000000
--- a/libical/zoneinfo/America/Nipigon.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Nipigon
-X-LIC-LOCATION:America/Nipigon
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Nome.ics b/libical/zoneinfo/America/Nome.ics
deleted file mode 100644
index 1e6306a7dd..0000000000
--- a/libical/zoneinfo/America/Nome.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Nome
-X-LIC-LOCATION:America/Nome
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Noronha.ics b/libical/zoneinfo/America/Noronha.ics
deleted file mode 100644
index 47fe40ca81..0000000000
--- a/libical/zoneinfo/America/Noronha.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Noronha
-X-LIC-LOCATION:America/Noronha
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/North_Dakota/Center.ics b/libical/zoneinfo/America/North_Dakota/Center.ics
deleted file mode 100644
index 45b40b4259..0000000000
--- a/libical/zoneinfo/America/North_Dakota/Center.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_2/America/North_Dakota/Center
-X-LIC-LOCATION:America/North_Dakota/Center
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Panama.ics b/libical/zoneinfo/America/Panama.ics
deleted file mode 100644
index 4888e946c4..0000000000
--- a/libical/zoneinfo/America/Panama.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Panama
-X-LIC-LOCATION:America/Panama
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Pangnirtung.ics b/libical/zoneinfo/America/Pangnirtung.ics
deleted file mode 100644
index 2dcc7cd976..0000000000
--- a/libical/zoneinfo/America/Pangnirtung.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Pangnirtung
-X-LIC-LOCATION:America/Pangnirtung
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Paramaribo.ics b/libical/zoneinfo/America/Paramaribo.ics
deleted file mode 100644
index ad549c2c2c..0000000000
--- a/libical/zoneinfo/America/Paramaribo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Paramaribo
-X-LIC-LOCATION:America/Paramaribo
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:SRT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Phoenix.ics b/libical/zoneinfo/America/Phoenix.ics
deleted file mode 100644
index 4983ccb234..0000000000
--- a/libical/zoneinfo/America/Phoenix.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Phoenix
-X-LIC-LOCATION:America/Phoenix
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Port-au-Prince.ics b/libical/zoneinfo/America/Port-au-Prince.ics
deleted file mode 100644
index 18df6f958b..0000000000
--- a/libical/zoneinfo/America/Port-au-Prince.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Port-au-Prince
-X-LIC-LOCATION:America/Port-au-Prince
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Port_of_Spain.ics b/libical/zoneinfo/America/Port_of_Spain.ics
deleted file mode 100644
index 6c5deb5e51..0000000000
--- a/libical/zoneinfo/America/Port_of_Spain.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Port_of_Spain
-X-LIC-LOCATION:America/Port_of_Spain
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Porto_Velho.ics b/libical/zoneinfo/America/Porto_Velho.ics
deleted file mode 100644
index 9671656ba1..0000000000
--- a/libical/zoneinfo/America/Porto_Velho.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Porto_Velho
-X-LIC-LOCATION:America/Porto_Velho
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Puerto_Rico.ics b/libical/zoneinfo/America/Puerto_Rico.ics
deleted file mode 100644
index dd808912eb..0000000000
--- a/libical/zoneinfo/America/Puerto_Rico.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Puerto_Rico
-X-LIC-LOCATION:America/Puerto_Rico
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Rainy_River.ics b/libical/zoneinfo/America/Rainy_River.ics
deleted file mode 100644
index 4d1b919bf5..0000000000
--- a/libical/zoneinfo/America/Rainy_River.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Rainy_River
-X-LIC-LOCATION:America/Rainy_River
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Rankin_Inlet.ics b/libical/zoneinfo/America/Rankin_Inlet.ics
deleted file mode 100644
index 16e300de51..0000000000
--- a/libical/zoneinfo/America/Rankin_Inlet.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Rankin_Inlet
-X-LIC-LOCATION:America/Rankin_Inlet
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Recife.ics b/libical/zoneinfo/America/Recife.ics
deleted file mode 100644
index 5e87489847..0000000000
--- a/libical/zoneinfo/America/Recife.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Recife
-X-LIC-LOCATION:America/Recife
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Regina.ics b/libical/zoneinfo/America/Regina.ics
deleted file mode 100644
index 39d6b798f4..0000000000
--- a/libical/zoneinfo/America/Regina.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Regina
-X-LIC-LOCATION:America/Regina
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Rio_Branco.ics b/libical/zoneinfo/America/Rio_Branco.ics
deleted file mode 100644
index 602cb052a6..0000000000
--- a/libical/zoneinfo/America/Rio_Branco.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Rio_Branco
-X-LIC-LOCATION:America/Rio_Branco
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Rosario.ics b/libical/zoneinfo/America/Rosario.ics
deleted file mode 100644
index 4c40308c60..0000000000
--- a/libical/zoneinfo/America/Rosario.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Rosario
-X-LIC-LOCATION:America/Rosario
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Santiago.ics b/libical/zoneinfo/America/Santiago.ics
deleted file mode 100644
index 6db0e94976..0000000000
--- a/libical/zoneinfo/America/Santiago.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Santiago
-X-LIC-LOCATION:America/Santiago
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19700315T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Santo_Domingo.ics b/libical/zoneinfo/America/Santo_Domingo.ics
deleted file mode 100644
index 028940d5ef..0000000000
--- a/libical/zoneinfo/America/Santo_Domingo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Santo_Domingo
-X-LIC-LOCATION:America/Santo_Domingo
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Sao_Paulo.ics b/libical/zoneinfo/America/Sao_Paulo.ics
deleted file mode 100644
index f1fef9de77..0000000000
--- a/libical/zoneinfo/America/Sao_Paulo.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Sao_Paulo
-X-LIC-LOCATION:America/Sao_Paulo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19700215T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Scoresbysund.ics b/libical/zoneinfo/America/Scoresbysund.ics
deleted file mode 100644
index 38a98e7dc1..0000000000
--- a/libical/zoneinfo/America/Scoresbysund.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Scoresbysund
-X-LIC-LOCATION:America/Scoresbysund
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:EGST
-DTSTART:19700329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:EGT
-DTSTART:19701025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Shiprock.ics b/libical/zoneinfo/America/Shiprock.ics
deleted file mode 100644
index 66b658270e..0000000000
--- a/libical/zoneinfo/America/Shiprock.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Shiprock
-X-LIC-LOCATION:America/Shiprock
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/St_Johns.ics b/libical/zoneinfo/America/St_Johns.ics
deleted file mode 100644
index 8fbf3f0ded..0000000000
--- a/libical/zoneinfo/America/St_Johns.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/St_Johns
-X-LIC-LOCATION:America/St_Johns
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19700405T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19701025T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/St_Kitts.ics b/libical/zoneinfo/America/St_Kitts.ics
deleted file mode 100644
index 28a7abdbd8..0000000000
--- a/libical/zoneinfo/America/St_Kitts.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/St_Kitts
-X-LIC-LOCATION:America/St_Kitts
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/St_Lucia.ics b/libical/zoneinfo/America/St_Lucia.ics
deleted file mode 100644
index 7cb74ad5a7..0000000000
--- a/libical/zoneinfo/America/St_Lucia.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/St_Lucia
-X-LIC-LOCATION:America/St_Lucia
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/St_Thomas.ics b/libical/zoneinfo/America/St_Thomas.ics
deleted file mode 100644
index cb25228e24..0000000000
--- a/libical/zoneinfo/America/St_Thomas.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/St_Thomas
-X-LIC-LOCATION:America/St_Thomas
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/St_Vincent.ics b/libical/zoneinfo/America/St_Vincent.ics
deleted file mode 100644
index e6a576df27..0000000000
--- a/libical/zoneinfo/America/St_Vincent.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/St_Vincent
-X-LIC-LOCATION:America/St_Vincent
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Swift_Current.ics b/libical/zoneinfo/America/Swift_Current.ics
deleted file mode 100644
index e30cf9719e..0000000000
--- a/libical/zoneinfo/America/Swift_Current.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Swift_Current
-X-LIC-LOCATION:America/Swift_Current
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Tegucigalpa.ics b/libical/zoneinfo/America/Tegucigalpa.ics
deleted file mode 100644
index 0fe1f166e4..0000000000
--- a/libical/zoneinfo/America/Tegucigalpa.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Tegucigalpa
-X-LIC-LOCATION:America/Tegucigalpa
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Thule.ics b/libical/zoneinfo/America/Thule.ics
deleted file mode 100644
index a0674efe38..0000000000
--- a/libical/zoneinfo/America/Thule.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/America/Thule
-X-LIC-LOCATION:America/Thule
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Thunder_Bay.ics b/libical/zoneinfo/America/Thunder_Bay.ics
deleted file mode 100644
index f32f60b2b5..0000000000
--- a/libical/zoneinfo/America/Thunder_Bay.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Thunder_Bay
-X-LIC-LOCATION:America/Thunder_Bay
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Tijuana.ics b/libical/zoneinfo/America/Tijuana.ics
deleted file mode 100644
index 68e7268b79..0000000000
--- a/libical/zoneinfo/America/Tijuana.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Tijuana
-X-LIC-LOCATION:America/Tijuana
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Tortola.ics b/libical/zoneinfo/America/Tortola.ics
deleted file mode 100644
index d8ac5558e2..0000000000
--- a/libical/zoneinfo/America/Tortola.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/America/Tortola
-X-LIC-LOCATION:America/Tortola
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Vancouver.ics b/libical/zoneinfo/America/Vancouver.ics
deleted file mode 100644
index 6173ce4c05..0000000000
--- a/libical/zoneinfo/America/Vancouver.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Vancouver
-X-LIC-LOCATION:America/Vancouver
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Whitehorse.ics b/libical/zoneinfo/America/Whitehorse.ics
deleted file mode 100644
index d8bb411842..0000000000
--- a/libical/zoneinfo/America/Whitehorse.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Whitehorse
-X-LIC-LOCATION:America/Whitehorse
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Winnipeg.ics b/libical/zoneinfo/America/Winnipeg.ics
deleted file mode 100644
index 2d49a667fa..0000000000
--- a/libical/zoneinfo/America/Winnipeg.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Winnipeg
-X-LIC-LOCATION:America/Winnipeg
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Yakutat.ics b/libical/zoneinfo/America/Yakutat.ics
deleted file mode 100644
index 9beccdf685..0000000000
--- a/libical/zoneinfo/America/Yakutat.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Yakutat
-X-LIC-LOCATION:America/Yakutat
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/America/Yellowknife.ics b/libical/zoneinfo/America/Yellowknife.ics
deleted file mode 100644
index b65fcbfae4..0000000000
--- a/libical/zoneinfo/America/Yellowknife.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/America/Yellowknife
-X-LIC-LOCATION:America/Yellowknife
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Casey.ics b/libical/zoneinfo/Antarctica/Casey.ics
deleted file mode 100644
index e59048da6a..0000000000
--- a/libical/zoneinfo/Antarctica/Casey.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Antarctica/Casey
-X-LIC-LOCATION:Antarctica/Casey
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:WST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Davis.ics b/libical/zoneinfo/Antarctica/Davis.ics
deleted file mode 100644
index e14b6f1d22..0000000000
--- a/libical/zoneinfo/Antarctica/Davis.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Antarctica/Davis
-X-LIC-LOCATION:Antarctica/Davis
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:DAVT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/DumontDUrville.ics b/libical/zoneinfo/Antarctica/DumontDUrville.ics
deleted file mode 100644
index f80c873c42..0000000000
--- a/libical/zoneinfo/Antarctica/DumontDUrville.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Antarctica/DumontDUrville
-X-LIC-LOCATION:Antarctica/DumontDUrville
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:DDUT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Mawson.ics b/libical/zoneinfo/Antarctica/Mawson.ics
deleted file mode 100644
index 72550a0753..0000000000
--- a/libical/zoneinfo/Antarctica/Mawson.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Antarctica/Mawson
-X-LIC-LOCATION:Antarctica/Mawson
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:MAWT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/McMurdo.ics b/libical/zoneinfo/Antarctica/McMurdo.ics
deleted file mode 100644
index 1fadf8c5c9..0000000000
--- a/libical/zoneinfo/Antarctica/McMurdo.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Antarctica/McMurdo
-X-LIC-LOCATION:Antarctica/McMurdo
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19700315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19701004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Palmer.ics b/libical/zoneinfo/Antarctica/Palmer.ics
deleted file mode 100644
index 5134760c01..0000000000
--- a/libical/zoneinfo/Antarctica/Palmer.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Antarctica/Palmer
-X-LIC-LOCATION:Antarctica/Palmer
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19700315T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/South_Pole.ics b/libical/zoneinfo/Antarctica/South_Pole.ics
deleted file mode 100644
index f72cc8d854..0000000000
--- a/libical/zoneinfo/Antarctica/South_Pole.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Antarctica/South_Pole
-X-LIC-LOCATION:Antarctica/South_Pole
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19700315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19701004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Syowa.ics b/libical/zoneinfo/Antarctica/Syowa.ics
deleted file mode 100644
index 537a50f4d1..0000000000
--- a/libical/zoneinfo/Antarctica/Syowa.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Antarctica/Syowa
-X-LIC-LOCATION:Antarctica/Syowa
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:SYOT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Antarctica/Vostok.ics b/libical/zoneinfo/Antarctica/Vostok.ics
deleted file mode 100644
index 7d27fbdc10..0000000000
--- a/libical/zoneinfo/Antarctica/Vostok.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Antarctica/Vostok
-X-LIC-LOCATION:Antarctica/Vostok
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:VOST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Arctic/Longyearbyen.ics b/libical/zoneinfo/Arctic/Longyearbyen.ics
deleted file mode 100644
index eaaeb214e9..0000000000
--- a/libical/zoneinfo/Arctic/Longyearbyen.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Arctic/Longyearbyen
-X-LIC-LOCATION:Arctic/Longyearbyen
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Aden.ics b/libical/zoneinfo/Asia/Aden.ics
deleted file mode 100644
index e886859b81..0000000000
--- a/libical/zoneinfo/Asia/Aden.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Asia/Aden
-X-LIC-LOCATION:Asia/Aden
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Almaty.ics b/libical/zoneinfo/Asia/Almaty.ics
deleted file mode 100644
index 86caa3e295..0000000000
--- a/libical/zoneinfo/Asia/Almaty.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Asia/Almaty
-X-LIC-LOCATION:Asia/Almaty
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:ALMST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Amman.ics b/libical/zoneinfo/Asia/Amman.ics
deleted file mode 100644
index 7078aeaf32..0000000000
--- a/libical/zoneinfo/Asia/Amman.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Amman
-X-LIC-LOCATION:Asia/Amman
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19700924T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700326T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Anadyr.ics b/libical/zoneinfo/Asia/Anadyr.ics
deleted file mode 100644
index 660b7e900a..0000000000
--- a/libical/zoneinfo/Asia/Anadyr.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Anadyr
-X-LIC-LOCATION:Asia/Anadyr
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
-TZNAME:ANAST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Aqtau.ics b/libical/zoneinfo/Asia/Aqtau.ics
deleted file mode 100644
index f4da2bbdff..0000000000
--- a/libical/zoneinfo/Asia/Aqtau.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Asia/Aqtau
-X-LIC-LOCATION:Asia/Aqtau
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AQTST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:AQTT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Aqtobe.ics b/libical/zoneinfo/Asia/Aqtobe.ics
deleted file mode 100644
index 1c1e29a2d1..0000000000
--- a/libical/zoneinfo/Asia/Aqtobe.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Asia/Aqtobe
-X-LIC-LOCATION:Asia/Aqtobe
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:AQTST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:AQTT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Ashgabat.ics b/libical/zoneinfo/Asia/Ashgabat.ics
deleted file mode 100644
index 0238843de9..0000000000
--- a/libical/zoneinfo/Asia/Ashgabat.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Ashgabat
-X-LIC-LOCATION:Asia/Ashgabat
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:TMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Baghdad.ics b/libical/zoneinfo/Asia/Baghdad.ics
deleted file mode 100644
index f64c7e3bb3..0000000000
--- a/libical/zoneinfo/Asia/Baghdad.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Baghdad
-X-LIC-LOCATION:Asia/Baghdad
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:ADT
-DTSTART:19700401T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19701001T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Bahrain.ics b/libical/zoneinfo/Asia/Bahrain.ics
deleted file mode 100644
index e76aa520b1..0000000000
--- a/libical/zoneinfo/Asia/Bahrain.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Bahrain
-X-LIC-LOCATION:Asia/Bahrain
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Baku.ics b/libical/zoneinfo/Asia/Baku.ics
deleted file mode 100644
index 520060956e..0000000000
--- a/libical/zoneinfo/Asia/Baku.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Baku
-X-LIC-LOCATION:Asia/Baku
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AZST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:AZT
-DTSTART:19701025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Bangkok.ics b/libical/zoneinfo/Asia/Bangkok.ics
deleted file mode 100644
index 9ebeb3fe7b..0000000000
--- a/libical/zoneinfo/Asia/Bangkok.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Bangkok
-X-LIC-LOCATION:Asia/Bangkok
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Beirut.ics b/libical/zoneinfo/Asia/Beirut.ics
deleted file mode 100644
index d9c16f1f86..0000000000
--- a/libical/zoneinfo/Asia/Beirut.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Beirut
-X-LIC-LOCATION:Asia/Beirut
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Bishkek.ics b/libical/zoneinfo/Asia/Bishkek.ics
deleted file mode 100644
index f5427a1eca..0000000000
--- a/libical/zoneinfo/Asia/Bishkek.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Bishkek
-X-LIC-LOCATION:Asia/Bishkek
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:KGST
-DTSTART:19700329T023000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:KGT
-DTSTART:19701025T023000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Brunei.ics b/libical/zoneinfo/Asia/Brunei.ics
deleted file mode 100644
index 4cc8a9dde1..0000000000
--- a/libical/zoneinfo/Asia/Brunei.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Brunei
-X-LIC-LOCATION:Asia/Brunei
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:BNT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Calcutta.ics b/libical/zoneinfo/Asia/Calcutta.ics
deleted file mode 100644
index 21b3e6c390..0000000000
--- a/libical/zoneinfo/Asia/Calcutta.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Calcutta
-X-LIC-LOCATION:Asia/Calcutta
-BEGIN:STANDARD
-TZOFFSETFROM:+0530
-TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Choibalsan.ics b/libical/zoneinfo/Asia/Choibalsan.ics
deleted file mode 100644
index bd0e4502bd..0000000000
--- a/libical/zoneinfo/Asia/Choibalsan.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_2/Asia/Choibalsan
-X-LIC-LOCATION:Asia/Choibalsan
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:CHOT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Chongqing.ics b/libical/zoneinfo/Asia/Chongqing.ics
deleted file mode 100644
index f98b6872d4..0000000000
--- a/libical/zoneinfo/Asia/Chongqing.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_2/Asia/Chongqing
-X-LIC-LOCATION:Asia/Chongqing
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Chungking.ics b/libical/zoneinfo/Asia/Chungking.ics
deleted file mode 100644
index f093f4cc10..0000000000
--- a/libical/zoneinfo/Asia/Chungking.ics
+++ /dev/null
@@ -1,46 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20010831_3/Asia/Chungking
-X-LIC-LOCATION:Asia/Chungking
-BEGIN:STANDARD
-TZOFFSETFROM:+0706
-TZOFFSETTO:+0700
-TZNAME:CHUT
-DTSTART:19280101T000000
-RDATE:19280101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800501T000000
-RDATE:19800501T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
-RDATE:19870412T000000
-RDATE:19880410T000000
-RDATE:19890416T000000
-RDATE:19900415T000000
-RDATE:19910414T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RDATE:19860914T000000
-RDATE:19870913T000000
-RDATE:19880911T000000
-RDATE:19890917T000000
-RDATE:19900916T000000
-RDATE:19910915T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Colombo.ics b/libical/zoneinfo/Asia/Colombo.ics
deleted file mode 100644
index 9595517df3..0000000000
--- a/libical/zoneinfo/Asia/Colombo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Colombo
-X-LIC-LOCATION:Asia/Colombo
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:LKT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Damascus.ics b/libical/zoneinfo/Asia/Damascus.ics
deleted file mode 100644
index 42f808b839..0000000000
--- a/libical/zoneinfo/Asia/Damascus.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Damascus
-X-LIC-LOCATION:Asia/Damascus
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700401T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Dhaka.ics b/libical/zoneinfo/Asia/Dhaka.ics
deleted file mode 100644
index 1f0a43d433..0000000000
--- a/libical/zoneinfo/Asia/Dhaka.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Dhaka
-X-LIC-LOCATION:Asia/Dhaka
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:BDT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Dili.ics b/libical/zoneinfo/Asia/Dili.ics
deleted file mode 100644
index 7777dd3c20..0000000000
--- a/libical/zoneinfo/Asia/Dili.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Dili
-X-LIC-LOCATION:Asia/Dili
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:TPT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Dubai.ics b/libical/zoneinfo/Asia/Dubai.ics
deleted file mode 100644
index 334683ca62..0000000000
--- a/libical/zoneinfo/Asia/Dubai.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Asia/Dubai
-X-LIC-LOCATION:Asia/Dubai
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Dushanbe.ics b/libical/zoneinfo/Asia/Dushanbe.ics
deleted file mode 100644
index eed13ce5f9..0000000000
--- a/libical/zoneinfo/Asia/Dushanbe.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Dushanbe
-X-LIC-LOCATION:Asia/Dushanbe
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:TJT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Gaza.ics b/libical/zoneinfo/Asia/Gaza.ics
deleted file mode 100644
index 3b9392dfe5..0000000000
--- a/libical/zoneinfo/Asia/Gaza.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Gaza
-X-LIC-LOCATION:Asia/Gaza
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700417T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3FR
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701016T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3FR
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Harbin.ics b/libical/zoneinfo/Asia/Harbin.ics
deleted file mode 100644
index ebdfbec423..0000000000
--- a/libical/zoneinfo/Asia/Harbin.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Harbin
-X-LIC-LOCATION:Asia/Harbin
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Hong_Kong.ics b/libical/zoneinfo/Asia/Hong_Kong.ics
deleted file mode 100644
index 6418d9c243..0000000000
--- a/libical/zoneinfo/Asia/Hong_Kong.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Hong_Kong
-X-LIC-LOCATION:Asia/Hong_Kong
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Hovd.ics b/libical/zoneinfo/Asia/Hovd.ics
deleted file mode 100644
index 1b93f77b26..0000000000
--- a/libical/zoneinfo/Asia/Hovd.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Hovd
-X-LIC-LOCATION:Asia/Hovd
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:HOVT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Irkutsk.ics b/libical/zoneinfo/Asia/Irkutsk.ics
deleted file mode 100644
index 30f0398a18..0000000000
--- a/libical/zoneinfo/Asia/Irkutsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Irkutsk
-X-LIC-LOCATION:Asia/Irkutsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:IRKST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:IRKT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Istanbul.ics b/libical/zoneinfo/Asia/Istanbul.ics
deleted file mode 100644
index 0c376c11c0..0000000000
--- a/libical/zoneinfo/Asia/Istanbul.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Istanbul
-X-LIC-LOCATION:Asia/Istanbul
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Jakarta.ics b/libical/zoneinfo/Asia/Jakarta.ics
deleted file mode 100644
index a62428cb45..0000000000
--- a/libical/zoneinfo/Asia/Jakarta.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Jakarta
-X-LIC-LOCATION:Asia/Jakarta
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:WIT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Jayapura.ics b/libical/zoneinfo/Asia/Jayapura.ics
deleted file mode 100644
index 90e17d824a..0000000000
--- a/libical/zoneinfo/Asia/Jayapura.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Jayapura
-X-LIC-LOCATION:Asia/Jayapura
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:EIT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Jerusalem.ics b/libical/zoneinfo/Asia/Jerusalem.ics
deleted file mode 100644
index 3beb623568..0000000000
--- a/libical/zoneinfo/Asia/Jerusalem.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Jerusalem
-X-LIC-LOCATION:Asia/Jerusalem
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:19700401T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19701001T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kabul.ics b/libical/zoneinfo/Asia/Kabul.ics
deleted file mode 100644
index d11e171955..0000000000
--- a/libical/zoneinfo/Asia/Kabul.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Kabul
-X-LIC-LOCATION:Asia/Kabul
-BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0430
-TZNAME:AFT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kamchatka.ics b/libical/zoneinfo/Asia/Kamchatka.ics
deleted file mode 100644
index f860dd1ce2..0000000000
--- a/libical/zoneinfo/Asia/Kamchatka.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Kamchatka
-X-LIC-LOCATION:Asia/Kamchatka
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
-TZNAME:PETST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Karachi.ics b/libical/zoneinfo/Asia/Karachi.ics
deleted file mode 100644
index c0d3081094..0000000000
--- a/libical/zoneinfo/Asia/Karachi.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Asia/Karachi
-X-LIC-LOCATION:Asia/Karachi
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:PKST
-DTSTART:19700405T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:PKT
-DTSTART:19701015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kashgar.ics b/libical/zoneinfo/Asia/Kashgar.ics
deleted file mode 100644
index 96fbb748e2..0000000000
--- a/libical/zoneinfo/Asia/Kashgar.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Kashgar
-X-LIC-LOCATION:Asia/Kashgar
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Katmandu.ics b/libical/zoneinfo/Asia/Katmandu.ics
deleted file mode 100644
index 7d9b0084f2..0000000000
--- a/libical/zoneinfo/Asia/Katmandu.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Katmandu
-X-LIC-LOCATION:Asia/Katmandu
-BEGIN:STANDARD
-TZOFFSETFROM:+0545
-TZOFFSETTO:+0545
-TZNAME:NPT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Krasnoyarsk.ics b/libical/zoneinfo/Asia/Krasnoyarsk.ics
deleted file mode 100644
index 6867fb5ba2..0000000000
--- a/libical/zoneinfo/Asia/Krasnoyarsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Krasnoyarsk
-X-LIC-LOCATION:Asia/Krasnoyarsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:KRAST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
-TZNAME:KRAT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kuala_Lumpur.ics b/libical/zoneinfo/Asia/Kuala_Lumpur.ics
deleted file mode 100644
index 115ec3ed7f..0000000000
--- a/libical/zoneinfo/Asia/Kuala_Lumpur.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Kuala_Lumpur
-X-LIC-LOCATION:Asia/Kuala_Lumpur
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:MYT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kuching.ics b/libical/zoneinfo/Asia/Kuching.ics
deleted file mode 100644
index 46cca7b4ba..0000000000
--- a/libical/zoneinfo/Asia/Kuching.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Kuching
-X-LIC-LOCATION:Asia/Kuching
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:MYT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Kuwait.ics b/libical/zoneinfo/Asia/Kuwait.ics
deleted file mode 100644
index 0cd41994f9..0000000000
--- a/libical/zoneinfo/Asia/Kuwait.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Asia/Kuwait
-X-LIC-LOCATION:Asia/Kuwait
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Macao.ics b/libical/zoneinfo/Asia/Macao.ics
deleted file mode 100644
index a7b1fb6a17..0000000000
--- a/libical/zoneinfo/Asia/Macao.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Macao
-X-LIC-LOCATION:Asia/Macao
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Magadan.ics b/libical/zoneinfo/Asia/Magadan.ics
deleted file mode 100644
index 28b4628da6..0000000000
--- a/libical/zoneinfo/Asia/Magadan.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Magadan
-X-LIC-LOCATION:Asia/Magadan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
-TZNAME:MAGST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1100
-TZNAME:MAGT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Manila.ics b/libical/zoneinfo/Asia/Manila.ics
deleted file mode 100644
index 1678165ba1..0000000000
--- a/libical/zoneinfo/Asia/Manila.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Manila
-X-LIC-LOCATION:Asia/Manila
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:PHT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Muscat.ics b/libical/zoneinfo/Asia/Muscat.ics
deleted file mode 100644
index 456a682a43..0000000000
--- a/libical/zoneinfo/Asia/Muscat.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Asia/Muscat
-X-LIC-LOCATION:Asia/Muscat
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Nicosia.ics b/libical/zoneinfo/Asia/Nicosia.ics
deleted file mode 100644
index 801ec2d038..0000000000
--- a/libical/zoneinfo/Asia/Nicosia.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Nicosia
-X-LIC-LOCATION:Asia/Nicosia
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Novosibirsk.ics b/libical/zoneinfo/Asia/Novosibirsk.ics
deleted file mode 100644
index a3a8bd00b0..0000000000
--- a/libical/zoneinfo/Asia/Novosibirsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Novosibirsk
-X-LIC-LOCATION:Asia/Novosibirsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:NOVST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
-TZNAME:NOVT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Omsk.ics b/libical/zoneinfo/Asia/Omsk.ics
deleted file mode 100644
index 1a5082cdc2..0000000000
--- a/libical/zoneinfo/Asia/Omsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Omsk
-X-LIC-LOCATION:Asia/Omsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:OMSST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
-TZNAME:OMST
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Phnom_Penh.ics b/libical/zoneinfo/Asia/Phnom_Penh.ics
deleted file mode 100644
index 834e866cb0..0000000000
--- a/libical/zoneinfo/Asia/Phnom_Penh.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Phnom_Penh
-X-LIC-LOCATION:Asia/Phnom_Penh
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Pontianak.ics b/libical/zoneinfo/Asia/Pontianak.ics
deleted file mode 100644
index ca942e683c..0000000000
--- a/libical/zoneinfo/Asia/Pontianak.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Pontianak
-X-LIC-LOCATION:Asia/Pontianak
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:WIT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Pyongyang.ics b/libical/zoneinfo/Asia/Pyongyang.ics
deleted file mode 100644
index 36ca7cf05b..0000000000
--- a/libical/zoneinfo/Asia/Pyongyang.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Pyongyang
-X-LIC-LOCATION:Asia/Pyongyang
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:KST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Qatar.ics b/libical/zoneinfo/Asia/Qatar.ics
deleted file mode 100644
index 5693076344..0000000000
--- a/libical/zoneinfo/Asia/Qatar.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Qatar
-X-LIC-LOCATION:Asia/Qatar
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Rangoon.ics b/libical/zoneinfo/Asia/Rangoon.ics
deleted file mode 100644
index b6fd62e4b4..0000000000
--- a/libical/zoneinfo/Asia/Rangoon.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Rangoon
-X-LIC-LOCATION:Asia/Rangoon
-BEGIN:STANDARD
-TZOFFSETFROM:+0630
-TZOFFSETTO:+0630
-TZNAME:MMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Riyadh.ics b/libical/zoneinfo/Asia/Riyadh.ics
deleted file mode 100644
index 905f6045c7..0000000000
--- a/libical/zoneinfo/Asia/Riyadh.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Asia/Riyadh
-X-LIC-LOCATION:Asia/Riyadh
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Saigon.ics b/libical/zoneinfo/Asia/Saigon.ics
deleted file mode 100644
index 6dfda17fe7..0000000000
--- a/libical/zoneinfo/Asia/Saigon.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Saigon
-X-LIC-LOCATION:Asia/Saigon
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Sakhalin.ics b/libical/zoneinfo/Asia/Sakhalin.ics
deleted file mode 100644
index e5aedabf3c..0000000000
--- a/libical/zoneinfo/Asia/Sakhalin.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_2/Asia/Sakhalin
-X-LIC-LOCATION:Asia/Sakhalin
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:SAKT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:SAKST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Samarkand.ics b/libical/zoneinfo/Asia/Samarkand.ics
deleted file mode 100644
index 7e8e385055..0000000000
--- a/libical/zoneinfo/Asia/Samarkand.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Samarkand
-X-LIC-LOCATION:Asia/Samarkand
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Seoul.ics b/libical/zoneinfo/Asia/Seoul.ics
deleted file mode 100644
index eacdbbe3cc..0000000000
--- a/libical/zoneinfo/Asia/Seoul.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Seoul
-X-LIC-LOCATION:Asia/Seoul
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:KST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Shanghai.ics b/libical/zoneinfo/Asia/Shanghai.ics
deleted file mode 100644
index 96f86b0985..0000000000
--- a/libical/zoneinfo/Asia/Shanghai.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Shanghai
-X-LIC-LOCATION:Asia/Shanghai
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Singapore.ics b/libical/zoneinfo/Asia/Singapore.ics
deleted file mode 100644
index 08b6392719..0000000000
--- a/libical/zoneinfo/Asia/Singapore.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Singapore
-X-LIC-LOCATION:Asia/Singapore
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:SGT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Taipei.ics b/libical/zoneinfo/Asia/Taipei.ics
deleted file mode 100644
index dfc9a539bf..0000000000
--- a/libical/zoneinfo/Asia/Taipei.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Taipei
-X-LIC-LOCATION:Asia/Taipei
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Tashkent.ics b/libical/zoneinfo/Asia/Tashkent.ics
deleted file mode 100644
index 14a304a72f..0000000000
--- a/libical/zoneinfo/Asia/Tashkent.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Tashkent
-X-LIC-LOCATION:Asia/Tashkent
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Tbilisi.ics b/libical/zoneinfo/Asia/Tbilisi.ics
deleted file mode 100644
index 95cdd81a73..0000000000
--- a/libical/zoneinfo/Asia/Tbilisi.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Tbilisi
-X-LIC-LOCATION:Asia/Tbilisi
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:GET
-DTSTART:19701025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:GEST
-DTSTART:19700329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Tehran.ics b/libical/zoneinfo/Asia/Tehran.ics
deleted file mode 100644
index f9f00ea0d4..0000000000
--- a/libical/zoneinfo/Asia/Tehran.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Tehran
-X-LIC-LOCATION:Asia/Tehran
-BEGIN:STANDARD
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0330
-TZNAME:IRT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Thimphu.ics b/libical/zoneinfo/Asia/Thimphu.ics
deleted file mode 100644
index 1c1063af38..0000000000
--- a/libical/zoneinfo/Asia/Thimphu.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Thimphu
-X-LIC-LOCATION:Asia/Thimphu
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:BTT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Tokyo.ics b/libical/zoneinfo/Asia/Tokyo.ics
deleted file mode 100644
index 2461b085b6..0000000000
--- a/libical/zoneinfo/Asia/Tokyo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Tokyo
-X-LIC-LOCATION:Asia/Tokyo
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Ujung_Pandang.ics b/libical/zoneinfo/Asia/Ujung_Pandang.ics
deleted file mode 100644
index c596aa654f..0000000000
--- a/libical/zoneinfo/Asia/Ujung_Pandang.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Ujung_Pandang
-X-LIC-LOCATION:Asia/Ujung_Pandang
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Ulaanbaatar.ics b/libical/zoneinfo/Asia/Ulaanbaatar.ics
deleted file mode 100644
index 8945dc7760..0000000000
--- a/libical/zoneinfo/Asia/Ulaanbaatar.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Ulaanbaatar
-X-LIC-LOCATION:Asia/Ulaanbaatar
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Urumqi.ics b/libical/zoneinfo/Asia/Urumqi.ics
deleted file mode 100644
index f2b909f5b2..0000000000
--- a/libical/zoneinfo/Asia/Urumqi.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Urumqi
-X-LIC-LOCATION:Asia/Urumqi
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Vientiane.ics b/libical/zoneinfo/Asia/Vientiane.ics
deleted file mode 100644
index d1e14a5eb4..0000000000
--- a/libical/zoneinfo/Asia/Vientiane.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Vientiane
-X-LIC-LOCATION:Asia/Vientiane
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Vladivostok.ics b/libical/zoneinfo/Asia/Vladivostok.ics
deleted file mode 100644
index 9436d35028..0000000000
--- a/libical/zoneinfo/Asia/Vladivostok.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Vladivostok
-X-LIC-LOCATION:Asia/Vladivostok
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:VLAST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:VLAT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Yakutsk.ics b/libical/zoneinfo/Asia/Yakutsk.ics
deleted file mode 100644
index 1097c26bd8..0000000000
--- a/libical/zoneinfo/Asia/Yakutsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Yakutsk
-X-LIC-LOCATION:Asia/Yakutsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:YAKST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
-TZNAME:YAKT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Yekaterinburg.ics b/libical/zoneinfo/Asia/Yekaterinburg.ics
deleted file mode 100644
index fc34936997..0000000000
--- a/libical/zoneinfo/Asia/Yekaterinburg.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Yekaterinburg
-X-LIC-LOCATION:Asia/Yekaterinburg
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:YEKST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:YEKT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Asia/Yerevan.ics b/libical/zoneinfo/Asia/Yerevan.ics
deleted file mode 100644
index 70e9a9f818..0000000000
--- a/libical/zoneinfo/Asia/Yerevan.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Asia/Yerevan
-X-LIC-LOCATION:Asia/Yerevan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AMST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:AMT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Azores.ics b/libical/zoneinfo/Atlantic/Azores.ics
deleted file mode 100644
index bb7b8055f2..0000000000
--- a/libical/zoneinfo/Atlantic/Azores.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Azores
-X-LIC-LOCATION:Atlantic/Azores
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19700329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19701025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Bermuda.ics b/libical/zoneinfo/Atlantic/Bermuda.ics
deleted file mode 100644
index 9e6d8d153f..0000000000
--- a/libical/zoneinfo/Atlantic/Bermuda.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Bermuda
-X-LIC-LOCATION:Atlantic/Bermuda
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19700405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Canary.ics b/libical/zoneinfo/Atlantic/Canary.ics
deleted file mode 100644
index 0f23c5d4d0..0000000000
--- a/libical/zoneinfo/Atlantic/Canary.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Canary
-X-LIC-LOCATION:Atlantic/Canary
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Cape_Verde.ics b/libical/zoneinfo/Atlantic/Cape_Verde.ics
deleted file mode 100644
index 810ba2a25a..0000000000
--- a/libical/zoneinfo/Atlantic/Cape_Verde.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Cape_Verde
-X-LIC-LOCATION:Atlantic/Cape_Verde
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0100
-TZNAME:CVT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Faeroe.ics b/libical/zoneinfo/Atlantic/Faeroe.ics
deleted file mode 100644
index e3d7dc09cb..0000000000
--- a/libical/zoneinfo/Atlantic/Faeroe.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Faeroe
-X-LIC-LOCATION:Atlantic/Faeroe
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Jan_Mayen.ics b/libical/zoneinfo/Atlantic/Jan_Mayen.ics
deleted file mode 100644
index f62456739d..0000000000
--- a/libical/zoneinfo/Atlantic/Jan_Mayen.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Jan_Mayen
-X-LIC-LOCATION:Atlantic/Jan_Mayen
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Madeira.ics b/libical/zoneinfo/Atlantic/Madeira.ics
deleted file mode 100644
index 69a9e094a6..0000000000
--- a/libical/zoneinfo/Atlantic/Madeira.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Madeira
-X-LIC-LOCATION:Atlantic/Madeira
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Reykjavik.ics b/libical/zoneinfo/Atlantic/Reykjavik.ics
deleted file mode 100644
index 92b234f14b..0000000000
--- a/libical/zoneinfo/Atlantic/Reykjavik.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Reykjavik
-X-LIC-LOCATION:Atlantic/Reykjavik
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/South_Georgia.ics b/libical/zoneinfo/Atlantic/South_Georgia.ics
deleted file mode 100644
index e863c7a38e..0000000000
--- a/libical/zoneinfo/Atlantic/South_Georgia.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Atlantic/South_Georgia
-X-LIC-LOCATION:Atlantic/South_Georgia
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0200
-TZNAME:GST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/St_Helena.ics b/libical/zoneinfo/Atlantic/St_Helena.ics
deleted file mode 100644
index 2b8720a8fa..0000000000
--- a/libical/zoneinfo/Atlantic/St_Helena.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/St_Helena
-X-LIC-LOCATION:Atlantic/St_Helena
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Atlantic/Stanley.ics b/libical/zoneinfo/Atlantic/Stanley.ics
deleted file mode 100644
index 28c1798b30..0000000000
--- a/libical/zoneinfo/Atlantic/Stanley.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Atlantic/Stanley
-X-LIC-LOCATION:Atlantic/Stanley
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:19700419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:FKST
-DTSTART:19700906T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Adelaide.ics b/libical/zoneinfo/Australia/Adelaide.ics
deleted file mode 100644
index cabb09a15a..0000000000
--- a/libical/zoneinfo/Australia/Adelaide.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Adelaide
-X-LIC-LOCATION:Australia/Adelaide
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0930
-TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Brisbane.ics b/libical/zoneinfo/Australia/Brisbane.ics
deleted file mode 100644
index 3bb8d9f2a1..0000000000
--- a/libical/zoneinfo/Australia/Brisbane.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Brisbane
-X-LIC-LOCATION:Australia/Brisbane
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Broken_Hill.ics b/libical/zoneinfo/Australia/Broken_Hill.ics
deleted file mode 100644
index 55a4703de4..0000000000
--- a/libical/zoneinfo/Australia/Broken_Hill.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Broken_Hill
-X-LIC-LOCATION:Australia/Broken_Hill
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0930
-TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Darwin.ics b/libical/zoneinfo/Australia/Darwin.ics
deleted file mode 100644
index 8cd27abeba..0000000000
--- a/libical/zoneinfo/Australia/Darwin.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Darwin
-X-LIC-LOCATION:Australia/Darwin
-BEGIN:STANDARD
-TZOFFSETFROM:+0930
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Hobart.ics b/libical/zoneinfo/Australia/Hobart.ics
deleted file mode 100644
index 5320d0e46e..0000000000
--- a/libical/zoneinfo/Australia/Hobart.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Hobart
-X-LIC-LOCATION:Australia/Hobart
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19701004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Lindeman.ics b/libical/zoneinfo/Australia/Lindeman.ics
deleted file mode 100644
index 2b7bf9d7cb..0000000000
--- a/libical/zoneinfo/Australia/Lindeman.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Lindeman
-X-LIC-LOCATION:Australia/Lindeman
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Lord_Howe.ics b/libical/zoneinfo/Australia/Lord_Howe.ics
deleted file mode 100644
index 14987ad753..0000000000
--- a/libical/zoneinfo/Australia/Lord_Howe.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Lord_Howe
-X-LIC-LOCATION:Australia/Lord_Howe
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1030
-TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Melbourne.ics b/libical/zoneinfo/Australia/Melbourne.ics
deleted file mode 100644
index efe31eaa95..0000000000
--- a/libical/zoneinfo/Australia/Melbourne.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Melbourne
-X-LIC-LOCATION:Australia/Melbourne
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Perth.ics b/libical/zoneinfo/Australia/Perth.ics
deleted file mode 100644
index fcabda1b9f..0000000000
--- a/libical/zoneinfo/Australia/Perth.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Perth
-X-LIC-LOCATION:Australia/Perth
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:WST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Australia/Sydney.ics b/libical/zoneinfo/Australia/Sydney.ics
deleted file mode 100644
index a429f86abe..0000000000
--- a/libical/zoneinfo/Australia/Sydney.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Australia/Sydney
-X-LIC-LOCATION:Australia/Sydney
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Amsterdam.ics b/libical/zoneinfo/Europe/Amsterdam.ics
deleted file mode 100644
index 05b28aaba7..0000000000
--- a/libical/zoneinfo/Europe/Amsterdam.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Amsterdam
-X-LIC-LOCATION:Europe/Amsterdam
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Andorra.ics b/libical/zoneinfo/Europe/Andorra.ics
deleted file mode 100644
index a2fe393bb2..0000000000
--- a/libical/zoneinfo/Europe/Andorra.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Andorra
-X-LIC-LOCATION:Europe/Andorra
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Athens.ics b/libical/zoneinfo/Europe/Athens.ics
deleted file mode 100644
index 09b6ac936c..0000000000
--- a/libical/zoneinfo/Europe/Athens.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Athens
-X-LIC-LOCATION:Europe/Athens
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Belfast.ics b/libical/zoneinfo/Europe/Belfast.ics
deleted file mode 100644
index 087f154ed4..0000000000
--- a/libical/zoneinfo/Europe/Belfast.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Belfast
-X-LIC-LOCATION:Europe/Belfast
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Belgrade.ics b/libical/zoneinfo/Europe/Belgrade.ics
deleted file mode 100644
index 6b2dd4ea76..0000000000
--- a/libical/zoneinfo/Europe/Belgrade.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Belgrade
-X-LIC-LOCATION:Europe/Belgrade
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Berlin.ics b/libical/zoneinfo/Europe/Berlin.ics
deleted file mode 100644
index 9afdbd9846..0000000000
--- a/libical/zoneinfo/Europe/Berlin.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Berlin
-X-LIC-LOCATION:Europe/Berlin
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Bratislava.ics b/libical/zoneinfo/Europe/Bratislava.ics
deleted file mode 100644
index 9fb1c273d4..0000000000
--- a/libical/zoneinfo/Europe/Bratislava.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Bratislava
-X-LIC-LOCATION:Europe/Bratislava
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Brussels.ics b/libical/zoneinfo/Europe/Brussels.ics
deleted file mode 100644
index 0eba1ce3d3..0000000000
--- a/libical/zoneinfo/Europe/Brussels.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Brussels
-X-LIC-LOCATION:Europe/Brussels
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Bucharest.ics b/libical/zoneinfo/Europe/Bucharest.ics
deleted file mode 100644
index 3ab8fda23c..0000000000
--- a/libical/zoneinfo/Europe/Bucharest.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Bucharest
-X-LIC-LOCATION:Europe/Bucharest
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Budapest.ics b/libical/zoneinfo/Europe/Budapest.ics
deleted file mode 100644
index b833c40e52..0000000000
--- a/libical/zoneinfo/Europe/Budapest.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Budapest
-X-LIC-LOCATION:Europe/Budapest
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Chisinau.ics b/libical/zoneinfo/Europe/Chisinau.ics
deleted file mode 100644
index bca537ef16..0000000000
--- a/libical/zoneinfo/Europe/Chisinau.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Chisinau
-X-LIC-LOCATION:Europe/Chisinau
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Copenhagen.ics b/libical/zoneinfo/Europe/Copenhagen.ics
deleted file mode 100644
index 73213c093d..0000000000
--- a/libical/zoneinfo/Europe/Copenhagen.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Copenhagen
-X-LIC-LOCATION:Europe/Copenhagen
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Dublin.ics b/libical/zoneinfo/Europe/Dublin.ics
deleted file mode 100644
index 1380acf9df..0000000000
--- a/libical/zoneinfo/Europe/Dublin.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Dublin
-X-LIC-LOCATION:Europe/Dublin
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Gibraltar.ics b/libical/zoneinfo/Europe/Gibraltar.ics
deleted file mode 100644
index d3de3c6ce2..0000000000
--- a/libical/zoneinfo/Europe/Gibraltar.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Gibraltar
-X-LIC-LOCATION:Europe/Gibraltar
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Helsinki.ics b/libical/zoneinfo/Europe/Helsinki.ics
deleted file mode 100644
index 8140fad90d..0000000000
--- a/libical/zoneinfo/Europe/Helsinki.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Helsinki
-X-LIC-LOCATION:Europe/Helsinki
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Istanbul.ics b/libical/zoneinfo/Europe/Istanbul.ics
deleted file mode 100644
index 7619237e33..0000000000
--- a/libical/zoneinfo/Europe/Istanbul.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Istanbul
-X-LIC-LOCATION:Europe/Istanbul
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Kaliningrad.ics b/libical/zoneinfo/Europe/Kaliningrad.ics
deleted file mode 100644
index fe19337e78..0000000000
--- a/libical/zoneinfo/Europe/Kaliningrad.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Kaliningrad
-X-LIC-LOCATION:Europe/Kaliningrad
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Kiev.ics b/libical/zoneinfo/Europe/Kiev.ics
deleted file mode 100644
index 79f8df146d..0000000000
--- a/libical/zoneinfo/Europe/Kiev.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Kiev
-X-LIC-LOCATION:Europe/Kiev
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Lisbon.ics b/libical/zoneinfo/Europe/Lisbon.ics
deleted file mode 100644
index d92a7ec08b..0000000000
--- a/libical/zoneinfo/Europe/Lisbon.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Lisbon
-X-LIC-LOCATION:Europe/Lisbon
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Ljubljana.ics b/libical/zoneinfo/Europe/Ljubljana.ics
deleted file mode 100644
index ef73392182..0000000000
--- a/libical/zoneinfo/Europe/Ljubljana.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Ljubljana
-X-LIC-LOCATION:Europe/Ljubljana
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/London.ics b/libical/zoneinfo/Europe/London.ics
deleted file mode 100644
index acbd57735b..0000000000
--- a/libical/zoneinfo/Europe/London.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/London
-X-LIC-LOCATION:Europe/London
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19700329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Luxembourg.ics b/libical/zoneinfo/Europe/Luxembourg.ics
deleted file mode 100644
index 0e2752a3bf..0000000000
--- a/libical/zoneinfo/Europe/Luxembourg.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Luxembourg
-X-LIC-LOCATION:Europe/Luxembourg
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Madrid.ics b/libical/zoneinfo/Europe/Madrid.ics
deleted file mode 100644
index 8aac0528be..0000000000
--- a/libical/zoneinfo/Europe/Madrid.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Madrid
-X-LIC-LOCATION:Europe/Madrid
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Malta.ics b/libical/zoneinfo/Europe/Malta.ics
deleted file mode 100644
index 6744fd9a12..0000000000
--- a/libical/zoneinfo/Europe/Malta.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Malta
-X-LIC-LOCATION:Europe/Malta
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Minsk.ics b/libical/zoneinfo/Europe/Minsk.ics
deleted file mode 100644
index 01fd41bd52..0000000000
--- a/libical/zoneinfo/Europe/Minsk.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Minsk
-X-LIC-LOCATION:Europe/Minsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Monaco.ics b/libical/zoneinfo/Europe/Monaco.ics
deleted file mode 100644
index 343d740d88..0000000000
--- a/libical/zoneinfo/Europe/Monaco.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Monaco
-X-LIC-LOCATION:Europe/Monaco
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Moscow.ics b/libical/zoneinfo/Europe/Moscow.ics
deleted file mode 100644
index 5547514743..0000000000
--- a/libical/zoneinfo/Europe/Moscow.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Moscow
-X-LIC-LOCATION:Europe/Moscow
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Nicosia.ics b/libical/zoneinfo/Europe/Nicosia.ics
deleted file mode 100644
index a373db63c1..0000000000
--- a/libical/zoneinfo/Europe/Nicosia.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Nicosia
-X-LIC-LOCATION:Europe/Nicosia
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Oslo.ics b/libical/zoneinfo/Europe/Oslo.ics
deleted file mode 100644
index f8df7ef97c..0000000000
--- a/libical/zoneinfo/Europe/Oslo.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Oslo
-X-LIC-LOCATION:Europe/Oslo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Paris.ics b/libical/zoneinfo/Europe/Paris.ics
deleted file mode 100644
index b8c8d3ded7..0000000000
--- a/libical/zoneinfo/Europe/Paris.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Paris
-X-LIC-LOCATION:Europe/Paris
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Prague.ics b/libical/zoneinfo/Europe/Prague.ics
deleted file mode 100644
index 03005ff199..0000000000
--- a/libical/zoneinfo/Europe/Prague.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Prague
-X-LIC-LOCATION:Europe/Prague
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Riga.ics b/libical/zoneinfo/Europe/Riga.ics
deleted file mode 100644
index 4bc1003b1f..0000000000
--- a/libical/zoneinfo/Europe/Riga.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Riga
-X-LIC-LOCATION:Europe/Riga
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Rome.ics b/libical/zoneinfo/Europe/Rome.ics
deleted file mode 100644
index 67f306e4cd..0000000000
--- a/libical/zoneinfo/Europe/Rome.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Rome
-X-LIC-LOCATION:Europe/Rome
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Samara.ics b/libical/zoneinfo/Europe/Samara.ics
deleted file mode 100644
index 718be0d712..0000000000
--- a/libical/zoneinfo/Europe/Samara.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Samara
-X-LIC-LOCATION:Europe/Samara
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:SAMST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:SAMT
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/San_Marino.ics b/libical/zoneinfo/Europe/San_Marino.ics
deleted file mode 100644
index ab180f4a99..0000000000
--- a/libical/zoneinfo/Europe/San_Marino.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/San_Marino
-X-LIC-LOCATION:Europe/San_Marino
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Sarajevo.ics b/libical/zoneinfo/Europe/Sarajevo.ics
deleted file mode 100644
index 00e38a49de..0000000000
--- a/libical/zoneinfo/Europe/Sarajevo.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Sarajevo
-X-LIC-LOCATION:Europe/Sarajevo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Simferopol.ics b/libical/zoneinfo/Europe/Simferopol.ics
deleted file mode 100644
index fdbdb1fe6a..0000000000
--- a/libical/zoneinfo/Europe/Simferopol.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Simferopol
-X-LIC-LOCATION:Europe/Simferopol
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Skopje.ics b/libical/zoneinfo/Europe/Skopje.ics
deleted file mode 100644
index 77dd80edb7..0000000000
--- a/libical/zoneinfo/Europe/Skopje.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Skopje
-X-LIC-LOCATION:Europe/Skopje
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Sofia.ics b/libical/zoneinfo/Europe/Sofia.ics
deleted file mode 100644
index 63bd0685fa..0000000000
--- a/libical/zoneinfo/Europe/Sofia.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Sofia
-X-LIC-LOCATION:Europe/Sofia
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Stockholm.ics b/libical/zoneinfo/Europe/Stockholm.ics
deleted file mode 100644
index 35634a3d85..0000000000
--- a/libical/zoneinfo/Europe/Stockholm.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Stockholm
-X-LIC-LOCATION:Europe/Stockholm
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Tallinn.ics b/libical/zoneinfo/Europe/Tallinn.ics
deleted file mode 100644
index d19ee94edc..0000000000
--- a/libical/zoneinfo/Europe/Tallinn.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Europe/Tallinn
-X-LIC-LOCATION:Europe/Tallinn
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Tirane.ics b/libical/zoneinfo/Europe/Tirane.ics
deleted file mode 100644
index cfd39e0dc4..0000000000
--- a/libical/zoneinfo/Europe/Tirane.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Tirane
-X-LIC-LOCATION:Europe/Tirane
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Uzhgorod.ics b/libical/zoneinfo/Europe/Uzhgorod.ics
deleted file mode 100644
index 34da5adcb1..0000000000
--- a/libical/zoneinfo/Europe/Uzhgorod.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Uzhgorod
-X-LIC-LOCATION:Europe/Uzhgorod
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Vaduz.ics b/libical/zoneinfo/Europe/Vaduz.ics
deleted file mode 100644
index aa25589816..0000000000
--- a/libical/zoneinfo/Europe/Vaduz.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Vaduz
-X-LIC-LOCATION:Europe/Vaduz
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Vatican.ics b/libical/zoneinfo/Europe/Vatican.ics
deleted file mode 100644
index 411dac53af..0000000000
--- a/libical/zoneinfo/Europe/Vatican.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Vatican
-X-LIC-LOCATION:Europe/Vatican
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Vienna.ics b/libical/zoneinfo/Europe/Vienna.ics
deleted file mode 100644
index 3d808d7650..0000000000
--- a/libical/zoneinfo/Europe/Vienna.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Vienna
-X-LIC-LOCATION:Europe/Vienna
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Vilnius.ics b/libical/zoneinfo/Europe/Vilnius.ics
deleted file mode 100644
index cfdd2053fd..0000000000
--- a/libical/zoneinfo/Europe/Vilnius.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Vilnius
-X-LIC-LOCATION:Europe/Vilnius
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Warsaw.ics b/libical/zoneinfo/Europe/Warsaw.ics
deleted file mode 100644
index 2918675f98..0000000000
--- a/libical/zoneinfo/Europe/Warsaw.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Warsaw
-X-LIC-LOCATION:Europe/Warsaw
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Zagreb.ics b/libical/zoneinfo/Europe/Zagreb.ics
deleted file mode 100644
index 3bf3ab4e4d..0000000000
--- a/libical/zoneinfo/Europe/Zagreb.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Zagreb
-X-LIC-LOCATION:Europe/Zagreb
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Zaporozhye.ics b/libical/zoneinfo/Europe/Zaporozhye.ics
deleted file mode 100644
index 6f1a988f84..0000000000
--- a/libical/zoneinfo/Europe/Zaporozhye.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Zaporozhye
-X-LIC-LOCATION:Europe/Zaporozhye
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Europe/Zurich.ics b/libical/zoneinfo/Europe/Zurich.ics
deleted file mode 100644
index 03ef7ac06c..0000000000
--- a/libical/zoneinfo/Europe/Zurich.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Zurich
-X-LIC-LOCATION:Europe/Zurich
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Antananarivo.ics b/libical/zoneinfo/Indian/Antananarivo.ics
deleted file mode 100644
index f20014e2b5..0000000000
--- a/libical/zoneinfo/Indian/Antananarivo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Indian/Antananarivo
-X-LIC-LOCATION:Indian/Antananarivo
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Chagos.ics b/libical/zoneinfo/Indian/Chagos.ics
deleted file mode 100644
index ebfb962b4a..0000000000
--- a/libical/zoneinfo/Indian/Chagos.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Chagos
-X-LIC-LOCATION:Indian/Chagos
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:IOT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Christmas.ics b/libical/zoneinfo/Indian/Christmas.ics
deleted file mode 100644
index 863fe5d533..0000000000
--- a/libical/zoneinfo/Indian/Christmas.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Christmas
-X-LIC-LOCATION:Indian/Christmas
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:CXT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Cocos.ics b/libical/zoneinfo/Indian/Cocos.ics
deleted file mode 100644
index 53f8efafc8..0000000000
--- a/libical/zoneinfo/Indian/Cocos.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Cocos
-X-LIC-LOCATION:Indian/Cocos
-BEGIN:STANDARD
-TZOFFSETFROM:+0630
-TZOFFSETTO:+0630
-TZNAME:CCT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Comoro.ics b/libical/zoneinfo/Indian/Comoro.ics
deleted file mode 100644
index 2be7d3d565..0000000000
--- a/libical/zoneinfo/Indian/Comoro.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Comoro
-X-LIC-LOCATION:Indian/Comoro
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Kerguelen.ics b/libical/zoneinfo/Indian/Kerguelen.ics
deleted file mode 100644
index fbb01f3a47..0000000000
--- a/libical/zoneinfo/Indian/Kerguelen.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Kerguelen
-X-LIC-LOCATION:Indian/Kerguelen
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:TFT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Mahe.ics b/libical/zoneinfo/Indian/Mahe.ics
deleted file mode 100644
index 76a18aad1a..0000000000
--- a/libical/zoneinfo/Indian/Mahe.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Mahe
-X-LIC-LOCATION:Indian/Mahe
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:SCT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Maldives.ics b/libical/zoneinfo/Indian/Maldives.ics
deleted file mode 100644
index b48067e9f5..0000000000
--- a/libical/zoneinfo/Indian/Maldives.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Indian/Maldives
-X-LIC-LOCATION:Indian/Maldives
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:MVT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Mauritius.ics b/libical/zoneinfo/Indian/Mauritius.ics
deleted file mode 100644
index 2ba96ec781..0000000000
--- a/libical/zoneinfo/Indian/Mauritius.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Mauritius
-X-LIC-LOCATION:Indian/Mauritius
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:MUT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Mayotte.ics b/libical/zoneinfo/Indian/Mayotte.ics
deleted file mode 100644
index 92e4263db6..0000000000
--- a/libical/zoneinfo/Indian/Mayotte.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Mayotte
-X-LIC-LOCATION:Indian/Mayotte
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Indian/Reunion.ics b/libical/zoneinfo/Indian/Reunion.ics
deleted file mode 100644
index 0c345f2976..0000000000
--- a/libical/zoneinfo/Indian/Reunion.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Indian/Reunion
-X-LIC-LOCATION:Indian/Reunion
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:RET
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Makefile.am b/libical/zoneinfo/Makefile.am
deleted file mode 100644
index 78b2be521e..0000000000
--- a/libical/zoneinfo/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-
-zoneinfodatadir = $(privdatadir)/zoneinfo
-
-zoneinfodata_DATA = zones.tab
-
-DIRS = \
- Africa \
- America \
- America/Indiana \
- America/Kentucky \
- America/North_Dakota \
- Antarctica \
- Arctic \
- Asia \
- Atlantic \
- Australia \
- Europe \
- Indian \
- Pacific
-
-
-install-data-local:
- @$(NORMAL_INSTALL)
- for dir in $(DIRS); do \
- $(mkinstalldirs) $(DESTDIR)$(zoneinfodatadir)/$$dir; \
- for tzfile in $(srcdir)/$$dir/*.ics; do \
- $(INSTALL_DATA) $$tzfile $(DESTDIR)$(zoneinfodatadir)/$$dir; \
- done \
- done
-
-dist-hook:
- for dir in $(DIRS); do \
- mkdir $(distdir)/$$dir; \
- for tzfile in $(srcdir)/$$dir/*.ics; do \
- cp -p $$tzfile $(distdir)/$$dir; \
- done \
- done
-
-EXTRA_DIST = $(zoneinfodata_DATA)
diff --git a/libical/zoneinfo/Pacific/Apia.ics b/libical/zoneinfo/Pacific/Apia.ics
deleted file mode 100644
index 96e1665718..0000000000
--- a/libical/zoneinfo/Pacific/Apia.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Apia
-X-LIC-LOCATION:Pacific/Apia
-BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:WST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Auckland.ics b/libical/zoneinfo/Pacific/Auckland.ics
deleted file mode 100644
index f3d46d3fb7..0000000000
--- a/libical/zoneinfo/Pacific/Auckland.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Auckland
-X-LIC-LOCATION:Pacific/Auckland
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19700315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19701004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Chatham.ics b/libical/zoneinfo/Pacific/Chatham.ics
deleted file mode 100644
index d0bd4dfc93..0000000000
--- a/libical/zoneinfo/Pacific/Chatham.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Chatham
-X-LIC-LOCATION:Pacific/Chatham
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1245
-TZOFFSETTO:+1345
-TZNAME:CHADT
-DTSTART:19701004T024500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1345
-TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19700315T034500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Easter.ics b/libical/zoneinfo/Pacific/Easter.ics
deleted file mode 100644
index adb5ba640f..0000000000
--- a/libical/zoneinfo/Pacific/Easter.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Easter
-X-LIC-LOCATION:Pacific/Easter
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19701010T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:19700314T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Efate.ics b/libical/zoneinfo/Pacific/Efate.ics
deleted file mode 100644
index 947af3d591..0000000000
--- a/libical/zoneinfo/Pacific/Efate.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Efate
-X-LIC-LOCATION:Pacific/Efate
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:VUT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Enderbury.ics b/libical/zoneinfo/Pacific/Enderbury.ics
deleted file mode 100644
index 9eed2976dd..0000000000
--- a/libical/zoneinfo/Pacific/Enderbury.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Enderbury
-X-LIC-LOCATION:Pacific/Enderbury
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1300
-TZNAME:PHOT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Fakaofo.ics b/libical/zoneinfo/Pacific/Fakaofo.ics
deleted file mode 100644
index 64a8119673..0000000000
--- a/libical/zoneinfo/Pacific/Fakaofo.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Fakaofo
-X-LIC-LOCATION:Pacific/Fakaofo
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:TKT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Fiji.ics b/libical/zoneinfo/Pacific/Fiji.ics
deleted file mode 100644
index da46b522ca..0000000000
--- a/libical/zoneinfo/Pacific/Fiji.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Fiji
-X-LIC-LOCATION:Pacific/Fiji
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:FJT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Funafuti.ics b/libical/zoneinfo/Pacific/Funafuti.ics
deleted file mode 100644
index 6500c609e7..0000000000
--- a/libical/zoneinfo/Pacific/Funafuti.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Funafuti
-X-LIC-LOCATION:Pacific/Funafuti
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:TVT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Galapagos.ics b/libical/zoneinfo/Pacific/Galapagos.ics
deleted file mode 100644
index 3c488b1336..0000000000
--- a/libical/zoneinfo/Pacific/Galapagos.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Galapagos
-X-LIC-LOCATION:Pacific/Galapagos
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:GALT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Gambier.ics b/libical/zoneinfo/Pacific/Gambier.ics
deleted file mode 100644
index 77c96c30a0..0000000000
--- a/libical/zoneinfo/Pacific/Gambier.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Gambier
-X-LIC-LOCATION:Pacific/Gambier
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0900
-TZNAME:GAMT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Guadalcanal.ics b/libical/zoneinfo/Pacific/Guadalcanal.ics
deleted file mode 100644
index 23fafbe4b7..0000000000
--- a/libical/zoneinfo/Pacific/Guadalcanal.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Guadalcanal
-X-LIC-LOCATION:Pacific/Guadalcanal
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:SBT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Guam.ics b/libical/zoneinfo/Pacific/Guam.ics
deleted file mode 100644
index a37b6169bc..0000000000
--- a/libical/zoneinfo/Pacific/Guam.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Guam
-X-LIC-LOCATION:Pacific/Guam
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:ChST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Honolulu.ics b/libical/zoneinfo/Pacific/Honolulu.ics
deleted file mode 100644
index 6b8f239520..0000000000
--- a/libical/zoneinfo/Pacific/Honolulu.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Honolulu
-X-LIC-LOCATION:Pacific/Honolulu
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:HST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Johnston.ics b/libical/zoneinfo/Pacific/Johnston.ics
deleted file mode 100644
index cbbf3583d9..0000000000
--- a/libical/zoneinfo/Pacific/Johnston.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Johnston
-X-LIC-LOCATION:Pacific/Johnston
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:HST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Kiritimati.ics b/libical/zoneinfo/Pacific/Kiritimati.ics
deleted file mode 100644
index ec233b285a..0000000000
--- a/libical/zoneinfo/Pacific/Kiritimati.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Kiritimati
-X-LIC-LOCATION:Pacific/Kiritimati
-BEGIN:STANDARD
-TZOFFSETFROM:+1400
-TZOFFSETTO:+1400
-TZNAME:LINT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Kosrae.ics b/libical/zoneinfo/Pacific/Kosrae.ics
deleted file mode 100644
index ccaa93ad72..0000000000
--- a/libical/zoneinfo/Pacific/Kosrae.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Kosrae
-X-LIC-LOCATION:Pacific/Kosrae
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:KOST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Kwajalein.ics b/libical/zoneinfo/Pacific/Kwajalein.ics
deleted file mode 100644
index 7077a9fc3b..0000000000
--- a/libical/zoneinfo/Pacific/Kwajalein.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Kwajalein
-X-LIC-LOCATION:Pacific/Kwajalein
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:MHT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Majuro.ics b/libical/zoneinfo/Pacific/Majuro.ics
deleted file mode 100644
index 52d0fbd7f6..0000000000
--- a/libical/zoneinfo/Pacific/Majuro.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Majuro
-X-LIC-LOCATION:Pacific/Majuro
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:MHT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Marquesas.ics b/libical/zoneinfo/Pacific/Marquesas.ics
deleted file mode 100644
index ab2ff6428c..0000000000
--- a/libical/zoneinfo/Pacific/Marquesas.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Marquesas
-X-LIC-LOCATION:Pacific/Marquesas
-BEGIN:STANDARD
-TZOFFSETFROM:-0930
-TZOFFSETTO:-0930
-TZNAME:MART
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Midway.ics b/libical/zoneinfo/Pacific/Midway.ics
deleted file mode 100644
index 20141707c3..0000000000
--- a/libical/zoneinfo/Pacific/Midway.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Midway
-X-LIC-LOCATION:Pacific/Midway
-BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:SST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Nauru.ics b/libical/zoneinfo/Pacific/Nauru.ics
deleted file mode 100644
index 603ab7a892..0000000000
--- a/libical/zoneinfo/Pacific/Nauru.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Nauru
-X-LIC-LOCATION:Pacific/Nauru
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:NRT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Niue.ics b/libical/zoneinfo/Pacific/Niue.ics
deleted file mode 100644
index 381f044fcc..0000000000
--- a/libical/zoneinfo/Pacific/Niue.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Niue
-X-LIC-LOCATION:Pacific/Niue
-BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:NUT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Norfolk.ics b/libical/zoneinfo/Pacific/Norfolk.ics
deleted file mode 100644
index a9abeef437..0000000000
--- a/libical/zoneinfo/Pacific/Norfolk.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Norfolk
-X-LIC-LOCATION:Pacific/Norfolk
-BEGIN:STANDARD
-TZOFFSETFROM:+1130
-TZOFFSETTO:+1130
-TZNAME:NFT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Noumea.ics b/libical/zoneinfo/Pacific/Noumea.ics
deleted file mode 100644
index f380bc9219..0000000000
--- a/libical/zoneinfo/Pacific/Noumea.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Noumea
-X-LIC-LOCATION:Pacific/Noumea
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:NCT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Pago_Pago.ics b/libical/zoneinfo/Pacific/Pago_Pago.ics
deleted file mode 100644
index 7cc8707f20..0000000000
--- a/libical/zoneinfo/Pacific/Pago_Pago.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Pago_Pago
-X-LIC-LOCATION:Pacific/Pago_Pago
-BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:SST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Palau.ics b/libical/zoneinfo/Pacific/Palau.ics
deleted file mode 100644
index 77048c1267..0000000000
--- a/libical/zoneinfo/Pacific/Palau.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Palau
-X-LIC-LOCATION:Pacific/Palau
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:PWT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Pitcairn.ics b/libical/zoneinfo/Pacific/Pitcairn.ics
deleted file mode 100644
index 481efb8e7b..0000000000
--- a/libical/zoneinfo/Pacific/Pitcairn.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Pitcairn
-X-LIC-LOCATION:Pacific/Pitcairn
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Ponape.ics b/libical/zoneinfo/Pacific/Ponape.ics
deleted file mode 100644
index 4149e05141..0000000000
--- a/libical/zoneinfo/Pacific/Ponape.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Ponape
-X-LIC-LOCATION:Pacific/Ponape
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:PONT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Port_Moresby.ics b/libical/zoneinfo/Pacific/Port_Moresby.ics
deleted file mode 100644
index 713ac92982..0000000000
--- a/libical/zoneinfo/Pacific/Port_Moresby.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Port_Moresby
-X-LIC-LOCATION:Pacific/Port_Moresby
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:PGT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Rarotonga.ics b/libical/zoneinfo/Pacific/Rarotonga.ics
deleted file mode 100644
index 9e07723b55..0000000000
--- a/libical/zoneinfo/Pacific/Rarotonga.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Rarotonga
-X-LIC-LOCATION:Pacific/Rarotonga
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:CKT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Saipan.ics b/libical/zoneinfo/Pacific/Saipan.ics
deleted file mode 100644
index 101a987fa2..0000000000
--- a/libical/zoneinfo/Pacific/Saipan.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Saipan
-X-LIC-LOCATION:Pacific/Saipan
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:ChST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Tahiti.ics b/libical/zoneinfo/Pacific/Tahiti.ics
deleted file mode 100644
index 54c611dbe2..0000000000
--- a/libical/zoneinfo/Pacific/Tahiti.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Tahiti
-X-LIC-LOCATION:Pacific/Tahiti
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:TAHT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Tarawa.ics b/libical/zoneinfo/Pacific/Tarawa.ics
deleted file mode 100644
index 11785b170c..0000000000
--- a/libical/zoneinfo/Pacific/Tarawa.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Tarawa
-X-LIC-LOCATION:Pacific/Tarawa
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:GILT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Tongatapu.ics b/libical/zoneinfo/Pacific/Tongatapu.ics
deleted file mode 100644
index a77ae5ced8..0000000000
--- a/libical/zoneinfo/Pacific/Tongatapu.ics
+++ /dev/null
@@ -1,22 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20020614_6/Pacific/Tongatapu
-X-LIC-LOCATION:Pacific/Tongatapu
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1400
-TZNAME:TOST
-DTSTART:19701101T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1400
-TZOFFSETTO:+1300
-TZNAME:TOT
-DTSTART:19700125T020000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=-1SU
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Truk.ics b/libical/zoneinfo/Pacific/Truk.ics
deleted file mode 100644
index 9b1fdcdf64..0000000000
--- a/libical/zoneinfo/Pacific/Truk.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Truk
-X-LIC-LOCATION:Pacific/Truk
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:TRUT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Wake.ics b/libical/zoneinfo/Pacific/Wake.ics
deleted file mode 100644
index 959ef58bb6..0000000000
--- a/libical/zoneinfo/Pacific/Wake.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Wake
-X-LIC-LOCATION:Pacific/Wake
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:WAKT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Wallis.ics b/libical/zoneinfo/Pacific/Wallis.ics
deleted file mode 100644
index 62184865bb..0000000000
--- a/libical/zoneinfo/Pacific/Wallis.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_4/Pacific/Wallis
-X-LIC-LOCATION:Pacific/Wallis
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:WFT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/Pacific/Yap.ics b/libical/zoneinfo/Pacific/Yap.ics
deleted file mode 100644
index b40286ac47..0000000000
--- a/libical/zoneinfo/Pacific/Yap.ics
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//Ximian//NONSGML Evolution Olson-VTIMEZONE Converter//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:/softwarestudio.org/Olson_20011030_5/Pacific/Yap
-X-LIC-LOCATION:Pacific/Yap
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:YAPT
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
diff --git a/libical/zoneinfo/zones.tab b/libical/zoneinfo/zones.tab
deleted file mode 100644
index d951e526ec..0000000000
--- a/libical/zoneinfo/zones.tab
+++ /dev/null
@@ -1,378 +0,0 @@
-+0051900 -0040200 Africa/Abidjan
-+0053300 +0001300 Africa/Accra
-+0090200 +0384200 Africa/Addis_Ababa
-+0364700 +0030300 Africa/Algiers
-+0152000 +0385300 Africa/Asmera
-+0123900 -0080000 Africa/Bamako
-+0042200 +0183500 Africa/Bangui
-+0132800 -0163900 Africa/Banjul
-+0115100 -0153500 Africa/Bissau
--0154700 +0350000 Africa/Blantyre
--0041600 +0151700 Africa/Brazzaville
--0032300 +0292200 Africa/Bujumbura
-+0300300 +0311500 Africa/Cairo
-+0333900 -0073500 Africa/Casablanca
-+0355300 -0051900 Africa/Ceuta
-+0093100 -0134300 Africa/Conakry
-+0144000 -0172600 Africa/Dakar
--0064800 +0391700 Africa/Dar_es_Salaam
-+0113600 +0430900 Africa/Djibouti
-+0040300 +0094200 Africa/Douala
-+0270900 -0131200 Africa/El_Aaiun
-+0083000 -0131500 Africa/Freetown
--0254500 +0255500 Africa/Gaborone
--0175000 +0310300 Africa/Harare
--0261500 +0280000 Africa/Johannesburg
-+0001900 +0322500 Africa/Kampala
-+0153600 +0323200 Africa/Khartoum
--0015700 +0300400 Africa/Kigali
--0041800 +0151800 Africa/Kinshasa
-+0062700 +0032400 Africa/Lagos
-+0002300 +0092700 Africa/Libreville
-+0060800 +0011300 Africa/Lome
--0084800 +0131400 Africa/Luanda
--0114000 +0272800 Africa/Lubumbashi
--0152500 +0281700 Africa/Lusaka
-+0034500 +0084700 Africa/Malabo
--0255800 +0323500 Africa/Maputo
--0292800 +0273000 Africa/Maseru
--0261800 +0310600 Africa/Mbabane
-+0020400 +0452200 Africa/Mogadishu
-+0061800 -0104700 Africa/Monrovia
--0011700 +0364900 Africa/Nairobi
-+0120700 +0150300 Africa/Ndjamena
-+0133100 +0020700 Africa/Niamey
-+0180600 -0155700 Africa/Nouakchott
-+0122200 -0013100 Africa/Ouagadougou
-+0062900 +0023700 Africa/Porto-Novo
-+0002000 +0064400 Africa/Sao_Tome
-+0144600 -0030100 Africa/Timbuktu
-+0325400 +0131100 Africa/Tripoli
-+0364800 +0101100 Africa/Tunis
--0223400 +0170600 Africa/Windhoek
-+0515248 -1763929 America/Adak
-+0611305 -1495401 America/Anchorage
-+0181200 -0630400 America/Anguilla
-+0170300 -0614800 America/Antigua
--0071200 -0481200 America/Araguaina
-+0123000 -0685800 America/Aruba
--0251600 -0574000 America/Asuncion
-+0130600 -0593700 America/Barbados
--0012700 -0482900 America/Belem
-+0173000 -0881200 America/Belize
-+0024900 -0604000 America/Boa_Vista
-+0043600 -0740500 America/Bogota
-+0433649 -1161209 America/Boise
--0343600 -0582700 America/Buenos_Aires
-+0690300 -1050500 America/Cambridge_Bay
-+0210500 -0864600 America/Cancun
-+0103000 -0665600 America/Caracas
--0282800 -0654700 America/Catamarca
-+0045600 -0522000 America/Cayenne
-+0191800 -0812300 America/Cayman
-+0415100 -0873900 America/Chicago
-+0283800 -1060500 America/Chihuahua
--0312400 -0641100 America/Cordoba
-+0095600 -0840500 America/Costa_Rica
--0153500 -0560500 America/Cuiaba
-+0121100 -0690000 America/Curacao
-+0764600 -0184000 America/Danmarkshavn
-+0640400 -1392500 America/Dawson
-+0594600 -1201400 America/Dawson_Creek
-+0394421 -1045903 America/Denver
-+0421953 -0830245 America/Detroit
-+0151800 -0612400 America/Dominica
-+0533300 -1132800 America/Edmonton
--0064000 -0695200 America/Eirunepe
-+0134200 -0891200 America/El_Salvador
--0034300 -0383000 America/Fortaleza
-+0461200 -0595700 America/Glace_Bay
-+0641100 -0514400 America/Godthab
-+0532000 -0602500 America/Goose_Bay
-+0212800 -0710800 America/Grand_Turk
-+0120300 -0614500 America/Grenada
-+0161400 -0613200 America/Guadeloupe
-+0143800 -0903100 America/Guatemala
--0021000 -0795000 America/Guayaquil
-+0064800 -0581000 America/Guyana
-+0443900 -0633600 America/Halifax
-+0230800 -0822200 America/Havana
-+0290400 -1105800 America/Hermosillo
-+0394606 -0860929 America/Indiana/Indianapolis
-+0411745 -0863730 America/Indiana/Knox
-+0382232 -0862041 America/Indiana/Marengo
-+0384452 -0850402 America/Indiana/Vevay
-+0394606 -0860929 America/Indianapolis
-+0682500 -1133000 America/Inuvik
-+0634400 -0682800 America/Iqaluit
-+0180000 -0764800 America/Jamaica
--0241100 -0651800 America/Jujuy
-+0581807 -1342511 America/Juneau
-+0381515 -0854534 America/Kentucky/Louisville
-+0364947 -0845057 America/Kentucky/Monticello
--0163000 -0680900 America/La_Paz
--0120300 -0770300 America/Lima
-+0340308 -1181434 America/Los_Angeles
-+0381515 -0854534 America/Louisville
--0094000 -0354300 America/Maceio
-+0120900 -0861700 America/Managua
--0030800 -0600100 America/Manaus
-+0143600 -0610500 America/Martinique
-+0231300 -1062500 America/Mazatlan
--0325300 -0684900 America/Mendoza
-+0450628 -0873651 America/Menominee
-+0205800 -0893700 America/Merida
-+0192400 -0990900 America/Mexico_City
-+0470300 -0562000 America/Miquelon
-+0254000 -1001900 America/Monterrey
--0345300 -0561100 America/Montevideo
-+0453100 -0733400 America/Montreal
-+0164400 -0621300 America/Montserrat
-+0250500 -0772100 America/Nassau
-+0404251 -0740023 America/New_York
-+0490100 -0881600 America/Nipigon
-+0643004 -1652423 America/Nome
--0035100 -0322500 America/Noronha
-+0470659 -1011757 America/North_Dakota/Center
-+0085800 -0793200 America/Panama
-+0660800 -0654400 America/Pangnirtung
-+0055000 -0551000 America/Paramaribo
-+0332654 -1120424 America/Phoenix
-+0183200 -0722000 America/Port-au-Prince
-+0103900 -0613100 America/Port_of_Spain
--0084600 -0635400 America/Porto_Velho
-+0182806 -0660622 America/Puerto_Rico
-+0484300 -0942900 America/Rainy_River
-+0624500 -0921000 America/Rankin_Inlet
--0080300 -0345400 America/Recife
-+0502400 -1043900 America/Regina
--0095800 -0674800 America/Rio_Branco
--0332700 -0704000 America/Santiago
-+0182800 -0695400 America/Santo_Domingo
--0233200 -0463700 America/Sao_Paulo
-+0703000 -0221500 America/Scoresbysund
-+0364708 -1084111 America/Shiprock
-+0473400 -0524300 America/St_Johns
-+0171800 -0624300 America/St_Kitts
-+0140100 -0610000 America/St_Lucia
-+0182100 -0645600 America/St_Thomas
-+0130900 -0611400 America/St_Vincent
-+0501700 -1075000 America/Swift_Current
-+0140600 -0871300 America/Tegucigalpa
-+0763400 -0684700 America/Thule
-+0482300 -0891500 America/Thunder_Bay
-+0323200 -1170100 America/Tijuana
-+0182700 -0643700 America/Tortola
-+0491600 -1230700 America/Vancouver
-+0604300 -1350300 America/Whitehorse
-+0495300 -0970900 America/Winnipeg
-+0593249 -1394338 America/Yakutat
-+0622700 -1142100 America/Yellowknife
--0661700 +1103100 Antarctica/Casey
--0683500 +0775800 Antarctica/Davis
--0664000 +1400100 Antarctica/DumontDUrville
--0673600 +0625300 Antarctica/Mawson
--0775000 +1663600 Antarctica/McMurdo
--0644800 -0640600 Antarctica/Palmer
--0900000 +0000000 Antarctica/South_Pole
--0690022 +0393524 Antarctica/Syowa
--0782400 +1065400 Antarctica/Vostok
-+0780000 +0160000 Arctic/Longyearbyen
-+0124500 +0451200 Asia/Aden
-+0431500 +0765700 Asia/Almaty
-+0315700 +0355600 Asia/Amman
-+0644500 +1772900 Asia/Anadyr
-+0443100 +0501600 Asia/Aqtau
-+0501700 +0571000 Asia/Aqtobe
-+0375700 +0582300 Asia/Ashgabat
-+0332100 +0442500 Asia/Baghdad
-+0262300 +0503500 Asia/Bahrain
-+0402300 +0495100 Asia/Baku
-+0134500 +1003100 Asia/Bangkok
-+0335300 +0353000 Asia/Beirut
-+0425400 +0743600 Asia/Bishkek
-+0045600 +1145500 Asia/Brunei
-+0223200 +0882200 Asia/Calcutta
-+0480400 +1143000 Asia/Choibalsan
-+0293400 +1063500 Asia/Chongqing
-+0065600 +0795100 Asia/Colombo
-+0333000 +0361800 Asia/Damascus
-+0234300 +0902500 Asia/Dhaka
--0083300 +1253500 Asia/Dili
-+0251800 +0551800 Asia/Dubai
-+0383500 +0684800 Asia/Dushanbe
-+0313000 +0342800 Asia/Gaza
-+0454500 +1264100 Asia/Harbin
-+0221700 +1140900 Asia/Hong_Kong
-+0480100 +0913900 Asia/Hovd
-+0521600 +1042000 Asia/Irkutsk
-+0410100 +0285800 Asia/Istanbul
--0061000 +1064800 Asia/Jakarta
--0023200 +1404200 Asia/Jayapura
-+0314600 +0351400 Asia/Jerusalem
-+0343100 +0691200 Asia/Kabul
-+0530100 +1583900 Asia/Kamchatka
-+0245200 +0670300 Asia/Karachi
-+0392900 +0755900 Asia/Kashgar
-+0274300 +0851900 Asia/Katmandu
-+0560100 +0925000 Asia/Krasnoyarsk
-+0031000 +1014200 Asia/Kuala_Lumpur
-+0013300 +1102000 Asia/Kuching
-+0292000 +0475900 Asia/Kuwait
-+0221400 +1133500 Asia/Macau
-+0593400 +1504800 Asia/Magadan
--0050700 +1192400 Asia/Makassar
-+0143500 +1210000 Asia/Manila
-+0233600 +0583500 Asia/Muscat
-+0351000 +0332200 Asia/Nicosia
-+0550200 +0825500 Asia/Novosibirsk
-+0550000 +0732400 Asia/Omsk
-+0511300 +0512100 Asia/Oral
-+0113300 +1045500 Asia/Phnom_Penh
-+0000200 +1092000 Asia/Pontianak
-+0390100 +1254500 Asia/Pyongyang
-+0251700 +0513200 Asia/Qatar
-+0444800 +0652800 Asia/Qyzylorda
-+0164700 +0961000 Asia/Rangoon
-+0243800 +0464300 Asia/Riyadh
-+0104500 +1064000 Asia/Saigon
-+0465800 +1424200 Asia/Sakhalin
-+0394000 +0664800 Asia/Samarkand
-+0373300 +1265800 Asia/Seoul
-+0311400 +1212800 Asia/Shanghai
-+0011700 +1035100 Asia/Singapore
-+0250300 +1213000 Asia/Taipei
-+0412000 +0691800 Asia/Tashkent
-+0414300 +0444900 Asia/Tbilisi
-+0354000 +0512600 Asia/Tehran
-+0272800 +0893900 Asia/Thimphu
-+0353916 +1394441 Asia/Tokyo
-+0475500 +1065300 Asia/Ulaanbaatar
-+0434800 +0873500 Asia/Urumqi
-+0175800 +1023600 Asia/Vientiane
-+0431000 +1315600 Asia/Vladivostok
-+0620000 +1294000 Asia/Yakutsk
-+0565100 +0603600 Asia/Yekaterinburg
-+0401100 +0443000 Asia/Yerevan
-+0374400 -0254000 Atlantic/Azores
-+0321700 -0644600 Atlantic/Bermuda
-+0280600 -0152400 Atlantic/Canary
-+0145500 -0233100 Atlantic/Cape_Verde
-+0620100 -0064600 Atlantic/Faeroe
-+0705900 -0080500 Atlantic/Jan_Mayen
-+0323800 -0165400 Atlantic/Madeira
-+0640900 -0215100 Atlantic/Reykjavik
--0541600 -0363200 Atlantic/South_Georgia
--0155500 -0054200 Atlantic/St_Helena
--0514200 -0575100 Atlantic/Stanley
--0345500 +1383500 Australia/Adelaide
--0272800 +1530200 Australia/Brisbane
--0315700 +1412700 Australia/Broken_Hill
--0122800 +1305000 Australia/Darwin
--0425300 +1471900 Australia/Hobart
--0201600 +1490000 Australia/Lindeman
--0313300 +1590500 Australia/Lord_Howe
--0374900 +1445800 Australia/Melbourne
--0315700 +1155100 Australia/Perth
--0335200 +1511300 Australia/Sydney
-+0522200 +0045400 Europe/Amsterdam
-+0423000 +0013100 Europe/Andorra
-+0375800 +0234300 Europe/Athens
-+0543500 -0055500 Europe/Belfast
-+0445000 +0203000 Europe/Belgrade
-+0523000 +0132200 Europe/Berlin
-+0480900 +0170700 Europe/Bratislava
-+0505000 +0042000 Europe/Brussels
-+0442600 +0260600 Europe/Bucharest
-+0473000 +0190500 Europe/Budapest
-+0470000 +0285000 Europe/Chisinau
-+0554000 +0123500 Europe/Copenhagen
-+0532000 -0061500 Europe/Dublin
-+0360800 -0052100 Europe/Gibraltar
-+0601000 +0245800 Europe/Helsinki
-+0410100 +0285800 Europe/Istanbul
-+0544300 +0203000 Europe/Kaliningrad
-+0502600 +0303100 Europe/Kiev
-+0384300 -0090800 Europe/Lisbon
-+0460300 +0143100 Europe/Ljubljana
-+0512830 +0001845 Europe/London
-+0493600 +0060900 Europe/Luxembourg
-+0402400 -0034100 Europe/Madrid
-+0355400 +0143100 Europe/Malta
-+0535400 +0273400 Europe/Minsk
-+0434200 +0072300 Europe/Monaco
-+0554500 +0373500 Europe/Moscow
-+0351000 +0332200 Europe/Nicosia
-+0595500 +0104500 Europe/Oslo
-+0485200 +0022000 Europe/Paris
-+0500500 +0142600 Europe/Prague
-+0565700 +0240600 Europe/Riga
-+0415400 +0122900 Europe/Rome
-+0531200 +0500900 Europe/Samara
-+0435500 +0122800 Europe/San_Marino
-+0435200 +0182500 Europe/Sarajevo
-+0445700 +0340600 Europe/Simferopol
-+0415900 +0212600 Europe/Skopje
-+0424100 +0231900 Europe/Sofia
-+0592000 +0180300 Europe/Stockholm
-+0592500 +0244500 Europe/Tallinn
-+0412000 +0195000 Europe/Tirane
-+0483700 +0221800 Europe/Uzhgorod
-+0470900 +0093100 Europe/Vaduz
-+0415400 +0122700 Europe/Vatican
-+0481300 +0162000 Europe/Vienna
-+0544100 +0251900 Europe/Vilnius
-+0521500 +0210000 Europe/Warsaw
-+0454800 +0155800 Europe/Zagreb
-+0475000 +0351000 Europe/Zaporozhye
-+0472300 +0083200 Europe/Zurich
--0185500 +0473100 Indian/Antananarivo
--0072000 +0722500 Indian/Chagos
--0102500 +1054300 Indian/Christmas
--0121000 +0965500 Indian/Cocos
--0114100 +0431600 Indian/Comoro
--0492110 +0701303 Indian/Kerguelen
--0044000 +0552800 Indian/Mahe
-+0041000 +0733000 Indian/Maldives
--0201000 +0573000 Indian/Mauritius
--0124700 +0451400 Indian/Mayotte
--0205200 +0552800 Indian/Reunion
--0135000 -1714400 Pacific/Apia
--0365200 +1744600 Pacific/Auckland
--0435500 -1763000 Pacific/Chatham
--0271000 -1092700 Pacific/Easter
--0174000 +1682500 Pacific/Efate
--0030800 -1710500 Pacific/Enderbury
--0092200 -1711400 Pacific/Fakaofo
--0180800 +1782500 Pacific/Fiji
--0083100 +1791300 Pacific/Funafuti
-+0005400 -0893600 Pacific/Galapagos
--0230800 -1345700 Pacific/Gambier
--0093200 +1601200 Pacific/Guadalcanal
-+0132800 +1444500 Pacific/Guam
-+0211825 -1575130 Pacific/Honolulu
-+0170000 -1683000 Pacific/Johnston
-+0015200 -1572000 Pacific/Kiritimati
-+0051900 +1625900 Pacific/Kosrae
-+0090500 +1672000 Pacific/Kwajalein
-+0070900 +1711200 Pacific/Majuro
--0090000 -1393000 Pacific/Marquesas
-+0281300 -1772200 Pacific/Midway
-+0003100 +1665500 Pacific/Nauru
--0190100 +1695500 Pacific/Niue
--0290300 +1675800 Pacific/Norfolk
--0221600 +1653000 Pacific/Noumea
--0141600 -1704200 Pacific/Pago_Pago
-+0072000 +1342900 Pacific/Palau
--0250400 -1300500 Pacific/Pitcairn
-+0065800 +1581300 Pacific/Ponape
--0093000 +1471000 Pacific/Port_Moresby
--0211400 -1594600 Pacific/Rarotonga
-+0151200 +1454500 Pacific/Saipan
--0173200 -1493400 Pacific/Tahiti
-+0012500 +1730000 Pacific/Tarawa
--0211000 +1751000 Pacific/Tongatapu
-+0072500 +1514700 Pacific/Truk
-+0191700 +1663700 Pacific/Wake
--0131800 -1761000 Pacific/Wallis
-+0093100 +1380800 Pacific/Yap