aboutsummaryrefslogtreecommitdiffstats
path: root/libical/scripts/mkderivedparameters.pl
diff options
context:
space:
mode:
Diffstat (limited to 'libical/scripts/mkderivedparameters.pl')
-rwxr-xr-xlibical/scripts/mkderivedparameters.pl277
1 files changed, 277 insertions, 0 deletions
diff --git a/libical/scripts/mkderivedparameters.pl b/libical/scripts/mkderivedparameters.pl
new file mode 100755
index 0000000000..2b505c878a
--- /dev/null
+++ b/libical/scripts/mkderivedparameters.pl
@@ -0,0 +1,277 @@
+#!/usr/local/bin/perl
+
+use Getopt::Std;
+getopts('chspi:');
+
+%no_xname = (RELATED=>1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1);
+
+# Usually, open param-c-types.txt
+open(F,"$ARGV[0]") || die "Can't open C parameter types file $ARGV[0]:$!";
+
+# Write the file inline by copying everything before a demarcation
+# line, and putting the generated data after the demarcation
+
+if ($opt_i) {
+
+ open(IN,$opt_i) || die "Can't open input file $opt_i";
+
+ while(<IN>){
+
+ if (/Do not edit/){
+ last;
+ }
+
+ print;
+
+ }
+
+ 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";
+ }
+
+}
+
+
+
+if (($opt_c or $opt_h) and !$opt_i) {
+
+print <<EOM;
+/* -*- Mode: C -*-
+ ======================================================================
+ FILE: icalderivedparameters.{c,h}
+ CREATOR: eric 09 May 1999
+
+ \044Id: mkderivedparameters.pl,v 1.1 1999/05/14 07:04:31 eric Exp eric \044
+ \044Locker: eric \044
+
+ (C) COPYRIGHT 1999 Eric Busboom
+ http://www.softwarestudio.org
+
+ The contents of this file are subject to the Mozilla Public License
+ Version 1.0 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and
+ limitations under the License.
+
+
+ ======================================================================*/
+
+/*
+ * THIS FILE IS MACHINE GENERATED DO NOT EDIT
+ */
+
+
+EOM
+
+}
+
+if ($opt_p and !$opt_i){
+
+print <<EOM;
+# -*- Mode: Perl -*-
+# ======================================================================
+# \044Id:\044
+#
+# (C) COPYRIGHT 1999 Eric Busboom
+# http://www.softwarestudio.org
+#
+# The contents of this file are subject to the Mozilla Public License
+# Version 1.0 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and
+# limitations under the License.
+#
+# The original author is Eric Busboom
+# The original code is derivedparams.h
+#
+# ======================================================================*/
+
+EOM
+
+}
+
+
+while(<F>){
+
+ chop;
+ my ($param,$type) = split(/\s{2,}/,$_);
+
+ my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param));
+
+ my $lc = lc($ucf);
+ my $uc = uc($lc);
+
+ my $lctype = lc($type);
+
+
+ my $charorenum;
+ my $set_code;
+ my $pointer_check;
+ my $new_pointer_check;
+ my $new_pointer_check_v;
+ my $xrange;
+
+ if ($type=~/char/){
+ $new_pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");";
+ $new_pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");";
+ }
+
+
+ if ($type=~/char/ ) {
+
+ $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return ((struct icalparameter_impl*)param)->string;";
+
+ $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");";
+
+ $set_code = "((struct icalparameter_impl*)param)->string = strdup(v);"
+
+ } else {
+
+ $xrange =" if ( ((struct icalparameter_impl*)param)->string != 0){\n return ICAL_${uc}_XNAME;\n }\n" if !exists $no_xname{$uc};
+
+ $charorenum=<<EOM;
+ icalerror_check_arg( (param!=0), \"param\");
+$xrange
+ return ((struct icalparameter_impl*)param)->data.v_${lc};
+EOM
+
+ $pointer_check = "icalerror_check_arg( (v!=0),\"v\");";
+
+ $set_code = "((struct icalparameter_impl*)param)->data.v_${lc} = v;";
+
+ $print_code = "switch (impl->data.v_${lc}) {\ncase ICAL_${uc}_: {\n}\ncase ICAL_${uc}_XNAME: /* Fall Through */\n}\n";
+
+ }
+
+
+
+ if ($opt_c) {
+
+ print <<EOM;
+/* $param */
+icalparameter* icalparameter_new_${lc}($type v)
+{
+ struct icalparameter_impl *impl;
+ icalerror_clear_errno();
+ $new_pointer_check
+ impl = icalparameter_new_impl(ICAL_${uc}_PARAMETER);
+ if (impl == 0) {
+ return 0;
+ }
+
+ icalparameter_set_${lc}((icalparameter*) impl,v);
+ if (icalerrno != ICAL_NO_ERROR) {
+ icalparameter_free((icalparameter*) impl);
+ return 0;
+ }
+
+ return (icalparameter*) impl;
+}
+
+${type} icalparameter_get_${lc}(icalparameter* param)
+{
+ icalerror_clear_errno();
+$charorenum
+}
+
+void icalparameter_set_${lc}(icalparameter* param, ${type} v)
+{
+ $new_pointer_check_v
+ icalerror_check_arg_rv( (param!=0), "param");
+ icalerror_clear_errno();
+
+ $set_code
+}
+
+EOM
+
+ } elsif( $opt_h) {
+
+ print <<EOM;
+/* $param */
+icalparameter* icalparameter_new_${lc}($type v);
+${type} icalparameter_get_${lc}(icalparameter* value);
+void icalparameter_set_${lc}(icalparameter* value, ${type} v);
+
+EOM
+
+} elsif ($opt_s) {
+
+next if $type =~ /char/;
+
+print<<EOM;
+case ICAL_${uc}_PARAMETER:
+{
+ $print_code
+}
+EOM
+
+}
+
+ if ($opt_p) {
+
+ print <<EOM;
+
+# $param
+
+package Net::ICal::Parameter::${ucf};
+\@ISA=qw(Net::ICal::Parameter);
+
+sub new
+{
+ my \$self = [];
+ my \$package = shift;
+ my \$value = shift;
+
+ bless \$self, \$package;
+
+ my \$p;
+
+ if (\$value) {
+ \$p = Net::ICal::icalparameter_new_from_string(\$Net::ICal::ICAL_${uc}_PARAMETER,\$value);
+ } else {
+ \$p = Net::ICal::icalparameter_new(\$Net::ICal::ICAL_${uc}_PARAMETER);
+ }
+
+ \$self->[0] = \$p;
+
+ return \$self;
+}
+
+sub get
+{
+ my \$self = shift;
+ my \$impl = \$self->_impl();
+
+ return Net::ICal::icalparameter_as_ical_string(\$impl);
+
+}
+
+sub set
+{
+ # This is hard to implement, so I've punted for now.
+ die "Set is not implemented";
+}
+
+EOM
+
+}
+
+}
+
+if ($opt_h){
+
+print <<EOM;
+#endif ICALPARAMETER_H
+EOM
+}