From 58f1b46675ef29528f51e5c44fe0e087bda5d82d Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Tue, 18 Nov 2003 16:33:30 +0000 Subject: Remove libical from this tree, it resides in e-d-s now. svn path=/trunk/; revision=23417 --- libical/AUTHORS | 4 - libical/COPYING | 0 libical/INSTALL | 24 - libical/Makefile.am | 9 - libical/NEWS | 522 - libical/README | 102 - libical/TEST | 4 - libical/THANKS | 69 - libical/TODO | 39 - libical/autogen.sh | 61 - libical/configure.in | 307 - libical/design-data/.cvsignore | 6 - libical/design-data/Makefile.am | 6 - libical/design-data/components.txt | 22 - libical/design-data/param-c-types.txt | 23 - libical/design-data/parameters.csv | 33 - libical/design-data/params-in-prop.txt | 57 - libical/design-data/prop-to-value.txt | 57 - libical/design-data/properties.csv | 108 - libical/design-data/property-tokens.txt | 65 - libical/design-data/restrictions.csv | 1420 - libical/design-data/status.txt | 56 - libical/design-data/value-c-types.txt | 23 - libical/design-data/value-mem-semantics.txt | 19 - libical/design-data/value-types.csv | 35 - libical/doc/.cvsignore | 6 - libical/doc/AddingOrModifyingComponents.txt | 23 - libical/doc/Makefile.am | 1 - libical/doc/UsingLibical.lyx | 2584 -- libical/doc/UsingLibical.ps | 2327 -- libical/doc/UsingLibical.txt | 1384 - libical/examples/.cvsignore | 7 - libical/examples/Makefile.am | 20 - libical/examples/access-usecases.txt | 60 - libical/examples/access_components.c | 318 - .../examples/access_properties_and_parameters.c | 144 - libical/examples/access_store.c | 210 - libical/examples/changenames.pl | 4 - libical/examples/errors.c | 70 - libical/examples/main.c | 12 - libical/examples/parse_text.c | 68 - libical/examples/usecases.c | 89 - libical/scripts/.cvsignore | 6 - libical/scripts/Makefile.am | 9 - libical/scripts/mkderivedcomponents.pl | 170 - libical/scripts/mkderivedparameters.pl | 332 - libical/scripts/mkderivedproperties.pl | 258 - libical/scripts/mkderivedvalues.pl | 232 - libical/scripts/mkinclude.sh | 39 - libical/scripts/mkneticali.pl | 99 - libical/scripts/mkparameterrestrictions.pl | 85 - libical/scripts/mkrestrictionrecords.pl | 109 - libical/scripts/mkrestrictiontable.pl | 98 - libical/scripts/readvaluesfile.pl | 133 - libical/src/.cvsignore | 6 - libical/src/Makefile.am | 19 - libical/src/Net-ICal-Libical/MANIFEST | 16 - libical/src/Net-ICal-Libical/Makefile.PL | 42 - libical/src/Net-ICal-Libical/README | 7 - .../src/Net-ICal-Libical/lib/Net/ICal/Libical.pm | 386 - .../lib/Net/ICal/Libical/Component.pm | 175 - .../lib/Net/ICal/Libical/Duration.pm | 160 - .../lib/Net/ICal/Libical/Period.pm | 359 - .../lib/Net/ICal/Libical/Property.pm | 173 - .../Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm | 468 - libical/src/Net-ICal-Libical/netical.i | 317 - libical/src/Net-ICal-Libical/netical_wrap.c | 3054 -- libical/src/Net-ICal-Libical/netical_wrap.doc | 393 - libical/src/Net-ICal-Libical/test-data/2446.mime | 3426 -- libical/src/Net-ICal-Libical/test-data/error | 58 - .../src/Net-ICal-Libical/test-data/mail-examples | 262 - libical/src/Net-ICal-Libical/test-data/no-error | 26 - libical/src/Net-ICal-Libical/test-data/rfc2445.ics | 321 - libical/src/Net-ICal-Libical/test-data/rfc2446.ics | 1004 - .../Net-ICal-Libical/test-data/single-with-error | 39 - libical/src/Net-ICal-Libical/test/component.pl | 106 - libical/src/Net-ICal-Libical/test/libical.pl | 94 - libical/src/Net-ICal-Libical/test/swig.pl | 29 - libical/src/java/.cvsignore | 2 - libical/src/java/ICalDurationType.java | 114 - libical/src/java/ICalParameter.java | 259 - libical/src/java/ICalPeriodType.java | 71 - libical/src/java/ICalProperty.java | 507 - libical/src/java/ICalRecurrenceType.java | 284 - libical/src/java/ICalTimeType.java | 145 - libical/src/java/ICalTriggerType.java | 93 - libical/src/java/ICalValue.java | 209 - libical/src/java/Makefile.am | 51 - libical/src/java/VAgenda.java | 24 - libical/src/java/VAlarm.java | 24 - libical/src/java/VCalendar.java | 24 - libical/src/java/VComponent.java | 199 - libical/src/java/VEvent.java | 24 - libical/src/java/VFreeBusy.java | 18 - libical/src/java/VQuery.java | 24 - libical/src/java/VToDo.java | 24 - libical/src/java/jlibical_consts_cxx.h | 42 - libical/src/java/jlibical_utils_cxx.cpp | 458 - libical/src/java/jlibical_utils_cxx.h | 59 - libical/src/java/jniICalDurationType_cxx.cpp | 130 - libical/src/java/jniICalDurationType_cxx.h | 47 - libical/src/java/jniICalPeriodType_cxx.cpp | 144 - libical/src/java/jniICalPeriodType_cxx.h | 42 - libical/src/java/jniICalRecurrenceType_cxx.cpp | 347 - libical/src/java/jniICalRecurrenceType_cxx.h | 60 - libical/src/java/jniICalTimeType_cxx.cpp | 176 - libical/src/java/jniICalTimeType_cxx.h | 52 - libical/src/java/jniICalTriggerType_cxx.cpp | 111 - libical/src/java/jniICalTriggerType_cxx.h | 39 - .../src/java/net_cp_jlibical_ICalParameter_cxx.cpp | 310 - .../src/java/net_cp_jlibical_ICalParameter_cxx.h | 143 - .../src/java/net_cp_jlibical_ICalProperty_cxx.cpp | 1690 - .../src/java/net_cp_jlibical_ICalProperty_cxx.h | 654 - libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp | 436 - libical/src/java/net_cp_jlibical_ICalValue_cxx.h | 182 - .../src/java/net_cp_jlibical_VComponent_cxx.cpp | 956 - libical/src/java/net_cp_jlibical_VComponent_cxx.h | 358 - libical/src/java/testjni.java | 377 - libical/src/libical/.cvsignore | 28 - libical/src/libical/Makefile.am | 287 - libical/src/libical/astime.h | 65 - libical/src/libical/caldate.c | 176 - libical/src/libical/ical.h | 31 - libical/src/libical/icalarray.c | 163 - libical/src/libical/icalarray.h | 63 - libical/src/libical/icalattach.c | 139 - libical/src/libical/icalattach.h | 60 - libical/src/libical/icalattachimpl.h | 59 - libical/src/libical/icalattendee.c | 30 - libical/src/libical/icalattendee.h | 68 - libical/src/libical/icalcomponent.c | 2611 -- libical/src/libical/icalcomponent.h | 282 - libical/src/libical/icalderivedparameter.c.in | 205 - libical/src/libical/icalderivedparameter.h.in | 38 - libical/src/libical/icalderivedproperty.c.in | 285 - libical/src/libical/icalderivedproperty.h.in | 22 - libical/src/libical/icalderivedvalue.c.in | 337 - libical/src/libical/icalderivedvalue.h.in | 65 - libical/src/libical/icalduration.c | 332 - libical/src/libical/icalduration.h | 62 - libical/src/libical/icalenums.c | 166 - libical/src/libical/icalenums.h | 166 - libical/src/libical/icalerror.c | 251 - libical/src/libical/icalerror.h | 160 - libical/src/libical/icallangbind.c | 312 - libical/src/libical/icallangbind.h | 54 - libical/src/libical/icallexer.l | 161 - libical/src/libical/icalmemory.c | 367 - libical/src/libical/icalmemory.h | 84 - libical/src/libical/icalmime.c | 394 - libical/src/libical/icalmime.h | 43 - libical/src/libical/icalparameter.c | 383 - libical/src/libical/icalparameter.h | 69 - libical/src/libical/icalparameter_cxx.cpp | 289 - libical/src/libical/icalparameter_cxx.h | 159 - libical/src/libical/icalparameterimpl.h | 52 - libical/src/libical/icalparser.c | 1112 - libical/src/libical/icalparser.h | 96 - libical/src/libical/icalperiod.c | 170 - libical/src/libical/icalperiod.h | 55 - libical/src/libical/icalproperty.c | 989 - libical/src/libical/icalproperty.h | 134 - libical/src/libical/icalproperty_cxx.cpp | 702 - libical/src/libical/icalproperty_cxx.h | 365 - libical/src/libical/icalrecur.c | 2458 -- libical/src/libical/icalrecur.h | 215 - libical/src/libical/icalrestriction.c.in | 465 - libical/src/libical/icalrestriction.h | 63 - libical/src/libical/icaltime.c | 1050 - libical/src/libical/icaltime.h | 277 - libical/src/libical/icaltimezone.c | 1709 - libical/src/libical/icaltimezone.h | 169 - libical/src/libical/icaltypes.c | 191 - libical/src/libical/icaltypes.h | 107 - libical/src/libical/icalvalue.c | 1322 - libical/src/libical/icalvalue.h | 88 - libical/src/libical/icalvalue_cxx.cpp | 262 - libical/src/libical/icalvalue_cxx.h | 151 - libical/src/libical/icalvalueimpl.h | 95 - libical/src/libical/icalversion.h.in | 7 - libical/src/libical/icalyacc.y | 417 - libical/src/libical/icptrholder.h | 93 - libical/src/libical/pvl.c | 584 - libical/src/libical/pvl.h | 97 - libical/src/libical/sspm.c | 1619 - libical/src/libical/sspm.h | 143 - libical/src/libical/vcomponent.cpp | 817 - libical/src/libical/vcomponent.h | 340 - libical/src/libical/vsnprintf.c | 172 - libical/src/libicalcap/.cvsignore | 2 - libical/src/libicalcap/Makefile.am | 73 - libical/src/libicalcap/client.c | 187 - libical/src/libicalcap/icalcap.c | 44 - libical/src/libicalcap/icalcap.h | 47 - libical/src/libicalcap/icalcap_impl.h | 34 - libical/src/libicalcap/icalcap_message.c | 225 - libical/src/libicalcap/icalcap_message_impl.h | 33 - libical/src/libicalcap/icalcap_rr.c | 545 - libical/src/libicalcap/icalcap_server.c | 52 - libical/src/libicalcap/icalcap_server.h | 19 - libical/src/libicalcap/icalcap_server_impl.h | 31 - libical/src/libicalcap/icalcap_session.c | 62 - libical/src/libicalcap/icalcap_session.h | 15 - libical/src/libicalcap/icalcap_session_impl.h | 36 - libical/src/libicalcap/icalcap_utils.c | 134 - libical/src/libicalss/.cvsignore | 7 - libical/src/libicalss/Makefile.am | 123 - libical/src/libicalss/icalbdbset.c | 1598 - libical/src/libicalss/icalbdbset.h | 147 - libical/src/libicalss/icalbdbset_cxx.h | 61 - libical/src/libicalss/icalbdbsetimpl.h | 41 - libical/src/libicalss/icalcalendar.c | 263 - libical/src/libicalss/icalcalendar.h | 67 - libical/src/libicalss/icalcaputil.h | 58 - libical/src/libicalss/icalclassify.c | 754 - libical/src/libicalss/icalclassify.h | 45 - libical/src/libicalss/icalcluster.c | 245 - libical/src/libicalss/icalcluster.h | 61 - libical/src/libicalss/icalclusterimpl.h | 45 - libical/src/libicalss/icalcomponent.h | 115 - libical/src/libicalss/icalcsdb.h | 67 - libical/src/libicalss/icalcstp.c | 116 - libical/src/libicalss/icalcstp.h | 79 - libical/src/libicalss/icalcstpclient.c | 343 - libical/src/libicalss/icalcstpclient.h | 100 - libical/src/libicalss/icalcstpserver.c | 278 - libical/src/libicalss/icalcstpserver.h | 101 - libical/src/libicalss/icaldirset.c | 805 - libical/src/libicalss/icaldirset.h | 98 - libical/src/libicalss/icaldirsetimpl.h | 48 - libical/src/libicalss/icalfileset.c | 921 - libical/src/libicalss/icalfileset.h | 131 - libical/src/libicalss/icalfilesetimpl.h | 53 - libical/src/libicalss/icalgauge.c | 525 - libical/src/libicalss/icalgauge.h | 63 - libical/src/libicalss/icalgaugeimpl.h | 63 - libical/src/libicalss/icalmessage.c | 378 - libical/src/libicalss/icalmessage.h | 71 - libical/src/libicalss/icalset.c | 493 - libical/src/libicalss/icalset.h | 184 - libical/src/libicalss/icalspanlist.c | 567 - libical/src/libicalss/icalspanlist.h | 77 - libical/src/libicalss/icalspanlist_cxx.cpp | 92 - libical/src/libicalss/icalspanlist_cxx.h | 53 - libical/src/libicalss/icalss.h | 17 - libical/src/libicalss/icalsslexer.l | 134 - libical/src/libicalss/icalssutil.c | 29 - libical/src/libicalss/icalssutil.h | 27 - libical/src/libicalss/icalssyacc.h | 34 - libical/src/libicalss/icalssyacc.y | 249 - libical/src/libicalvcal/.cvsignore | 6 - libical/src/libicalvcal/Makefile.am | 39 - libical/src/libicalvcal/README.TXT | 951 - libical/src/libicalvcal/icalvcal.c | 1646 - libical/src/libicalvcal/icalvcal.h | 54 - libical/src/libicalvcal/port.h | 88 - libical/src/libicalvcal/vcaltest.c | 118 - libical/src/libicalvcal/vcaltmp.c | 337 - libical/src/libicalvcal/vcaltmp.h | 128 - libical/src/libicalvcal/vcc.h | 80 - libical/src/libicalvcal/vcc.y | 1200 - libical/src/libicalvcal/vctest.c | 95 - libical/src/libicalvcal/vobject.c | 1455 - libical/src/libicalvcal/vobject.h | 366 - libical/src/python/.cvsignore | 10 - libical/src/python/Attendee.py | 114 - libical/src/python/ChangeLog | 129 - libical/src/python/Collection.py | 124 - libical/src/python/Component.py | 799 - libical/src/python/DerivedProperties.py | 159 - libical/src/python/Duration.py | 92 - libical/src/python/Error.py | 10 - libical/src/python/Gauge.py | 88 - libical/src/python/Libical.py | 36 - libical/src/python/LibicalWrap.i | 453 - libical/src/python/Makefile.am | 48 - libical/src/python/Period.py | 216 - libical/src/python/Property.py | 268 - libical/src/python/Store.py | 181 - libical/src/python/Time.py | 215 - libical/src/python/littlefile.txt | 3 - libical/src/python/python-binding.txt | 434 - libical/src/python/test.py | 603 - libical/src/test/.cvsignore | 16 - libical/src/test/2445.ics | 326 - libical/src/test/2446.ics | 0 libical/src/test/Makefile.am | 48 - libical/src/test/copycluster.c | 133 - libical/src/test/findobj.c | 71 - libical/src/test/icaltestparser.c | 122 - libical/src/test/itip.ics | 14 - libical/src/test/outgoing.ics | 544 - libical/src/test/process.c | 407 - libical/src/test/recur.c | 161 - libical/src/test/regression-classify.c | 187 - libical/src/test/regression-component.c | 580 - libical/src/test/regression-cxx.cpp | 137 - libical/src/test/regression-recur.c | 194 - libical/src/test/regression-storage.c | 804 - libical/src/test/regression-utils.c | 169 - libical/src/test/regression.c | 3667 -- libical/src/test/regression.h | 53 - libical/src/test/storage.c | 873 - libical/src/test/stow.c | 888 - libical/src/test/test_fileset.ics | 60 - libical/src/test/testclassify.c | 128 - libical/src/test/testmime.c | 339 - libical/src/test/testvcal.c | 64 - libical/test-data/.cvsignore | 6 - libical/test-data/0 | 7 - libical/test-data/1 | 38 - libical/test-data/1.1 | 13 - libical/test-data/2 | 22 - libical/test-data/2445.ics | 331 - libical/test-data/2446.ics | 1006 - libical/test-data/3 | 21 - libical/test-data/4 | 23 - libical/test-data/5 | 16 - libical/test-data/6 | 12 - libical/test-data/7 | 14 - libical/test-data/Makefile.am | 27 - libical/test-data/calendar.ics | 63 - libical/test-data/classify.ics | 43 - libical/test-data/complex-mime-error.txt | 59 - libical/test-data/complex-mime.txt | 81 - libical/test-data/incoming.ics | 294 - libical/test-data/large.ics | 40533 ------------------- libical/test-data/overlaps.ics | 32 - libical/test-data/process-calendar.ics | 108 - libical/test-data/process-incoming.ics | 107 - libical/test-data/recur-errors.txt | 44 - libical/test-data/recur.txt | 644 - libical/test-data/restriction.ics | 49 - libical/test-data/simple-mime.txt | 27 - libical/test-data/smallcluster.ics | 13 - libical/test-data/spanlist.ics | 35 - libical/test-data/stresstest.ics | 178 - libical/test-data/user-cal.vcf | 76 - libical/zoneinfo/.cvsignore | 2 - libical/zoneinfo/Africa/Abidjan.ics | 14 - libical/zoneinfo/Africa/Accra.ics | 14 - libical/zoneinfo/Africa/Addis_Ababa.ics | 14 - libical/zoneinfo/Africa/Algiers.ics | 14 - libical/zoneinfo/Africa/Asmera.ics | 14 - libical/zoneinfo/Africa/Bamako.ics | 14 - libical/zoneinfo/Africa/Bangui.ics | 14 - libical/zoneinfo/Africa/Banjul.ics | 14 - libical/zoneinfo/Africa/Bissau.ics | 14 - libical/zoneinfo/Africa/Blantyre.ics | 14 - libical/zoneinfo/Africa/Brazzaville.ics | 14 - libical/zoneinfo/Africa/Bujumbura.ics | 14 - libical/zoneinfo/Africa/Cairo.ics | 22 - libical/zoneinfo/Africa/Casablanca.ics | 14 - libical/zoneinfo/Africa/Ceuta.ics | 22 - libical/zoneinfo/Africa/Conakry.ics | 14 - libical/zoneinfo/Africa/Dakar.ics | 14 - libical/zoneinfo/Africa/Dar_es_Salaam.ics | 14 - libical/zoneinfo/Africa/Djibouti.ics | 14 - libical/zoneinfo/Africa/Douala.ics | 14 - libical/zoneinfo/Africa/El_Aaiun.ics | 14 - libical/zoneinfo/Africa/Freetown.ics | 14 - libical/zoneinfo/Africa/Gaborone.ics | 14 - libical/zoneinfo/Africa/Harare.ics | 14 - libical/zoneinfo/Africa/Johannesburg.ics | 14 - libical/zoneinfo/Africa/Kampala.ics | 14 - libical/zoneinfo/Africa/Khartoum.ics | 14 - libical/zoneinfo/Africa/Kigali.ics | 14 - libical/zoneinfo/Africa/Kinshasa.ics | 14 - libical/zoneinfo/Africa/Lagos.ics | 14 - libical/zoneinfo/Africa/Libreville.ics | 14 - libical/zoneinfo/Africa/Lome.ics | 14 - libical/zoneinfo/Africa/Luanda.ics | 14 - libical/zoneinfo/Africa/Lubumbashi.ics | 14 - libical/zoneinfo/Africa/Lusaka.ics | 14 - libical/zoneinfo/Africa/Malabo.ics | 14 - libical/zoneinfo/Africa/Maputo.ics | 14 - libical/zoneinfo/Africa/Maseru.ics | 14 - libical/zoneinfo/Africa/Mbabane.ics | 14 - libical/zoneinfo/Africa/Mogadishu.ics | 14 - libical/zoneinfo/Africa/Monrovia.ics | 14 - libical/zoneinfo/Africa/Nairobi.ics | 14 - libical/zoneinfo/Africa/Ndjamena.ics | 14 - libical/zoneinfo/Africa/Niamey.ics | 14 - libical/zoneinfo/Africa/Nouakchott.ics | 14 - libical/zoneinfo/Africa/Ouagadougou.ics | 14 - libical/zoneinfo/Africa/Porto-Novo.ics | 14 - libical/zoneinfo/Africa/Sao_Tome.ics | 14 - libical/zoneinfo/Africa/Timbuktu.ics | 14 - libical/zoneinfo/Africa/Tripoli.ics | 14 - libical/zoneinfo/Africa/Tunis.ics | 14 - libical/zoneinfo/Africa/Windhoek.ics | 22 - libical/zoneinfo/America/Adak.ics | 22 - libical/zoneinfo/America/Anchorage.ics | 22 - libical/zoneinfo/America/Anguilla.ics | 14 - libical/zoneinfo/America/Antigua.ics | 14 - libical/zoneinfo/America/Araguaina.ics | 22 - libical/zoneinfo/America/Aruba.ics | 14 - libical/zoneinfo/America/Asuncion.ics | 22 - libical/zoneinfo/America/Barbados.ics | 14 - libical/zoneinfo/America/Belem.ics | 14 - libical/zoneinfo/America/Belize.ics | 14 - libical/zoneinfo/America/Boa_Vista.ics | 14 - libical/zoneinfo/America/Bogota.ics | 14 - libical/zoneinfo/America/Boise.ics | 22 - libical/zoneinfo/America/Buenos_Aires.ics | 14 - libical/zoneinfo/America/Cambridge_Bay.ics | 22 - libical/zoneinfo/America/Cancun.ics | 22 - libical/zoneinfo/America/Caracas.ics | 14 - libical/zoneinfo/America/Catamarca.ics | 14 - libical/zoneinfo/America/Cayenne.ics | 14 - libical/zoneinfo/America/Cayman.ics | 14 - libical/zoneinfo/America/Chicago.ics | 22 - libical/zoneinfo/America/Chihuahua.ics | 22 - libical/zoneinfo/America/Cordoba.ics | 14 - libical/zoneinfo/America/Costa_Rica.ics | 14 - libical/zoneinfo/America/Cuiaba.ics | 22 - libical/zoneinfo/America/Curacao.ics | 14 - libical/zoneinfo/America/Danmarkshavn.ics | 14 - libical/zoneinfo/America/Dawson.ics | 22 - libical/zoneinfo/America/Dawson_Creek.ics | 14 - libical/zoneinfo/America/Denver.ics | 22 - libical/zoneinfo/America/Detroit.ics | 22 - libical/zoneinfo/America/Dominica.ics | 14 - libical/zoneinfo/America/Edmonton.ics | 22 - libical/zoneinfo/America/Eirunepe.ics | 14 - libical/zoneinfo/America/El_Salvador.ics | 14 - libical/zoneinfo/America/Fortaleza.ics | 22 - libical/zoneinfo/America/Glace_Bay.ics | 22 - libical/zoneinfo/America/Godthab.ics | 22 - libical/zoneinfo/America/Goose_Bay.ics | 22 - libical/zoneinfo/America/Grand_Turk.ics | 22 - libical/zoneinfo/America/Grenada.ics | 14 - libical/zoneinfo/America/Guadeloupe.ics | 14 - libical/zoneinfo/America/Guatemala.ics | 14 - libical/zoneinfo/America/Guayaquil.ics | 14 - libical/zoneinfo/America/Guyana.ics | 14 - libical/zoneinfo/America/Halifax.ics | 22 - libical/zoneinfo/America/Havana.ics | 22 - libical/zoneinfo/America/Hermosillo.ics | 14 - libical/zoneinfo/America/Indiana/Indianapolis.ics | 14 - libical/zoneinfo/America/Indiana/Knox.ics | 14 - libical/zoneinfo/America/Indiana/Marengo.ics | 14 - libical/zoneinfo/America/Indiana/Vevay.ics | 14 - libical/zoneinfo/America/Indianapolis.ics | 14 - libical/zoneinfo/America/Inuvik.ics | 22 - libical/zoneinfo/America/Iqaluit.ics | 22 - libical/zoneinfo/America/Jamaica.ics | 14 - libical/zoneinfo/America/Jujuy.ics | 14 - libical/zoneinfo/America/Juneau.ics | 22 - libical/zoneinfo/America/Kentucky/Louisville.ics | 22 - libical/zoneinfo/America/Kentucky/Monticello.ics | 22 - libical/zoneinfo/America/La_Paz.ics | 14 - libical/zoneinfo/America/Lima.ics | 14 - libical/zoneinfo/America/Los_Angeles.ics | 22 - libical/zoneinfo/America/Louisville.ics | 22 - libical/zoneinfo/America/Maceio.ics | 22 - libical/zoneinfo/America/Managua.ics | 14 - libical/zoneinfo/America/Manaus.ics | 14 - libical/zoneinfo/America/Martinique.ics | 14 - libical/zoneinfo/America/Mazatlan.ics | 22 - libical/zoneinfo/America/Mendoza.ics | 14 - libical/zoneinfo/America/Menominee.ics | 22 - libical/zoneinfo/America/Merida.ics | 22 - libical/zoneinfo/America/Mexico_City.ics | 22 - libical/zoneinfo/America/Miquelon.ics | 22 - libical/zoneinfo/America/Monterrey.ics | 22 - libical/zoneinfo/America/Montevideo.ics | 14 - libical/zoneinfo/America/Montreal.ics | 22 - libical/zoneinfo/America/Montserrat.ics | 14 - libical/zoneinfo/America/Nassau.ics | 22 - libical/zoneinfo/America/New_York.ics | 22 - libical/zoneinfo/America/Nipigon.ics | 22 - libical/zoneinfo/America/Nome.ics | 22 - libical/zoneinfo/America/Noronha.ics | 14 - libical/zoneinfo/America/North_Dakota/Center.ics | 22 - libical/zoneinfo/America/Panama.ics | 14 - libical/zoneinfo/America/Pangnirtung.ics | 22 - libical/zoneinfo/America/Paramaribo.ics | 14 - libical/zoneinfo/America/Phoenix.ics | 14 - libical/zoneinfo/America/Port-au-Prince.ics | 14 - libical/zoneinfo/America/Port_of_Spain.ics | 14 - libical/zoneinfo/America/Porto_Velho.ics | 14 - libical/zoneinfo/America/Puerto_Rico.ics | 14 - libical/zoneinfo/America/Rainy_River.ics | 22 - libical/zoneinfo/America/Rankin_Inlet.ics | 22 - libical/zoneinfo/America/Recife.ics | 22 - libical/zoneinfo/America/Regina.ics | 14 - libical/zoneinfo/America/Rio_Branco.ics | 14 - libical/zoneinfo/America/Rosario.ics | 14 - libical/zoneinfo/America/Santiago.ics | 22 - libical/zoneinfo/America/Santo_Domingo.ics | 14 - libical/zoneinfo/America/Sao_Paulo.ics | 22 - libical/zoneinfo/America/Scoresbysund.ics | 22 - libical/zoneinfo/America/Shiprock.ics | 22 - libical/zoneinfo/America/St_Johns.ics | 22 - libical/zoneinfo/America/St_Kitts.ics | 14 - libical/zoneinfo/America/St_Lucia.ics | 14 - libical/zoneinfo/America/St_Thomas.ics | 14 - libical/zoneinfo/America/St_Vincent.ics | 14 - libical/zoneinfo/America/Swift_Current.ics | 14 - libical/zoneinfo/America/Tegucigalpa.ics | 14 - libical/zoneinfo/America/Thule.ics | 22 - libical/zoneinfo/America/Thunder_Bay.ics | 22 - libical/zoneinfo/America/Tijuana.ics | 22 - libical/zoneinfo/America/Tortola.ics | 14 - libical/zoneinfo/America/Vancouver.ics | 22 - libical/zoneinfo/America/Whitehorse.ics | 22 - libical/zoneinfo/America/Winnipeg.ics | 22 - libical/zoneinfo/America/Yakutat.ics | 22 - libical/zoneinfo/America/Yellowknife.ics | 22 - libical/zoneinfo/Antarctica/Casey.ics | 14 - libical/zoneinfo/Antarctica/Davis.ics | 14 - libical/zoneinfo/Antarctica/DumontDUrville.ics | 14 - libical/zoneinfo/Antarctica/Mawson.ics | 14 - libical/zoneinfo/Antarctica/McMurdo.ics | 22 - libical/zoneinfo/Antarctica/Palmer.ics | 22 - libical/zoneinfo/Antarctica/South_Pole.ics | 22 - libical/zoneinfo/Antarctica/Syowa.ics | 14 - libical/zoneinfo/Antarctica/Vostok.ics | 14 - libical/zoneinfo/Arctic/Longyearbyen.ics | 22 - libical/zoneinfo/Asia/Aden.ics | 14 - libical/zoneinfo/Asia/Almaty.ics | 22 - libical/zoneinfo/Asia/Amman.ics | 22 - libical/zoneinfo/Asia/Anadyr.ics | 22 - libical/zoneinfo/Asia/Aqtau.ics | 22 - libical/zoneinfo/Asia/Aqtobe.ics | 22 - libical/zoneinfo/Asia/Ashgabat.ics | 14 - libical/zoneinfo/Asia/Baghdad.ics | 22 - libical/zoneinfo/Asia/Bahrain.ics | 14 - libical/zoneinfo/Asia/Baku.ics | 22 - libical/zoneinfo/Asia/Bangkok.ics | 14 - libical/zoneinfo/Asia/Beirut.ics | 22 - libical/zoneinfo/Asia/Bishkek.ics | 22 - libical/zoneinfo/Asia/Brunei.ics | 14 - libical/zoneinfo/Asia/Calcutta.ics | 14 - libical/zoneinfo/Asia/Choibalsan.ics | 14 - libical/zoneinfo/Asia/Chongqing.ics | 14 - libical/zoneinfo/Asia/Chungking.ics | 46 - libical/zoneinfo/Asia/Colombo.ics | 14 - libical/zoneinfo/Asia/Damascus.ics | 22 - libical/zoneinfo/Asia/Dhaka.ics | 14 - libical/zoneinfo/Asia/Dili.ics | 14 - libical/zoneinfo/Asia/Dubai.ics | 14 - libical/zoneinfo/Asia/Dushanbe.ics | 14 - libical/zoneinfo/Asia/Gaza.ics | 22 - libical/zoneinfo/Asia/Harbin.ics | 14 - libical/zoneinfo/Asia/Hong_Kong.ics | 14 - libical/zoneinfo/Asia/Hovd.ics | 14 - libical/zoneinfo/Asia/Irkutsk.ics | 22 - libical/zoneinfo/Asia/Istanbul.ics | 22 - libical/zoneinfo/Asia/Jakarta.ics | 14 - libical/zoneinfo/Asia/Jayapura.ics | 14 - libical/zoneinfo/Asia/Jerusalem.ics | 22 - libical/zoneinfo/Asia/Kabul.ics | 14 - libical/zoneinfo/Asia/Kamchatka.ics | 22 - libical/zoneinfo/Asia/Karachi.ics | 22 - libical/zoneinfo/Asia/Kashgar.ics | 14 - libical/zoneinfo/Asia/Katmandu.ics | 14 - libical/zoneinfo/Asia/Krasnoyarsk.ics | 22 - libical/zoneinfo/Asia/Kuala_Lumpur.ics | 14 - libical/zoneinfo/Asia/Kuching.ics | 14 - libical/zoneinfo/Asia/Kuwait.ics | 14 - libical/zoneinfo/Asia/Macao.ics | 14 - libical/zoneinfo/Asia/Magadan.ics | 22 - libical/zoneinfo/Asia/Manila.ics | 14 - libical/zoneinfo/Asia/Muscat.ics | 14 - libical/zoneinfo/Asia/Nicosia.ics | 22 - libical/zoneinfo/Asia/Novosibirsk.ics | 22 - libical/zoneinfo/Asia/Omsk.ics | 22 - libical/zoneinfo/Asia/Phnom_Penh.ics | 14 - libical/zoneinfo/Asia/Pontianak.ics | 14 - libical/zoneinfo/Asia/Pyongyang.ics | 14 - libical/zoneinfo/Asia/Qatar.ics | 14 - libical/zoneinfo/Asia/Rangoon.ics | 14 - libical/zoneinfo/Asia/Riyadh.ics | 14 - libical/zoneinfo/Asia/Saigon.ics | 14 - libical/zoneinfo/Asia/Sakhalin.ics | 22 - libical/zoneinfo/Asia/Samarkand.ics | 14 - libical/zoneinfo/Asia/Seoul.ics | 14 - libical/zoneinfo/Asia/Shanghai.ics | 14 - libical/zoneinfo/Asia/Singapore.ics | 14 - libical/zoneinfo/Asia/Taipei.ics | 14 - libical/zoneinfo/Asia/Tashkent.ics | 14 - libical/zoneinfo/Asia/Tbilisi.ics | 22 - libical/zoneinfo/Asia/Tehran.ics | 14 - libical/zoneinfo/Asia/Thimphu.ics | 14 - libical/zoneinfo/Asia/Tokyo.ics | 14 - libical/zoneinfo/Asia/Ujung_Pandang.ics | 14 - libical/zoneinfo/Asia/Ulaanbaatar.ics | 14 - libical/zoneinfo/Asia/Urumqi.ics | 14 - libical/zoneinfo/Asia/Vientiane.ics | 14 - libical/zoneinfo/Asia/Vladivostok.ics | 22 - libical/zoneinfo/Asia/Yakutsk.ics | 22 - libical/zoneinfo/Asia/Yekaterinburg.ics | 22 - libical/zoneinfo/Asia/Yerevan.ics | 22 - libical/zoneinfo/Atlantic/Azores.ics | 22 - libical/zoneinfo/Atlantic/Bermuda.ics | 22 - libical/zoneinfo/Atlantic/Canary.ics | 22 - libical/zoneinfo/Atlantic/Cape_Verde.ics | 14 - libical/zoneinfo/Atlantic/Faeroe.ics | 22 - libical/zoneinfo/Atlantic/Jan_Mayen.ics | 22 - libical/zoneinfo/Atlantic/Madeira.ics | 22 - libical/zoneinfo/Atlantic/Reykjavik.ics | 14 - libical/zoneinfo/Atlantic/South_Georgia.ics | 14 - libical/zoneinfo/Atlantic/St_Helena.ics | 14 - libical/zoneinfo/Atlantic/Stanley.ics | 22 - libical/zoneinfo/Australia/Adelaide.ics | 22 - libical/zoneinfo/Australia/Brisbane.ics | 14 - libical/zoneinfo/Australia/Broken_Hill.ics | 22 - libical/zoneinfo/Australia/Darwin.ics | 14 - libical/zoneinfo/Australia/Hobart.ics | 22 - libical/zoneinfo/Australia/Lindeman.ics | 14 - libical/zoneinfo/Australia/Lord_Howe.ics | 22 - libical/zoneinfo/Australia/Melbourne.ics | 22 - libical/zoneinfo/Australia/Perth.ics | 14 - libical/zoneinfo/Australia/Sydney.ics | 22 - libical/zoneinfo/Europe/Amsterdam.ics | 22 - libical/zoneinfo/Europe/Andorra.ics | 22 - libical/zoneinfo/Europe/Athens.ics | 22 - libical/zoneinfo/Europe/Belfast.ics | 22 - libical/zoneinfo/Europe/Belgrade.ics | 22 - libical/zoneinfo/Europe/Berlin.ics | 22 - libical/zoneinfo/Europe/Bratislava.ics | 22 - libical/zoneinfo/Europe/Brussels.ics | 22 - libical/zoneinfo/Europe/Bucharest.ics | 22 - libical/zoneinfo/Europe/Budapest.ics | 22 - libical/zoneinfo/Europe/Chisinau.ics | 22 - libical/zoneinfo/Europe/Copenhagen.ics | 22 - libical/zoneinfo/Europe/Dublin.ics | 22 - libical/zoneinfo/Europe/Gibraltar.ics | 22 - libical/zoneinfo/Europe/Helsinki.ics | 22 - libical/zoneinfo/Europe/Istanbul.ics | 22 - libical/zoneinfo/Europe/Kaliningrad.ics | 22 - libical/zoneinfo/Europe/Kiev.ics | 22 - libical/zoneinfo/Europe/Lisbon.ics | 22 - libical/zoneinfo/Europe/Ljubljana.ics | 22 - libical/zoneinfo/Europe/London.ics | 22 - libical/zoneinfo/Europe/Luxembourg.ics | 22 - libical/zoneinfo/Europe/Madrid.ics | 22 - libical/zoneinfo/Europe/Malta.ics | 22 - libical/zoneinfo/Europe/Minsk.ics | 22 - libical/zoneinfo/Europe/Monaco.ics | 22 - libical/zoneinfo/Europe/Moscow.ics | 22 - libical/zoneinfo/Europe/Nicosia.ics | 22 - libical/zoneinfo/Europe/Oslo.ics | 22 - libical/zoneinfo/Europe/Paris.ics | 22 - libical/zoneinfo/Europe/Prague.ics | 22 - libical/zoneinfo/Europe/Riga.ics | 22 - libical/zoneinfo/Europe/Rome.ics | 22 - libical/zoneinfo/Europe/Samara.ics | 22 - libical/zoneinfo/Europe/San_Marino.ics | 22 - libical/zoneinfo/Europe/Sarajevo.ics | 22 - libical/zoneinfo/Europe/Simferopol.ics | 22 - libical/zoneinfo/Europe/Skopje.ics | 22 - libical/zoneinfo/Europe/Sofia.ics | 22 - libical/zoneinfo/Europe/Stockholm.ics | 22 - libical/zoneinfo/Europe/Tallinn.ics | 22 - libical/zoneinfo/Europe/Tirane.ics | 22 - libical/zoneinfo/Europe/Uzhgorod.ics | 22 - libical/zoneinfo/Europe/Vaduz.ics | 22 - libical/zoneinfo/Europe/Vatican.ics | 22 - libical/zoneinfo/Europe/Vienna.ics | 22 - libical/zoneinfo/Europe/Vilnius.ics | 14 - libical/zoneinfo/Europe/Warsaw.ics | 22 - libical/zoneinfo/Europe/Zagreb.ics | 22 - libical/zoneinfo/Europe/Zaporozhye.ics | 22 - libical/zoneinfo/Europe/Zurich.ics | 22 - libical/zoneinfo/Indian/Antananarivo.ics | 14 - libical/zoneinfo/Indian/Chagos.ics | 14 - libical/zoneinfo/Indian/Christmas.ics | 14 - libical/zoneinfo/Indian/Cocos.ics | 14 - libical/zoneinfo/Indian/Comoro.ics | 14 - libical/zoneinfo/Indian/Kerguelen.ics | 14 - libical/zoneinfo/Indian/Mahe.ics | 14 - libical/zoneinfo/Indian/Maldives.ics | 14 - libical/zoneinfo/Indian/Mauritius.ics | 14 - libical/zoneinfo/Indian/Mayotte.ics | 14 - libical/zoneinfo/Indian/Reunion.ics | 14 - libical/zoneinfo/Makefile.am | 39 - libical/zoneinfo/Pacific/Apia.ics | 14 - libical/zoneinfo/Pacific/Auckland.ics | 22 - libical/zoneinfo/Pacific/Chatham.ics | 22 - libical/zoneinfo/Pacific/Easter.ics | 22 - libical/zoneinfo/Pacific/Efate.ics | 14 - libical/zoneinfo/Pacific/Enderbury.ics | 14 - libical/zoneinfo/Pacific/Fakaofo.ics | 14 - libical/zoneinfo/Pacific/Fiji.ics | 14 - libical/zoneinfo/Pacific/Funafuti.ics | 14 - libical/zoneinfo/Pacific/Galapagos.ics | 14 - libical/zoneinfo/Pacific/Gambier.ics | 14 - libical/zoneinfo/Pacific/Guadalcanal.ics | 14 - libical/zoneinfo/Pacific/Guam.ics | 14 - libical/zoneinfo/Pacific/Honolulu.ics | 14 - libical/zoneinfo/Pacific/Johnston.ics | 14 - libical/zoneinfo/Pacific/Kiritimati.ics | 14 - libical/zoneinfo/Pacific/Kosrae.ics | 14 - libical/zoneinfo/Pacific/Kwajalein.ics | 14 - libical/zoneinfo/Pacific/Majuro.ics | 14 - libical/zoneinfo/Pacific/Marquesas.ics | 14 - libical/zoneinfo/Pacific/Midway.ics | 14 - libical/zoneinfo/Pacific/Nauru.ics | 14 - libical/zoneinfo/Pacific/Niue.ics | 14 - libical/zoneinfo/Pacific/Norfolk.ics | 14 - libical/zoneinfo/Pacific/Noumea.ics | 14 - libical/zoneinfo/Pacific/Pago_Pago.ics | 14 - libical/zoneinfo/Pacific/Palau.ics | 14 - libical/zoneinfo/Pacific/Pitcairn.ics | 14 - libical/zoneinfo/Pacific/Ponape.ics | 14 - libical/zoneinfo/Pacific/Port_Moresby.ics | 14 - libical/zoneinfo/Pacific/Rarotonga.ics | 14 - libical/zoneinfo/Pacific/Saipan.ics | 14 - libical/zoneinfo/Pacific/Tahiti.ics | 14 - libical/zoneinfo/Pacific/Tarawa.ics | 14 - libical/zoneinfo/Pacific/Tongatapu.ics | 22 - libical/zoneinfo/Pacific/Truk.ics | 14 - libical/zoneinfo/Pacific/Wake.ics | 14 - libical/zoneinfo/Pacific/Wallis.ics | 14 - libical/zoneinfo/Pacific/Yap.ics | 14 - libical/zoneinfo/zones.tab | 378 - 719 files changed, 139701 deletions(-) delete mode 100644 libical/AUTHORS delete mode 100644 libical/COPYING delete mode 100644 libical/INSTALL delete mode 100644 libical/Makefile.am delete mode 100644 libical/NEWS delete mode 100644 libical/README delete mode 100644 libical/TEST delete mode 100644 libical/THANKS delete mode 100644 libical/TODO delete mode 100755 libical/autogen.sh delete mode 100644 libical/configure.in delete mode 100644 libical/design-data/.cvsignore delete mode 100644 libical/design-data/Makefile.am delete mode 100644 libical/design-data/components.txt delete mode 100644 libical/design-data/param-c-types.txt delete mode 100644 libical/design-data/parameters.csv delete mode 100644 libical/design-data/params-in-prop.txt delete mode 100644 libical/design-data/prop-to-value.txt delete mode 100644 libical/design-data/properties.csv delete mode 100644 libical/design-data/property-tokens.txt delete mode 100644 libical/design-data/restrictions.csv delete mode 100644 libical/design-data/status.txt delete mode 100644 libical/design-data/value-c-types.txt delete mode 100644 libical/design-data/value-mem-semantics.txt delete mode 100644 libical/design-data/value-types.csv delete mode 100644 libical/doc/.cvsignore delete mode 100644 libical/doc/AddingOrModifyingComponents.txt delete mode 100644 libical/doc/Makefile.am delete mode 100644 libical/doc/UsingLibical.lyx delete mode 100644 libical/doc/UsingLibical.ps delete mode 100644 libical/doc/UsingLibical.txt delete mode 100644 libical/examples/.cvsignore delete mode 100644 libical/examples/Makefile.am delete mode 100644 libical/examples/access-usecases.txt delete mode 100644 libical/examples/access_components.c delete mode 100644 libical/examples/access_properties_and_parameters.c delete mode 100644 libical/examples/access_store.c delete mode 100644 libical/examples/changenames.pl delete mode 100644 libical/examples/errors.c delete mode 100644 libical/examples/main.c delete mode 100644 libical/examples/parse_text.c delete mode 100644 libical/examples/usecases.c delete mode 100644 libical/scripts/.cvsignore delete mode 100644 libical/scripts/Makefile.am delete mode 100755 libical/scripts/mkderivedcomponents.pl delete mode 100755 libical/scripts/mkderivedparameters.pl delete mode 100755 libical/scripts/mkderivedproperties.pl delete mode 100755 libical/scripts/mkderivedvalues.pl delete mode 100644 libical/scripts/mkinclude.sh delete mode 100755 libical/scripts/mkneticali.pl delete mode 100755 libical/scripts/mkparameterrestrictions.pl delete mode 100755 libical/scripts/mkrestrictionrecords.pl delete mode 100755 libical/scripts/mkrestrictiontable.pl delete mode 100644 libical/scripts/readvaluesfile.pl delete mode 100644 libical/src/.cvsignore delete mode 100644 libical/src/Makefile.am delete mode 100644 libical/src/Net-ICal-Libical/MANIFEST delete mode 100644 libical/src/Net-ICal-Libical/Makefile.PL delete mode 100644 libical/src/Net-ICal-Libical/README delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm delete mode 100644 libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm delete mode 100644 libical/src/Net-ICal-Libical/netical.i delete mode 100644 libical/src/Net-ICal-Libical/netical_wrap.c delete mode 100644 libical/src/Net-ICal-Libical/netical_wrap.doc delete mode 100644 libical/src/Net-ICal-Libical/test-data/2446.mime delete mode 100644 libical/src/Net-ICal-Libical/test-data/error delete mode 100644 libical/src/Net-ICal-Libical/test-data/mail-examples delete mode 100644 libical/src/Net-ICal-Libical/test-data/no-error delete mode 100644 libical/src/Net-ICal-Libical/test-data/rfc2445.ics delete mode 100644 libical/src/Net-ICal-Libical/test-data/rfc2446.ics delete mode 100644 libical/src/Net-ICal-Libical/test-data/single-with-error delete mode 100644 libical/src/Net-ICal-Libical/test/component.pl delete mode 100755 libical/src/Net-ICal-Libical/test/libical.pl delete mode 100755 libical/src/Net-ICal-Libical/test/swig.pl delete mode 100644 libical/src/java/.cvsignore delete mode 100644 libical/src/java/ICalDurationType.java delete mode 100644 libical/src/java/ICalParameter.java delete mode 100644 libical/src/java/ICalPeriodType.java delete mode 100644 libical/src/java/ICalProperty.java delete mode 100644 libical/src/java/ICalRecurrenceType.java delete mode 100644 libical/src/java/ICalTimeType.java delete mode 100644 libical/src/java/ICalTriggerType.java delete mode 100644 libical/src/java/ICalValue.java delete mode 100644 libical/src/java/Makefile.am delete mode 100644 libical/src/java/VAgenda.java delete mode 100644 libical/src/java/VAlarm.java delete mode 100644 libical/src/java/VCalendar.java delete mode 100644 libical/src/java/VComponent.java delete mode 100644 libical/src/java/VEvent.java delete mode 100644 libical/src/java/VFreeBusy.java delete mode 100644 libical/src/java/VQuery.java delete mode 100644 libical/src/java/VToDo.java delete mode 100644 libical/src/java/jlibical_consts_cxx.h delete mode 100644 libical/src/java/jlibical_utils_cxx.cpp delete mode 100644 libical/src/java/jlibical_utils_cxx.h delete mode 100644 libical/src/java/jniICalDurationType_cxx.cpp delete mode 100644 libical/src/java/jniICalDurationType_cxx.h delete mode 100644 libical/src/java/jniICalPeriodType_cxx.cpp delete mode 100644 libical/src/java/jniICalPeriodType_cxx.h delete mode 100644 libical/src/java/jniICalRecurrenceType_cxx.cpp delete mode 100644 libical/src/java/jniICalRecurrenceType_cxx.h delete mode 100644 libical/src/java/jniICalTimeType_cxx.cpp delete mode 100644 libical/src/java/jniICalTimeType_cxx.h delete mode 100644 libical/src/java/jniICalTriggerType_cxx.cpp delete mode 100644 libical/src/java/jniICalTriggerType_cxx.h delete mode 100644 libical/src/java/net_cp_jlibical_ICalParameter_cxx.cpp delete mode 100644 libical/src/java/net_cp_jlibical_ICalParameter_cxx.h delete mode 100644 libical/src/java/net_cp_jlibical_ICalProperty_cxx.cpp delete mode 100644 libical/src/java/net_cp_jlibical_ICalProperty_cxx.h delete mode 100644 libical/src/java/net_cp_jlibical_ICalValue_cxx.cpp delete mode 100644 libical/src/java/net_cp_jlibical_ICalValue_cxx.h delete mode 100644 libical/src/java/net_cp_jlibical_VComponent_cxx.cpp delete mode 100644 libical/src/java/net_cp_jlibical_VComponent_cxx.h delete mode 100644 libical/src/java/testjni.java delete mode 100644 libical/src/libical/.cvsignore delete mode 100644 libical/src/libical/Makefile.am delete mode 100644 libical/src/libical/astime.h delete mode 100644 libical/src/libical/caldate.c delete mode 100644 libical/src/libical/ical.h delete mode 100644 libical/src/libical/icalarray.c delete mode 100644 libical/src/libical/icalarray.h delete mode 100644 libical/src/libical/icalattach.c delete mode 100644 libical/src/libical/icalattach.h delete mode 100644 libical/src/libical/icalattachimpl.h delete mode 100644 libical/src/libical/icalattendee.c delete mode 100644 libical/src/libical/icalattendee.h delete mode 100644 libical/src/libical/icalcomponent.c delete mode 100644 libical/src/libical/icalcomponent.h delete mode 100644 libical/src/libical/icalderivedparameter.c.in delete mode 100644 libical/src/libical/icalderivedparameter.h.in delete mode 100644 libical/src/libical/icalderivedproperty.c.in delete mode 100644 libical/src/libical/icalderivedproperty.h.in delete mode 100644 libical/src/libical/icalderivedvalue.c.in delete mode 100644 libical/src/libical/icalderivedvalue.h.in delete mode 100644 libical/src/libical/icalduration.c delete mode 100644 libical/src/libical/icalduration.h delete mode 100644 libical/src/libical/icalenums.c delete mode 100644 libical/src/libical/icalenums.h delete mode 100644 libical/src/libical/icalerror.c delete mode 100644 libical/src/libical/icalerror.h delete mode 100644 libical/src/libical/icallangbind.c delete mode 100644 libical/src/libical/icallangbind.h delete mode 100644 libical/src/libical/icallexer.l delete mode 100644 libical/src/libical/icalmemory.c delete mode 100644 libical/src/libical/icalmemory.h delete mode 100644 libical/src/libical/icalmime.c delete mode 100644 libical/src/libical/icalmime.h delete mode 100644 libical/src/libical/icalparameter.c delete mode 100644 libical/src/libical/icalparameter.h delete mode 100644 libical/src/libical/icalparameter_cxx.cpp delete mode 100644 libical/src/libical/icalparameter_cxx.h delete mode 100644 libical/src/libical/icalparameterimpl.h delete mode 100644 libical/src/libical/icalparser.c delete mode 100644 libical/src/libical/icalparser.h delete mode 100644 libical/src/libical/icalperiod.c delete mode 100644 libical/src/libical/icalperiod.h delete mode 100644 libical/src/libical/icalproperty.c delete mode 100644 libical/src/libical/icalproperty.h delete mode 100644 libical/src/libical/icalproperty_cxx.cpp delete mode 100644 libical/src/libical/icalproperty_cxx.h delete mode 100644 libical/src/libical/icalrecur.c delete mode 100644 libical/src/libical/icalrecur.h delete mode 100644 libical/src/libical/icalrestriction.c.in delete mode 100644 libical/src/libical/icalrestriction.h delete mode 100644 libical/src/libical/icaltime.c delete mode 100644 libical/src/libical/icaltime.h delete mode 100644 libical/src/libical/icaltimezone.c delete mode 100644 libical/src/libical/icaltimezone.h delete mode 100644 libical/src/libical/icaltypes.c delete mode 100644 libical/src/libical/icaltypes.h delete mode 100644 libical/src/libical/icalvalue.c delete mode 100644 libical/src/libical/icalvalue.h delete mode 100644 libical/src/libical/icalvalue_cxx.cpp delete mode 100644 libical/src/libical/icalvalue_cxx.h delete mode 100644 libical/src/libical/icalvalueimpl.h delete mode 100644 libical/src/libical/icalversion.h.in delete mode 100644 libical/src/libical/icalyacc.y delete mode 100644 libical/src/libical/icptrholder.h delete mode 100644 libical/src/libical/pvl.c delete mode 100644 libical/src/libical/pvl.h delete mode 100644 libical/src/libical/sspm.c delete mode 100644 libical/src/libical/sspm.h delete mode 100644 libical/src/libical/vcomponent.cpp delete mode 100644 libical/src/libical/vcomponent.h delete mode 100644 libical/src/libical/vsnprintf.c delete mode 100644 libical/src/libicalcap/.cvsignore delete mode 100644 libical/src/libicalcap/Makefile.am delete mode 100644 libical/src/libicalcap/client.c delete mode 100644 libical/src/libicalcap/icalcap.c delete mode 100644 libical/src/libicalcap/icalcap.h delete mode 100644 libical/src/libicalcap/icalcap_impl.h delete mode 100644 libical/src/libicalcap/icalcap_message.c delete mode 100644 libical/src/libicalcap/icalcap_message_impl.h delete mode 100644 libical/src/libicalcap/icalcap_rr.c delete mode 100644 libical/src/libicalcap/icalcap_server.c delete mode 100644 libical/src/libicalcap/icalcap_server.h delete mode 100644 libical/src/libicalcap/icalcap_server_impl.h delete mode 100644 libical/src/libicalcap/icalcap_session.c delete mode 100644 libical/src/libicalcap/icalcap_session.h delete mode 100644 libical/src/libicalcap/icalcap_session_impl.h delete mode 100644 libical/src/libicalcap/icalcap_utils.c delete mode 100644 libical/src/libicalss/.cvsignore delete mode 100644 libical/src/libicalss/Makefile.am delete mode 100644 libical/src/libicalss/icalbdbset.c delete mode 100644 libical/src/libicalss/icalbdbset.h delete mode 100644 libical/src/libicalss/icalbdbset_cxx.h delete mode 100644 libical/src/libicalss/icalbdbsetimpl.h delete mode 100644 libical/src/libicalss/icalcalendar.c delete mode 100644 libical/src/libicalss/icalcalendar.h delete mode 100644 libical/src/libicalss/icalcaputil.h delete mode 100644 libical/src/libicalss/icalclassify.c delete mode 100644 libical/src/libicalss/icalclassify.h delete mode 100644 libical/src/libicalss/icalcluster.c delete mode 100644 libical/src/libicalss/icalcluster.h delete mode 100644 libical/src/libicalss/icalclusterimpl.h delete mode 100644 libical/src/libicalss/icalcomponent.h delete mode 100644 libical/src/libicalss/icalcsdb.h delete mode 100644 libical/src/libicalss/icalcstp.c delete mode 100644 libical/src/libicalss/icalcstp.h delete mode 100644 libical/src/libicalss/icalcstpclient.c delete mode 100644 libical/src/libicalss/icalcstpclient.h delete mode 100644 libical/src/libicalss/icalcstpserver.c delete mode 100644 libical/src/libicalss/icalcstpserver.h delete mode 100644 libical/src/libicalss/icaldirset.c delete mode 100644 libical/src/libicalss/icaldirset.h delete mode 100644 libical/src/libicalss/icaldirsetimpl.h delete mode 100644 libical/src/libicalss/icalfileset.c delete mode 100644 libical/src/libicalss/icalfileset.h delete mode 100644 libical/src/libicalss/icalfilesetimpl.h delete mode 100644 libical/src/libicalss/icalgauge.c delete mode 100644 libical/src/libicalss/icalgauge.h delete mode 100644 libical/src/libicalss/icalgaugeimpl.h delete mode 100644 libical/src/libicalss/icalmessage.c delete mode 100644 libical/src/libicalss/icalmessage.h delete mode 100644 libical/src/libicalss/icalset.c delete mode 100644 libical/src/libicalss/icalset.h delete mode 100644 libical/src/libicalss/icalspanlist.c delete mode 100644 libical/src/libicalss/icalspanlist.h delete mode 100644 libical/src/libicalss/icalspanlist_cxx.cpp delete mode 100644 libical/src/libicalss/icalspanlist_cxx.h delete mode 100644 libical/src/libicalss/icalss.h delete mode 100644 libical/src/libicalss/icalsslexer.l delete mode 100644 libical/src/libicalss/icalssutil.c delete mode 100644 libical/src/libicalss/icalssutil.h delete mode 100644 libical/src/libicalss/icalssyacc.h delete mode 100644 libical/src/libicalss/icalssyacc.y delete mode 100644 libical/src/libicalvcal/.cvsignore delete mode 100644 libical/src/libicalvcal/Makefile.am delete mode 100644 libical/src/libicalvcal/README.TXT delete mode 100644 libical/src/libicalvcal/icalvcal.c delete mode 100644 libical/src/libicalvcal/icalvcal.h delete mode 100644 libical/src/libicalvcal/port.h delete mode 100644 libical/src/libicalvcal/vcaltest.c delete mode 100644 libical/src/libicalvcal/vcaltmp.c delete mode 100644 libical/src/libicalvcal/vcaltmp.h delete mode 100644 libical/src/libicalvcal/vcc.h delete mode 100644 libical/src/libicalvcal/vcc.y delete mode 100644 libical/src/libicalvcal/vctest.c delete mode 100644 libical/src/libicalvcal/vobject.c delete mode 100644 libical/src/libicalvcal/vobject.h delete mode 100644 libical/src/python/.cvsignore delete mode 100644 libical/src/python/Attendee.py delete mode 100644 libical/src/python/ChangeLog delete mode 100644 libical/src/python/Collection.py delete mode 100644 libical/src/python/Component.py delete mode 100644 libical/src/python/DerivedProperties.py delete mode 100644 libical/src/python/Duration.py delete mode 100644 libical/src/python/Error.py delete mode 100644 libical/src/python/Gauge.py delete mode 100644 libical/src/python/Libical.py delete mode 100644 libical/src/python/LibicalWrap.i delete mode 100644 libical/src/python/Makefile.am delete mode 100644 libical/src/python/Period.py delete mode 100644 libical/src/python/Property.py delete mode 100644 libical/src/python/Store.py delete mode 100644 libical/src/python/Time.py delete mode 100644 libical/src/python/littlefile.txt delete mode 100644 libical/src/python/python-binding.txt delete mode 100644 libical/src/python/test.py delete mode 100644 libical/src/test/.cvsignore delete mode 100644 libical/src/test/2445.ics delete mode 100644 libical/src/test/2446.ics delete mode 100644 libical/src/test/Makefile.am delete mode 100644 libical/src/test/copycluster.c delete mode 100644 libical/src/test/findobj.c delete mode 100644 libical/src/test/icaltestparser.c delete mode 100644 libical/src/test/itip.ics delete mode 100644 libical/src/test/outgoing.ics delete mode 100644 libical/src/test/process.c delete mode 100644 libical/src/test/recur.c delete mode 100644 libical/src/test/regression-classify.c delete mode 100644 libical/src/test/regression-component.c delete mode 100644 libical/src/test/regression-cxx.cpp delete mode 100644 libical/src/test/regression-recur.c delete mode 100644 libical/src/test/regression-storage.c delete mode 100644 libical/src/test/regression-utils.c delete mode 100644 libical/src/test/regression.c delete mode 100644 libical/src/test/regression.h delete mode 100644 libical/src/test/storage.c delete mode 100644 libical/src/test/stow.c delete mode 100644 libical/src/test/test_fileset.ics delete mode 100644 libical/src/test/testclassify.c delete mode 100644 libical/src/test/testmime.c delete mode 100644 libical/src/test/testvcal.c delete mode 100644 libical/test-data/.cvsignore delete mode 100644 libical/test-data/0 delete mode 100644 libical/test-data/1 delete mode 100644 libical/test-data/1.1 delete mode 100644 libical/test-data/2 delete mode 100644 libical/test-data/2445.ics delete mode 100644 libical/test-data/2446.ics delete mode 100644 libical/test-data/3 delete mode 100644 libical/test-data/4 delete mode 100644 libical/test-data/5 delete mode 100644 libical/test-data/6 delete mode 100644 libical/test-data/7 delete mode 100644 libical/test-data/Makefile.am delete mode 100644 libical/test-data/calendar.ics delete mode 100644 libical/test-data/classify.ics delete mode 100644 libical/test-data/complex-mime-error.txt delete mode 100644 libical/test-data/complex-mime.txt delete mode 100644 libical/test-data/incoming.ics delete mode 100644 libical/test-data/large.ics delete mode 100644 libical/test-data/overlaps.ics delete mode 100644 libical/test-data/process-calendar.ics delete mode 100644 libical/test-data/process-incoming.ics delete mode 100644 libical/test-data/recur-errors.txt delete mode 100644 libical/test-data/recur.txt delete mode 100644 libical/test-data/restriction.ics delete mode 100644 libical/test-data/simple-mime.txt delete mode 100644 libical/test-data/smallcluster.ics delete mode 100644 libical/test-data/spanlist.ics delete mode 100644 libical/test-data/stresstest.ics delete mode 100644 libical/test-data/user-cal.vcf delete mode 100644 libical/zoneinfo/.cvsignore delete mode 100644 libical/zoneinfo/Africa/Abidjan.ics delete mode 100644 libical/zoneinfo/Africa/Accra.ics delete mode 100644 libical/zoneinfo/Africa/Addis_Ababa.ics delete mode 100644 libical/zoneinfo/Africa/Algiers.ics delete mode 100644 libical/zoneinfo/Africa/Asmera.ics delete mode 100644 libical/zoneinfo/Africa/Bamako.ics delete mode 100644 libical/zoneinfo/Africa/Bangui.ics delete mode 100644 libical/zoneinfo/Africa/Banjul.ics delete mode 100644 libical/zoneinfo/Africa/Bissau.ics delete mode 100644 libical/zoneinfo/Africa/Blantyre.ics delete mode 100644 libical/zoneinfo/Africa/Brazzaville.ics delete mode 100644 libical/zoneinfo/Africa/Bujumbura.ics delete mode 100644 libical/zoneinfo/Africa/Cairo.ics delete mode 100644 libical/zoneinfo/Africa/Casablanca.ics delete mode 100644 libical/zoneinfo/Africa/Ceuta.ics delete mode 100644 libical/zoneinfo/Africa/Conakry.ics delete mode 100644 libical/zoneinfo/Africa/Dakar.ics delete mode 100644 libical/zoneinfo/Africa/Dar_es_Salaam.ics delete mode 100644 libical/zoneinfo/Africa/Djibouti.ics delete mode 100644 libical/zoneinfo/Africa/Douala.ics delete mode 100644 libical/zoneinfo/Africa/El_Aaiun.ics delete mode 100644 libical/zoneinfo/Africa/Freetown.ics delete mode 100644 libical/zoneinfo/Africa/Gaborone.ics delete mode 100644 libical/zoneinfo/Africa/Harare.ics delete mode 100644 libical/zoneinfo/Africa/Johannesburg.ics delete mode 100644 libical/zoneinfo/Africa/Kampala.ics delete mode 100644 libical/zoneinfo/Africa/Khartoum.ics delete mode 100644 libical/zoneinfo/Africa/Kigali.ics delete mode 100644 libical/zoneinfo/Africa/Kinshasa.ics delete mode 100644 libical/zoneinfo/Africa/Lagos.ics delete mode 100644 libical/zoneinfo/Africa/Libreville.ics delete mode 100644 libical/zoneinfo/Africa/Lome.ics delete mode 100644 libical/zoneinfo/Africa/Luanda.ics delete mode 100644 libical/zoneinfo/Africa/Lubumbashi.ics delete mode 100644 libical/zoneinfo/Africa/Lusaka.ics delete mode 100644 libical/zoneinfo/Africa/Malabo.ics delete mode 100644 libical/zoneinfo/Africa/Maputo.ics delete mode 100644 libical/zoneinfo/Africa/Maseru.ics delete mode 100644 libical/zoneinfo/Africa/Mbabane.ics delete mode 100644 libical/zoneinfo/Africa/Mogadishu.ics delete mode 100644 libical/zoneinfo/Africa/Monrovia.ics delete mode 100644 libical/zoneinfo/Africa/Nairobi.ics delete mode 100644 libical/zoneinfo/Africa/Ndjamena.ics delete mode 100644 libical/zoneinfo/Africa/Niamey.ics delete mode 100644 libical/zoneinfo/Africa/Nouakchott.ics delete mode 100644 libical/zoneinfo/Africa/Ouagadougou.ics delete mode 100644 libical/zoneinfo/Africa/Porto-Novo.ics delete mode 100644 libical/zoneinfo/Africa/Sao_Tome.ics delete mode 100644 libical/zoneinfo/Africa/Timbuktu.ics delete mode 100644 libical/zoneinfo/Africa/Tripoli.ics delete mode 100644 libical/zoneinfo/Africa/Tunis.ics delete mode 100644 libical/zoneinfo/Africa/Windhoek.ics delete mode 100644 libical/zoneinfo/America/Adak.ics delete mode 100644 libical/zoneinfo/America/Anchorage.ics delete mode 100644 libical/zoneinfo/America/Anguilla.ics delete mode 100644 libical/zoneinfo/America/Antigua.ics delete mode 100644 libical/zoneinfo/America/Araguaina.ics delete mode 100644 libical/zoneinfo/America/Aruba.ics delete mode 100644 libical/zoneinfo/America/Asuncion.ics delete mode 100644 libical/zoneinfo/America/Barbados.ics delete mode 100644 libical/zoneinfo/America/Belem.ics delete mode 100644 libical/zoneinfo/America/Belize.ics delete mode 100644 libical/zoneinfo/America/Boa_Vista.ics delete mode 100644 libical/zoneinfo/America/Bogota.ics delete mode 100644 libical/zoneinfo/America/Boise.ics delete mode 100644 libical/zoneinfo/America/Buenos_Aires.ics delete mode 100644 libical/zoneinfo/America/Cambridge_Bay.ics delete mode 100644 libical/zoneinfo/America/Cancun.ics delete mode 100644 libical/zoneinfo/America/Caracas.ics delete mode 100644 libical/zoneinfo/America/Catamarca.ics delete mode 100644 libical/zoneinfo/America/Cayenne.ics delete mode 100644 libical/zoneinfo/America/Cayman.ics delete mode 100644 libical/zoneinfo/America/Chicago.ics delete mode 100644 libical/zoneinfo/America/Chihuahua.ics delete mode 100644 libical/zoneinfo/America/Cordoba.ics delete mode 100644 libical/zoneinfo/America/Costa_Rica.ics delete mode 100644 libical/zoneinfo/America/Cuiaba.ics delete mode 100644 libical/zoneinfo/America/Curacao.ics delete mode 100644 libical/zoneinfo/America/Danmarkshavn.ics delete mode 100644 libical/zoneinfo/America/Dawson.ics delete mode 100644 libical/zoneinfo/America/Dawson_Creek.ics delete mode 100644 libical/zoneinfo/America/Denver.ics delete mode 100644 libical/zoneinfo/America/Detroit.ics delete mode 100644 libical/zoneinfo/America/Dominica.ics delete mode 100644 libical/zoneinfo/America/Edmonton.ics delete mode 100644 libical/zoneinfo/America/Eirunepe.ics delete mode 100644 libical/zoneinfo/America/El_Salvador.ics delete mode 100644 libical/zoneinfo/America/Fortaleza.ics delete mode 100644 libical/zoneinfo/America/Glace_Bay.ics delete mode 100644 libical/zoneinfo/America/Godthab.ics delete mode 100644 libical/zoneinfo/America/Goose_Bay.ics delete mode 100644 libical/zoneinfo/America/Grand_Turk.ics delete mode 100644 libical/zoneinfo/America/Grenada.ics delete mode 100644 libical/zoneinfo/America/Guadeloupe.ics delete mode 100644 libical/zoneinfo/America/Guatemala.ics delete mode 100644 libical/zoneinfo/America/Guayaquil.ics delete mode 100644 libical/zoneinfo/America/Guyana.ics delete mode 100644 libical/zoneinfo/America/Halifax.ics delete mode 100644 libical/zoneinfo/America/Havana.ics delete mode 100644 libical/zoneinfo/America/Hermosillo.ics delete mode 100644 libical/zoneinfo/America/Indiana/Indianapolis.ics delete mode 100644 libical/zoneinfo/America/Indiana/Knox.ics delete mode 100644 libical/zoneinfo/America/Indiana/Marengo.ics delete mode 100644 libical/zoneinfo/America/Indiana/Vevay.ics delete mode 100644 libical/zoneinfo/America/Indianapolis.ics delete mode 100644 libical/zoneinfo/America/Inuvik.ics delete mode 100644 libical/zoneinfo/America/Iqaluit.ics delete mode 100644 libical/zoneinfo/America/Jamaica.ics delete mode 100644 libical/zoneinfo/America/Jujuy.ics delete mode 100644 libical/zoneinfo/America/Juneau.ics delete mode 100644 libical/zoneinfo/America/Kentucky/Louisville.ics delete mode 100644 libical/zoneinfo/America/Kentucky/Monticello.ics delete mode 100644 libical/zoneinfo/America/La_Paz.ics delete mode 100644 libical/zoneinfo/America/Lima.ics delete mode 100644 libical/zoneinfo/America/Los_Angeles.ics delete mode 100644 libical/zoneinfo/America/Louisville.ics delete mode 100644 libical/zoneinfo/America/Maceio.ics delete mode 100644 libical/zoneinfo/America/Managua.ics delete mode 100644 libical/zoneinfo/America/Manaus.ics delete mode 100644 libical/zoneinfo/America/Martinique.ics delete mode 100644 libical/zoneinfo/America/Mazatlan.ics delete mode 100644 libical/zoneinfo/America/Mendoza.ics delete mode 100644 libical/zoneinfo/America/Menominee.ics delete mode 100644 libical/zoneinfo/America/Merida.ics delete mode 100644 libical/zoneinfo/America/Mexico_City.ics delete mode 100644 libical/zoneinfo/America/Miquelon.ics delete mode 100644 libical/zoneinfo/America/Monterrey.ics delete mode 100644 libical/zoneinfo/America/Montevideo.ics delete mode 100644 libical/zoneinfo/America/Montreal.ics delete mode 100644 libical/zoneinfo/America/Montserrat.ics delete mode 100644 libical/zoneinfo/America/Nassau.ics delete mode 100644 libical/zoneinfo/America/New_York.ics delete mode 100644 libical/zoneinfo/America/Nipigon.ics delete mode 100644 libical/zoneinfo/America/Nome.ics delete mode 100644 libical/zoneinfo/America/Noronha.ics delete mode 100644 libical/zoneinfo/America/North_Dakota/Center.ics delete mode 100644 libical/zoneinfo/America/Panama.ics delete mode 100644 libical/zoneinfo/America/Pangnirtung.ics delete mode 100644 libical/zoneinfo/America/Paramaribo.ics delete mode 100644 libical/zoneinfo/America/Phoenix.ics delete mode 100644 libical/zoneinfo/America/Port-au-Prince.ics delete mode 100644 libical/zoneinfo/America/Port_of_Spain.ics delete mode 100644 libical/zoneinfo/America/Porto_Velho.ics delete mode 100644 libical/zoneinfo/America/Puerto_Rico.ics delete mode 100644 libical/zoneinfo/America/Rainy_River.ics delete mode 100644 libical/zoneinfo/America/Rankin_Inlet.ics delete mode 100644 libical/zoneinfo/America/Recife.ics delete mode 100644 libical/zoneinfo/America/Regina.ics delete mode 100644 libical/zoneinfo/America/Rio_Branco.ics delete mode 100644 libical/zoneinfo/America/Rosario.ics delete mode 100644 libical/zoneinfo/America/Santiago.ics delete mode 100644 libical/zoneinfo/America/Santo_Domingo.ics delete mode 100644 libical/zoneinfo/America/Sao_Paulo.ics delete mode 100644 libical/zoneinfo/America/Scoresbysund.ics delete mode 100644 libical/zoneinfo/America/Shiprock.ics delete mode 100644 libical/zoneinfo/America/St_Johns.ics delete mode 100644 libical/zoneinfo/America/St_Kitts.ics delete mode 100644 libical/zoneinfo/America/St_Lucia.ics delete mode 100644 libical/zoneinfo/America/St_Thomas.ics delete mode 100644 libical/zoneinfo/America/St_Vincent.ics delete mode 100644 libical/zoneinfo/America/Swift_Current.ics delete mode 100644 libical/zoneinfo/America/Tegucigalpa.ics delete mode 100644 libical/zoneinfo/America/Thule.ics delete mode 100644 libical/zoneinfo/America/Thunder_Bay.ics delete mode 100644 libical/zoneinfo/America/Tijuana.ics delete mode 100644 libical/zoneinfo/America/Tortola.ics delete mode 100644 libical/zoneinfo/America/Vancouver.ics delete mode 100644 libical/zoneinfo/America/Whitehorse.ics delete mode 100644 libical/zoneinfo/America/Winnipeg.ics delete mode 100644 libical/zoneinfo/America/Yakutat.ics delete mode 100644 libical/zoneinfo/America/Yellowknife.ics delete mode 100644 libical/zoneinfo/Antarctica/Casey.ics delete mode 100644 libical/zoneinfo/Antarctica/Davis.ics delete mode 100644 libical/zoneinfo/Antarctica/DumontDUrville.ics delete mode 100644 libical/zoneinfo/Antarctica/Mawson.ics delete mode 100644 libical/zoneinfo/Antarctica/McMurdo.ics delete mode 100644 libical/zoneinfo/Antarctica/Palmer.ics delete mode 100644 libical/zoneinfo/Antarctica/South_Pole.ics delete mode 100644 libical/zoneinfo/Antarctica/Syowa.ics delete mode 100644 libical/zoneinfo/Antarctica/Vostok.ics delete mode 100644 libical/zoneinfo/Arctic/Longyearbyen.ics delete mode 100644 libical/zoneinfo/Asia/Aden.ics delete mode 100644 libical/zoneinfo/Asia/Almaty.ics delete mode 100644 libical/zoneinfo/Asia/Amman.ics delete mode 100644 libical/zoneinfo/Asia/Anadyr.ics delete mode 100644 libical/zoneinfo/Asia/Aqtau.ics delete mode 100644 libical/zoneinfo/Asia/Aqtobe.ics delete mode 100644 libical/zoneinfo/Asia/Ashgabat.ics delete mode 100644 libical/zoneinfo/Asia/Baghdad.ics delete mode 100644 libical/zoneinfo/Asia/Bahrain.ics delete mode 100644 libical/zoneinfo/Asia/Baku.ics delete mode 100644 libical/zoneinfo/Asia/Bangkok.ics delete mode 100644 libical/zoneinfo/Asia/Beirut.ics delete mode 100644 libical/zoneinfo/Asia/Bishkek.ics delete mode 100644 libical/zoneinfo/Asia/Brunei.ics delete mode 100644 libical/zoneinfo/Asia/Calcutta.ics delete mode 100644 libical/zoneinfo/Asia/Choibalsan.ics delete mode 100644 libical/zoneinfo/Asia/Chongqing.ics delete mode 100644 libical/zoneinfo/Asia/Chungking.ics delete mode 100644 libical/zoneinfo/Asia/Colombo.ics delete mode 100644 libical/zoneinfo/Asia/Damascus.ics delete mode 100644 libical/zoneinfo/Asia/Dhaka.ics delete mode 100644 libical/zoneinfo/Asia/Dili.ics delete mode 100644 libical/zoneinfo/Asia/Dubai.ics delete mode 100644 libical/zoneinfo/Asia/Dushanbe.ics delete mode 100644 libical/zoneinfo/Asia/Gaza.ics delete mode 100644 libical/zoneinfo/Asia/Harbin.ics delete mode 100644 libical/zoneinfo/Asia/Hong_Kong.ics delete mode 100644 libical/zoneinfo/Asia/Hovd.ics delete mode 100644 libical/zoneinfo/Asia/Irkutsk.ics delete mode 100644 libical/zoneinfo/Asia/Istanbul.ics delete mode 100644 libical/zoneinfo/Asia/Jakarta.ics delete mode 100644 libical/zoneinfo/Asia/Jayapura.ics delete mode 100644 libical/zoneinfo/Asia/Jerusalem.ics delete mode 100644 libical/zoneinfo/Asia/Kabul.ics delete mode 100644 libical/zoneinfo/Asia/Kamchatka.ics delete mode 100644 libical/zoneinfo/Asia/Karachi.ics delete mode 100644 libical/zoneinfo/Asia/Kashgar.ics delete mode 100644 libical/zoneinfo/Asia/Katmandu.ics delete mode 100644 libical/zoneinfo/Asia/Krasnoyarsk.ics delete mode 100644 libical/zoneinfo/Asia/Kuala_Lumpur.ics delete mode 100644 libical/zoneinfo/Asia/Kuching.ics delete mode 100644 libical/zoneinfo/Asia/Kuwait.ics delete mode 100644 libical/zoneinfo/Asia/Macao.ics delete mode 100644 libical/zoneinfo/Asia/Magadan.ics delete mode 100644 libical/zoneinfo/Asia/Manila.ics delete mode 100644 libical/zoneinfo/Asia/Muscat.ics delete mode 100644 libical/zoneinfo/Asia/Nicosia.ics delete mode 100644 libical/zoneinfo/Asia/Novosibirsk.ics delete mode 100644 libical/zoneinfo/Asia/Omsk.ics delete mode 100644 libical/zoneinfo/Asia/Phnom_Penh.ics delete mode 100644 libical/zoneinfo/Asia/Pontianak.ics delete mode 100644 libical/zoneinfo/Asia/Pyongyang.ics delete mode 100644 libical/zoneinfo/Asia/Qatar.ics delete mode 100644 libical/zoneinfo/Asia/Rangoon.ics delete mode 100644 libical/zoneinfo/Asia/Riyadh.ics delete mode 100644 libical/zoneinfo/Asia/Saigon.ics delete mode 100644 libical/zoneinfo/Asia/Sakhalin.ics delete mode 100644 libical/zoneinfo/Asia/Samarkand.ics delete mode 100644 libical/zoneinfo/Asia/Seoul.ics delete mode 100644 libical/zoneinfo/Asia/Shanghai.ics delete mode 100644 libical/zoneinfo/Asia/Singapore.ics delete mode 100644 libical/zoneinfo/Asia/Taipei.ics delete mode 100644 libical/zoneinfo/Asia/Tashkent.ics delete mode 100644 libical/zoneinfo/Asia/Tbilisi.ics delete mode 100644 libical/zoneinfo/Asia/Tehran.ics delete mode 100644 libical/zoneinfo/Asia/Thimphu.ics delete mode 100644 libical/zoneinfo/Asia/Tokyo.ics delete mode 100644 libical/zoneinfo/Asia/Ujung_Pandang.ics delete mode 100644 libical/zoneinfo/Asia/Ulaanbaatar.ics delete mode 100644 libical/zoneinfo/Asia/Urumqi.ics delete mode 100644 libical/zoneinfo/Asia/Vientiane.ics delete mode 100644 libical/zoneinfo/Asia/Vladivostok.ics delete mode 100644 libical/zoneinfo/Asia/Yakutsk.ics delete mode 100644 libical/zoneinfo/Asia/Yekaterinburg.ics delete mode 100644 libical/zoneinfo/Asia/Yerevan.ics delete mode 100644 libical/zoneinfo/Atlantic/Azores.ics delete mode 100644 libical/zoneinfo/Atlantic/Bermuda.ics delete mode 100644 libical/zoneinfo/Atlantic/Canary.ics delete mode 100644 libical/zoneinfo/Atlantic/Cape_Verde.ics delete mode 100644 libical/zoneinfo/Atlantic/Faeroe.ics delete mode 100644 libical/zoneinfo/Atlantic/Jan_Mayen.ics delete mode 100644 libical/zoneinfo/Atlantic/Madeira.ics delete mode 100644 libical/zoneinfo/Atlantic/Reykjavik.ics delete mode 100644 libical/zoneinfo/Atlantic/South_Georgia.ics delete mode 100644 libical/zoneinfo/Atlantic/St_Helena.ics delete mode 100644 libical/zoneinfo/Atlantic/Stanley.ics delete mode 100644 libical/zoneinfo/Australia/Adelaide.ics delete mode 100644 libical/zoneinfo/Australia/Brisbane.ics delete mode 100644 libical/zoneinfo/Australia/Broken_Hill.ics delete mode 100644 libical/zoneinfo/Australia/Darwin.ics delete mode 100644 libical/zoneinfo/Australia/Hobart.ics delete mode 100644 libical/zoneinfo/Australia/Lindeman.ics delete mode 100644 libical/zoneinfo/Australia/Lord_Howe.ics delete mode 100644 libical/zoneinfo/Australia/Melbourne.ics delete mode 100644 libical/zoneinfo/Australia/Perth.ics delete mode 100644 libical/zoneinfo/Australia/Sydney.ics delete mode 100644 libical/zoneinfo/Europe/Amsterdam.ics delete mode 100644 libical/zoneinfo/Europe/Andorra.ics delete mode 100644 libical/zoneinfo/Europe/Athens.ics delete mode 100644 libical/zoneinfo/Europe/Belfast.ics delete mode 100644 libical/zoneinfo/Europe/Belgrade.ics delete mode 100644 libical/zoneinfo/Europe/Berlin.ics delete mode 100644 libical/zoneinfo/Europe/Bratislava.ics delete mode 100644 libical/zoneinfo/Europe/Brussels.ics delete mode 100644 libical/zoneinfo/Europe/Bucharest.ics delete mode 100644 libical/zoneinfo/Europe/Budapest.ics delete mode 100644 libical/zoneinfo/Europe/Chisinau.ics delete mode 100644 libical/zoneinfo/Europe/Copenhagen.ics delete mode 100644 libical/zoneinfo/Europe/Dublin.ics delete mode 100644 libical/zoneinfo/Europe/Gibraltar.ics delete mode 100644 libical/zoneinfo/Europe/Helsinki.ics delete mode 100644 libical/zoneinfo/Europe/Istanbul.ics delete mode 100644 libical/zoneinfo/Europe/Kaliningrad.ics delete mode 100644 libical/zoneinfo/Europe/Kiev.ics delete mode 100644 libical/zoneinfo/Europe/Lisbon.ics delete mode 100644 libical/zoneinfo/Europe/Ljubljana.ics delete mode 100644 libical/zoneinfo/Europe/London.ics delete mode 100644 libical/zoneinfo/Europe/Luxembourg.ics delete mode 100644 libical/zoneinfo/Europe/Madrid.ics delete mode 100644 libical/zoneinfo/Europe/Malta.ics delete mode 100644 libical/zoneinfo/Europe/Minsk.ics delete mode 100644 libical/zoneinfo/Europe/Monaco.ics delete mode 100644 libical/zoneinfo/Europe/Moscow.ics delete mode 100644 libical/zoneinfo/Europe/Nicosia.ics delete mode 100644 libical/zoneinfo/Europe/Oslo.ics delete mode 100644 libical/zoneinfo/Europe/Paris.ics delete mode 100644 libical/zoneinfo/Europe/Prague.ics delete mode 100644 libical/zoneinfo/Europe/Riga.ics delete mode 100644 libical/zoneinfo/Europe/Rome.ics delete mode 100644 libical/zoneinfo/Europe/Samara.ics delete mode 100644 libical/zoneinfo/Europe/San_Marino.ics delete mode 100644 libical/zoneinfo/Europe/Sarajevo.ics delete mode 100644 libical/zoneinfo/Europe/Simferopol.ics delete mode 100644 libical/zoneinfo/Europe/Skopje.ics delete mode 100644 libical/zoneinfo/Europe/Sofia.ics delete mode 100644 libical/zoneinfo/Europe/Stockholm.ics delete mode 100644 libical/zoneinfo/Europe/Tallinn.ics delete mode 100644 libical/zoneinfo/Europe/Tirane.ics delete mode 100644 libical/zoneinfo/Europe/Uzhgorod.ics delete mode 100644 libical/zoneinfo/Europe/Vaduz.ics delete mode 100644 libical/zoneinfo/Europe/Vatican.ics delete mode 100644 libical/zoneinfo/Europe/Vienna.ics delete mode 100644 libical/zoneinfo/Europe/Vilnius.ics delete mode 100644 libical/zoneinfo/Europe/Warsaw.ics delete mode 100644 libical/zoneinfo/Europe/Zagreb.ics delete mode 100644 libical/zoneinfo/Europe/Zaporozhye.ics delete mode 100644 libical/zoneinfo/Europe/Zurich.ics delete mode 100644 libical/zoneinfo/Indian/Antananarivo.ics delete mode 100644 libical/zoneinfo/Indian/Chagos.ics delete mode 100644 libical/zoneinfo/Indian/Christmas.ics delete mode 100644 libical/zoneinfo/Indian/Cocos.ics delete mode 100644 libical/zoneinfo/Indian/Comoro.ics delete mode 100644 libical/zoneinfo/Indian/Kerguelen.ics delete mode 100644 libical/zoneinfo/Indian/Mahe.ics delete mode 100644 libical/zoneinfo/Indian/Maldives.ics delete mode 100644 libical/zoneinfo/Indian/Mauritius.ics delete mode 100644 libical/zoneinfo/Indian/Mayotte.ics delete mode 100644 libical/zoneinfo/Indian/Reunion.ics delete mode 100644 libical/zoneinfo/Makefile.am delete mode 100644 libical/zoneinfo/Pacific/Apia.ics delete mode 100644 libical/zoneinfo/Pacific/Auckland.ics delete mode 100644 libical/zoneinfo/Pacific/Chatham.ics delete mode 100644 libical/zoneinfo/Pacific/Easter.ics delete mode 100644 libical/zoneinfo/Pacific/Efate.ics delete mode 100644 libical/zoneinfo/Pacific/Enderbury.ics delete mode 100644 libical/zoneinfo/Pacific/Fakaofo.ics delete mode 100644 libical/zoneinfo/Pacific/Fiji.ics delete mode 100644 libical/zoneinfo/Pacific/Funafuti.ics delete mode 100644 libical/zoneinfo/Pacific/Galapagos.ics delete mode 100644 libical/zoneinfo/Pacific/Gambier.ics delete mode 100644 libical/zoneinfo/Pacific/Guadalcanal.ics delete mode 100644 libical/zoneinfo/Pacific/Guam.ics delete mode 100644 libical/zoneinfo/Pacific/Honolulu.ics delete mode 100644 libical/zoneinfo/Pacific/Johnston.ics delete mode 100644 libical/zoneinfo/Pacific/Kiritimati.ics delete mode 100644 libical/zoneinfo/Pacific/Kosrae.ics delete mode 100644 libical/zoneinfo/Pacific/Kwajalein.ics delete mode 100644 libical/zoneinfo/Pacific/Majuro.ics delete mode 100644 libical/zoneinfo/Pacific/Marquesas.ics delete mode 100644 libical/zoneinfo/Pacific/Midway.ics delete mode 100644 libical/zoneinfo/Pacific/Nauru.ics delete mode 100644 libical/zoneinfo/Pacific/Niue.ics delete mode 100644 libical/zoneinfo/Pacific/Norfolk.ics delete mode 100644 libical/zoneinfo/Pacific/Noumea.ics delete mode 100644 libical/zoneinfo/Pacific/Pago_Pago.ics delete mode 100644 libical/zoneinfo/Pacific/Palau.ics delete mode 100644 libical/zoneinfo/Pacific/Pitcairn.ics delete mode 100644 libical/zoneinfo/Pacific/Ponape.ics delete mode 100644 libical/zoneinfo/Pacific/Port_Moresby.ics delete mode 100644 libical/zoneinfo/Pacific/Rarotonga.ics delete mode 100644 libical/zoneinfo/Pacific/Saipan.ics delete mode 100644 libical/zoneinfo/Pacific/Tahiti.ics delete mode 100644 libical/zoneinfo/Pacific/Tarawa.ics delete mode 100644 libical/zoneinfo/Pacific/Tongatapu.ics delete mode 100644 libical/zoneinfo/Pacific/Truk.ics delete mode 100644 libical/zoneinfo/Pacific/Wake.ics delete mode 100644 libical/zoneinfo/Pacific/Wallis.ics delete mode 100644 libical/zoneinfo/Pacific/Yap.ics delete mode 100644 libical/zoneinfo/zones.tab (limited to 'libical') 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 -Andrea Campi - -Original author May 1998-December 2001, Eric Busboom diff --git a/libical/COPYING b/libical/COPYING deleted file mode 100644 index e69de29bb2..0000000000 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 for testing libical against -UnixWare. - -Graham Davison for MacOS support and -miscelaneous code bits - -Seth Alves for the first cut at the Makefile.am -files and various utility functions. - -Russ Steinthal for several utility functions and -comments. - -Ola Lundqvist for the vCal test data file. - -Colin DuPlantis for new functions in icalparser.c - -Holger Schmidt for all of icalcstp.c, The -CSTP protocol implementation, and modifications to icalcstp.h - -Gisle Hannemyr 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 -, JP Rosevear , Ettore -Perazzoli , Christopher James Lahey -, Peter Williams ) for -miscelaneous patches and adjustments to the build system. - -Cornelius Schumacher for many insightful -suggestions and a few patches. - -Mark D. Anderson for discussions and ideas. - -Martin Neimeier for correcting bugs in icalrecur.c - -Tom Leitner For several bug fixes in -compiling on Tru64 UNIX. - -Patrick Lewis for several bug reports and -substantial ( co-authorship) contributions to the Python bindings - -Larry W. Virden for several bug reports in compiling -on Solaris. - -Bryan Bartone for code changes based on porting -libical to Windows. - -Hubert V for checking and analyzing the output -of the recurrence rule system. - -Jonathan Yue for icalproperty_get_name() - -Jeff Mace for finding bugs in gauges. - -John Gray for routing memory leaks, porting to -WIN32, and taking over leadership of the project. - -Andrea Campi for miscellaneous updates and beginning -of Doxygen documentation. - -Paul Lindner for several contributions, including -C++ binding, reentrant parser, thread safe memory allocator, and a -lot of documentation. - -Mark Tearle 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 . -2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with . -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 df44 D<147F903803FFC090380FC1E0 -90381F0070017E13784913383901F801F83803F003120713E0120FD81FC013F091C7FC48 -5AA2127F90C8FCA35A5AA45AA3153015381578007C14F0007EEB01E0003EEB03C0EC0F80 -6CEB3E00380F81F83803FFE0C690C7FC1D2677A426>99 D109 D<3903C003F0390FF01FFC391E -783C0F381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FC -EAE0FE5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E2126 -79A423>114 D<14FE903807FF8090380F83C090383E00E04913F00178137001F813F000 -01130313F0A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C013 -00143F141F140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB4 -5AD801FEC7FC1C267AA422>II<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C0 -1270013F131F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE12 -0349EBFC0EA20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A -00F83C78E090393FF03FC090390FC00F00272679A42D>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb ecbx1200 12 42 -/Fb 42 122 df45 DI49 DII<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87 -EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A -485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038> -I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01C0C9 -FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F06D13 -804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B5D6C -4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC6CB6 -12F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F13FC -49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFFE048495A5A1400 -485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF8000FF -017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F13E0 -A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913806C -018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC9038003FF02D42 -7BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8EA3F -00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14035D -14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A2F44 -7AC238>I65 D67 -D69 D72 D76 -DII<923807FFC092B512FE0207ECFFC0 -021F15F091267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E -6C7E49486F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13E0A2 -4819F04982003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A2 -6D5E6C19F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D -6C4B5A6D6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F802 -0715C002004AC8FC030713C047467AC454>II83 D<003FBA12E0A59026FE000FEB8003D8 -7FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8481978 -A5C81700B3B3A20107B8FCA545437CC24E>I86 -D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E -A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 -0313E0481380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEB -FFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 -DIIIIIII<137C48 -B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF -A512037EB3AFB6FCA518467CC520>II108 -D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E4880913D -87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C13 -0F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E> -I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F801F00039039 -9F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>II<90397FC00FF8B590B57E02C314 -E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E0 -5C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E49 -13006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536 -407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE -6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E> -114 D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E -00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C80000380 -6C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C14 -1FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7C -AD2C>III120 DI -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc ectt1000 10 78 -/Fc 78 123 df<121FEA3F80EA7FC0EAFFE0B0EA7FC0AEEA1F00C7FCA7121FEA3F80EA7F -C0EAFFE0A5EA7FC0EA3F80EA1F000B3470B32C>33 D<003C131E007F137F481480A66C14 -00A6007E7FA6003E133EA3003C131E001C131C191977B32C>I39 D<143814FC13011303EB07F8EB0FF0EB1F -C0EB3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5A -AC7E127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0F -F0EB07F8EB03FC130113001438164272B92C>I<127012FC7E7E6C7E6C7EEA0FE06C7E6C -7E6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301A314FC1300AC13 -0114F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE485A485A485A485A -EA3FC0485A48C7FC5A5A1270164279B92C>II<147014F8AF003FB612E0B712F8A4C700F8C7FCB0147025267D -AB2C>II<007FB512F0B612F8A36C14F0 -1D0579942C>I<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507 -ED0F80A2151F16005D153E157E157CA215FC5D14015D14035D14075D140F5D141F92C7FC -5C143EA2147E147C14FC5C13015C13035C13075C130F5C131F91C8FC5B133EA2137E137C -13FC5B12015B12035B12075B120F5B121F90C9FCA25A123E127E127C12FC5AA212702141 -7BB92C>II<1307497EA2131FA2133F -137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C34 -77B32C>IIII<000FB512FE48 -80A35D0180C8FCADEB83FE90389FFF8090B512E015F8819038FE03FE9038F000FF01C07F -49EB3F8090C7121F6C15C0C8120FA2ED07E0A4123C127EB4FC150F16C0A248141F007EEC -3F80007FEC7F006C6C5B6D485A391FF80FFC6CB55A6C5C000114C06C6C90C7FCEB0FF823 -347CB22C>II<1278B712C016 -E0A316C000FCC7EA3F80ED7F0015FE00785CC712014A5A4A5A5D140F5D4A5A143F92C7FC -5C147E14FE5C13015CA2495AA213075CA3495AA4495AA5133F91C8FCAA131E23357CB32C ->III<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F -00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C>II<007FB612F0B712F8A36C15F0CAFCA8007FB612F0B712F8A36C15F025127DA1 -2C>61 D64 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>II<007FB512F8B612FCA36C14F839000FC000B3B3 -A5007FB512F8B612FCA36C14F81E3379B22C>I<0107B512804914C0A36D148090390003 -F000B3AF1218127EA2B4FCA24A5A48130F007F131F9038C07FC06CB55A6C91C7FC6C5B00 -0313F838007FC022347BB22C>II<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15F025 -337DB22C>II< -D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA2148013C7 -14C0A213C314E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587A21407 -15C7A2140315E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F8027337EB2 -2C>II<007FB512C0B612F88115FF6C15802603F00013C0153F -ED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280160015 -FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>II<387FFFFCB67E -15E015F86C803907E007FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE14 -0790B55A5D15E081819038E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5 -ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381FF80790B5EA0F804814CF000714 -FF5A381FF01F383FC003497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC -127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07 -FF02001380153FED1FC0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0 -EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007F -B612FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA22733 -7EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C03B03F00001F800B3AF6D130300 -015DA26D130700005D6D130F017F495A6D6C485AECE0FF6DB5C7FC6D5B010313F86D5B90 -38003F802B3480B22C>II -I<3A3FFF03FFE0484913F0148714076C6D13E03A01F800FE007F0000495A13FE017E5BEB -7F03013F5B1487011F5B14CF010F5B14FF6D5BA26D90C7FCA26D5AA26D5AA2497EA2497E -A2497F81EB0FCF81EB1FC7EC87F0EB3F83EC03F8EB7F01017E7FEBFE00497F0001147E49 -137F000380491480151FD87FFEEBFFFC6D5AB514FE6C15FC497E27337EB22C>II<003FB612C0 -4815E0A4007EC7EA1FC0ED3F80A2ED7F00157E15FE4A5A003C5CC712034A5AA24A5A4A5A -A24A5A4AC7FCA214FE495AA2495A495AA2495A495AA2495A49C8FCA213FE485AA24848EB -03C049EB07E01207485A5B121F485AA248C7FCB7FCA46C15C023337CB22C>I<007FB6FC -B71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF8 -1407EC01FC381F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF8 -00EA7FC090C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EB -FE1F3A003FF007FC27247CA32C>97 DI<903803FFE0011F13F8017F13FE48B5FC48 -804848C6FCEA0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB -1F806C7E6D133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC2124 -7AA32C>IIIIII<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFF -C080B5FC7EA2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2 -EC7FC0A3EC3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3B3A2141F003C1480 -007E133FB414005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467CB32C>II<387FFF -E0B57EA37EEA0003B3B3A5007FB61280B712C0A36C158022337BB22C>I<3A7F83F007E0 -9039CFFC1FF83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01 -F013E001E013C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0 -023F137F2D2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038 -F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E014002924 -7FA32C>II<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000019038F07FC091 -38801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D -13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8EC3FC091C8 -FCAD387FFFE0B57EA36C5B27367FA32C>I<903903FC078090391FFF0FC0017F13CF48B5 -12EF4814FF3807FE07380FF00148487E49137F4848133F90C7FC48141F127E150F5AA87E -007E141FA26C143F7F6C6C137F6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D13 -0FEB07F890C7FCAD0203B5FC4A1480A36E140029367DA32C>II<90387FF8700003B512F8120F5A5A387F -C00F387E00034813015AA36CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0 -C66C13F8010113FCEB0007EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE90 -38F007FC90B5FC15F815E000F8148039701FFC0020247AA32C>I<131E133FA9007FB6FC -B71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB5128016 -0001035B6D13F89038003FE0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB -000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF902603FE0713002924 -7FA32C>I<3A7FFF01FFFCB514FE148314016C15FC3A03E0000F80A26D131F00011500A2 -6D5B0000143EA26D137E017C137CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA2 -14C701075BA214EF01035BA214FF6D90C7FCA26D5A147C27247EA32C>II<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 -D44 -DII<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB61280A42136 -79B530>49 DIII<001C15C0D81F80130701F8 -137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFFE0017F13 -F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0A216F8A3 -121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F4913806C6C -481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>II<123C123EEA3FE090B71280A41700485D5E5E5E -5EA2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA24A5A143F -4AC8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A29397BB7 -30>I<49B47E010F13F0013F13FC9038FE01FF3A01F8007F804848EB3FC04848EB1FE015 -0F484814F01507121FA27F7F7F6D130F01FF14E014C09138E01FC06CEBF83F9138FE7F80 -6C9038FFFE005D6C14F06C14FC6C14FF6D14806D14C090B612E0D803FD14F02607F07F13 -F848487E261FC00F13FC383F8003007F010013FE90C7127F151F00FE140715031501A215 -00A216FC7E6C14016D14F86C6C13036DEB07F06C6CEB0FE0D80FFEEB7FC00003B61200C6 -14FC013F13F00103138027377CB530>I65 DIIIII< -B6D8FC03B612F0A426007FF8C70001EBE000B3A391B8FCA402F8C71201B3A6B6D8FC03B6 -12F0A444397DB84B>72 DI76 DIIII82 DI<003FB91280A4D9F800EBF003D87FC0923800 -7FC049161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE01 -0FB7FCA43B387DB742>IIII<007FB5D8F803B512F8A4C66C48C7D80FF0C7 -FC6D6C5D6D5E6F495A6D6D49C8FC7F6D6D137E6F5B6DEBF8016D5D6F485A6E6C485A023F -130FDA1FFF5BEE9F806E01FFC9FC805E6E5B6E5B80826F7E153F826F7F5D4B7F92B57EA2 -DA01F97FDA03F17F03F07F913807E07FDA0FC07F021F6D7E4B7E4A486C7F027E8102FE6D -7F4A7F49488149486D7F0107804A6E7E49488149486E7E013F81017F83B60107B61280A4 -41397DB848>I97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138 -FE03FFDAF00013804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3 -EE1FF8A217F06E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8 -D9E00F13E0D9C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF801380 -2603FE0013C048485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127F -A27F123FED01E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13 -F00101138023257DA42A>II<903803FF80011F13F0017F13FC3901FF83FE3A03FE007F804848133F48 -4814C0001FEC1FE05B003FEC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA3 -6C7E1678121F6C6C14F86D14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13 -FC010113E025257DA42C>II<161FD907FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801 -131F48486C138F003F15CF4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C -4890C7FC3907FE07FE48B512F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512 -F8EDFF8016E06C15F86C816C815A001F81393FC0000F48C8138048157F5A163FA36C157F -6C16006D5C6C6C495AD81FF0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B -377DA530>I<13FFB5FCA412077EAFED7FC0913803FFF8020F13FE91381F03FFDA3C0113 -8014784A7E4A14C05CA25CA291C7FCB3A3B5D8FC3F13FFA4303A7DB935>II<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>IIIII -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe ecbx1440 14.4 35 -/Fe 35 122 df27 -D<151E153E15FE1403140F147FEB07FF0003B5FCB6FCA3EBF87FEAFC00C7FCB3B3B3A600 -7FB712FCA52E4E76CD42>49 DI<913807FFC002 -7F13FC0103B67E010F15E090261FF80313F890267FC0007F01FEC7EA3FFE48488148486E -138013FE486C6C6D13C0804817E080A66C5B18C06C5B6C90C75AD80038168090C8FC4C13 -00A24C5A5F4C5A4B5B4B13C0030F5BDB7FFEC7FC91387FFFF816C016FCEEFF80DA000313 -E09238007FF8EE3FFE707E70138018C07013E018F07013F8A218FC82A218FEA3EA03C0EA -0FF0EA3FFC487EA2B5FCA218FCA25E18F8A26C4816F0495C4916E0D83FE04A13C06C485C -D80FF04A1380D807FE91387FFE003B03FFE003FFFC6C90B65A6C6C15E0010F92C7FC0101 -14FCD9001F1380374F7BCD42>I<17FC1601A216031607160FA2161F163F167FA216FF5D -5DA25D5D5D167F153E157E15FC15F8EC01F01403EC07E015C0EC0F80141FEC3F00143E5C -14FC495A5C495A1307495A5C49C7FC5B137E137C5B1201485A5B485A120F485A90C8FC12 -3E127E5ABA1280A5C901FCC7FCAF021FB71280A5394F7CCE42>I<486C150601F0153E01 -FEEC01FED9FFF0133F91B65A5F5F5F5F5F94C7FC16FC5E16E093C8FC15FC01F0138091CA -FCAC913807FF80023F13F891B512FE01F36E7E9026FFFC0113E09139E0007FF891C76C7E -496E7E01F86E7E5B7013804916C0C9FC18E08218F0A418F8A31203EA0FE0EA3FF8487EA2 -12FF7FA218F0A25B5E6C4816E05B01C016C06CC85A18806C6C4A13007FD80FF04A5A6C6C -ECFFFCD803FE4913F02701FFE00F5B6C6CB612806D92C7FC010F14F8010114C09026003F -FCC8FC354F7ACD42>II66 D<932603FFF01407047F01FF140F0307B600E0131F033F03F8133F92 -B700FE137F02039126C003FF13FF020F01F8C7EA3FC1023F01C0EC0FE391B5C80003B5FC -4901FC814949814901E082011F498249498292CA7E4948834948835A4A83485B4885A248 -49187FA2485B1B3FA2485B1B1FA25AA21B0091CDFCA2B5FCAE7EA280A36C1A1FA36C7FA2 -1B3F6C7F1B3E6C7F1B7E6C6D187C6C1AFC6E18F86C19016D6CEF03F06D7E6FEE07E06D6D -EE0FC001076DEE1F806D01F8EE3F006D6D16FE6D01FF4B5A023F01C0EC07F8020F01FCEC -3FF00203903AFFC001FFC0020091B6C7FC033F15FC030715F0DB007F1480040301F0C8FC -505479D25F>II70 D72 -DI76 D82 DI85 D97 DI<913803FFE0023F13FE91B67E010315E0010F9038003F -F8D93FFCEB07FC4948497E4948131F4849497E485B485BA24890C7FC5A5B003F6F5A705A -705A007F92C8FC5BA312FFAD127F7FA3123F7F6CEE0F80A26C6D141F18006C6D5C6C6D14 -3E6C6D147E6C6D5C6D6C495A6DB4EB07F0010F9038C01FE06D90B5128001014AC7FCD900 -3F13F80203138031387CB63A>I<943803FF80040FB5FCA5EE003F170FB3A4913803FF80 -023F13F849B512FE0107ECFF8F011F9038C03FEF90273FFE0007B5FCD97FF8130149487F -484980484980484980488291C8FC5A5B123FA2127F5BA312FFAD127FA37F123FA3121F7F -6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D4914E0D97FFCD90FEFEBFF80D91FFFEB7F8F0107 -90B5120F010114FC6D6C13E00207010049C7FC41547CD249>I<913807FF80027F13F849 -B512FE01076E7E011F010313E0903A3FFC007FF0D97FF06D7E49486D7E4849130F48496D -7E48824890C77E1880485A82003F17C0A3485A18E082A212FFA290B8FCA401FCCAFCA612 -7FA37F123FA2EF03E06C7E17076C17C06C6D140F18806C6D141F6C6DEC3F006C6D147ED9 -7FFC495AD91FFFEB07F86D9038E03FF0010390B512C001005D023F01FCC7FC020113E033 -387CB63C>I103 DI<133FEBFFC0487F487FA2487F -A66C5BA26C5B6C5B013FC7FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD3 -24>I107 DIII<913801 -FFC0023F13FE91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF49486D7F -48496D7F48496D7F91C8127F4883488349153F001F83A2003F8349151FA2007F83A400FF -1880AC007F1800A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D495B6C6D -495B6D6C4990C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F49C8FC02 -0313E039387CB642>I<90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138 -F1F83F00019138F07FFC6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC -5CA45CB3ABB612FEA52E367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315 -FE3907FE003FD80FF0130F4848130348481301491300127F90C8127EA248153EA27FA27F -01F091C7FC13FCEBFF806C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F01 -0F15801301D9000F14C0EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D -143F17807F6DEC7F0001F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791 -C7FC39E0007FF02B387CB634>I<147CA614FCA41301A31303A21307A2130F131F133F13 -7F13FF1203000F90B512FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E -806D6D5A6DEBC1F86DEBFFF001005C023F1380DA03FEC7FC294D7ECB33>II121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff ecrm1000 10 81 -/Ff 81 123 df21 D27 DIII<007C137C00FE13FEEAFF01A3EAFE00A7007E13FC -007C137CA8003C137800381338A700181330171E77BA2A>34 D<121C127FEAFF80A213C0 -A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39 -D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B120F90C7FC -A25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E -1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F -6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0 -B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A485AA2485A48C7 -FC120E5A5A5A5A5A13527CBD20>II<121C127FEAFF80A213C0A3127F121C1200A412011380A212 -0313005A1206120E5A5A5A12600A19798817>44 DI<121C127F -EAFF80A5EA7F00121C0909798817>I<1506A2150E150CA2151C151815381530A2157015 -60A215E015C0A214011580A2140315005C1406A2140E140CA2141C1418A214381430A214 -70146014E05CA213015CA2130391C7FCA25B1306A2130E130C131C1318A213381330A213 -701360A213E05BA212015B120390C8FCA25A1206A2120E120CA2121C1218A21238123012 -701260A212E05AA21F537BBD2A>IIIII<1538A2157815F8A2140114031407A2140F141F141B14331473146314C313011483EB -030313071306130C131C131813301370136013C01201EA038013005A120E120C5A123812 -305A12E0B712F8A3C73803F800AA4A7E0103B512F8A325387EB72A>I<0006140CD80780 -133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB1FFE903878 -0F809038E007E03907C003F0496C7E130000066D7E81C8FC8181A21680A4121C127F5A7F -A390C713005D12FC00605C12704A5A6C5C6C1303001E495A6C6C485A3907E03F800001B5 -C7FC38007FFCEB1FE021397CB62A>II<12301238 -123E003FB612E0A316C05A168016000070C712060060140E5D5D00E014304814705D5DC7 -12014A5A4AC7FC1406140E5CA25C1478147014F05C1301A213035C1307A2130FA3131F5C -A2133FA5137FA96DC8FC131E233A7BB72A>III<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C09 -2479A317>I<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A213C0A3127F12 -1C1200A412011380A2120313005A1206120E5A5A5A12600A3479A317>I<007FB812F8B9 -12FCCCFCB0B912FC6C17F836147B9E41>61 D64 D<1538A3157CA315FEA34A -7EA34A6C7EA202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A20270 -7FEC6003A202C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7 -121FA2496E7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512 -FEA3373C7DBB3E>II<913A01FF800180020FEBE003027F13F8903A -01FF807E07903A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE15 -3F12014848151F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD -127F6DED0180A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F -15386D6C5CD91FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F -13F002011380313D7BBA3C>IIIIIII<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380 -D87F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I< -B649B5FCA3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8 -FC160E5E5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C -7E14704A6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA270 -7E707F8484486D497FB6011FEBFF80A339397DB841>IIIIIIIII<003FB812E0A3D9C003EB001F273E0001FE130348EE01F000781600 -00701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A33539 -7DB83C>IIII<007FB590383FFFFCA3C601F801071380D97FE0D903FCC7FC -013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C1306160E6D6C5B6DEB801816389138 -7FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC5D14036E7EA26E7F6F7EA24B7E15 -DF9138019FF09138038FF8150F91380607FC91380E03FE140C4A6C7EEC38000230804A6D -7E14E04A6D7E49486D7E130391C76C7E01066E7E130E010C6E7E011C1401013C8101FE82 -2607FF80010713E0B500E0013FEBFF80A339397EB83E>II<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E -0038141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F -4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC -5B1203485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>I< -007FB81280B912C0A26C17803204797041>95 D97 -DIIII<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213 -FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I< -ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E0 -10000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38 -060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048 -C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB -0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387EA52A>IIIIII<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F8380 -3F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A348 -6C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F90 -39F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280 -A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E9039F3801F -803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3 -ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FF -F8EC1FC091C8FCAB487EB512C0A328357EA42E>II<3807E01F00FFEB7FC09038E1E3 -E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512 -F0A31C257EA421>II<1318A51338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215 -C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220>IIIIII<00 -3FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB1FC0EC3F80006013 -7F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FEA2485A485A000714 -0E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F247EA325>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg ecss2074 20.74 10 -/Fg 10 116 df76 -D85 -D<91380FFF8049B512F0010F14FC017F14FF48B712C0000782001F824882DAE0007F49C7 -EA3FFE01F8140FD81FC06E7E90C86C1380121E00186F13C0001081CAFCEF7FE0A318F017 -3FAD93B5FC157F0207B6FC143F49B7FC1307011F153F017FEBF80090B512804801F8C7FC -4813C04890C8FCEA0FFC485A485A5B485A5BA248C9FCA5177FA26D15FFA26C6C5C6D5C6D -140F6C6C5C01FF91B5FC6CEBE00791B612BF6CEDFE3F16FC6C15F06C15C06CECFE006C6C -13F0D91FFCC9FC344C77CA4C>97 DII103 D105 -D108 D110 -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 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 - -#include -#include /* for strdup */ -#include /* for malloc */ -#include /* for printf */ -#include /* 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 -#include - -/* 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 -#include - -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 - -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 -#include -#include -#include -#include - -#include - -/* 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 -#include -#include /* for strdup */ -#include /* for malloc */ -#include /* for printf */ -#include /* 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 (){ - - 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(){ - - 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 < /* for va_arg functions */ - -EOM - -} - -if ($opt_p and !$opt_i){ - -print <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(){ - if (//){ - 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 <[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 <){ - - if (//){ - 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< 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(){ - if (//){ - 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< /* for size_t */ -#include - -%} - -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(){ - - 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: -# - - -# usually open params-in-prop.txt -open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; - -print <) -{ - 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 < - -# usually open restrictions.csv -open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; - -print <) -{ - 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 <){ - - 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() -{ - - 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() -{ - - 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(){ - - 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(){ - - 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(){ - - 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 <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 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 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