Calendar Reminders for my z600

The remind program doesn't actually put reminders into the calendars it renders (for good reason), o had to use part of the MSG. I could have used a
SPECIAL ALARM, but then I only get the date.

For example, I use this:

REM Monday 2005 AT 09:00 DURATION 1:00 MSG +90 Weekly meeting

To provide a 90 minute reminder of the event. This meant that my parsing of the output of remind had to get smarter. So I rewrote it in perl:

<font color="#8080ff"><b>#!/usr/bin/env perl</b></font>
<font color="#ffff00"><b>use warnings</b></font>;
<font color="#ffff00"><b>use strict</b></font>;
<font color="#ffff00"><b>use </b></font>Date::Parse;

<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$CALENDAR</b></font>=<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>./calendar</b></font><font color="#ff40ff"><b>&quot;</b></font>;
<font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$WEEKS</b></font>=<font color="#ff40ff"><b>2</b></font>;

<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>BEGIN:VCALENDAR</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>VERSION:1.0</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;

<font color="#ffff00"><b>open</b></font>(<font color="#00ffff"><b>CAL</b></font>, <font color="#ff40ff"><b>&#39;</b></font><font color="#ff40ff"><b>-|</b></font><font color="#ff40ff"><b>&#39;</b></font>, <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>remind -s+${WEEKS} -b1 ${CALENDAR}</b></font><font color="#ff40ff"><b>&quot;</b></font>)
    <font color="#ffff00"><b>or</b></font> <font color="#ffff00"><b>die</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>can&#39;t start remind: </b></font><font color="#00ffff"><b>$!</b></font><font color="#ff40ff"><b>&quot;</b></font>;
<font color="#ffff00"><b>while</b></font> (<font color="#00ffff"><b>&lt;CAL&gt;</b></font>) {

    <font color="#ffff00"><b>chomp</b></font>;
    <font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$date</b></font>, <font color="#00ffff"><b>$x</b></font>, <font color="#00ffff"><b>$y</b></font>, <font color="#00ffff"><b>$duration</b></font>, <font color="#00ffff"><b>$z</b></font>, <font color="#00ffff"><b>$msg</b></font>)
        = <font color="#ffff00"><b>split</b></font>( <font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>\s</b></font><font color="#ffff00"><b>/</b></font>, <font color="#00ffff"><b>$_</b></font>, <font color="#ff40ff"><b>6</b></font>);
    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>@msg</b></font>=<font color="#ffff00"><b>split</b></font>(<font color="#ffff00"><b>/</b></font><font color="#ff6060"><b>\s</b></font><font color="#ffff00"><b>/</b></font>, <font color="#00ffff"><b>$msg</b></font>);
    <font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$start</b></font>,<font color="#00ffff"><b>$alarm</b></font>);

    <font color="#ffff00"><b>next</b></font> <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$date</b></font> =~ <font color="#ffff00"><b>m/</b></font><font color="#ff40ff"><b>^#</b></font><font color="#ffff00"><b>/</b></font> ) ;

    <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$duration</b></font> <font color="#ffff00"><b>eq</b></font> <font color="#ff40ff"><b>&#39;</b></font><font color="#ff40ff"><b>*</b></font><font color="#ff40ff"><b>&#39;</b></font> )  { <font color="#00ffff"><b>$duration</b></font>=<font color="#ff40ff"><b>60</b></font> ; }
    <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$z</b></font> <font color="#ffff00"><b>eq</b></font> <font color="#ff40ff"><b>&#39;</b></font><font color="#ff40ff"><b>*</b></font><font color="#ff40ff"><b>&#39;</b></font> ) {
        <font color="#00ffff"><b>$start</b></font>=<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>00:00</b></font><font color="#ff40ff"><b>&quot;</b></font>;
        <font color="#00ffff"><b>$duration</b></font>=<font color="#ff40ff"><b>1439</b></font>;
        <font color="#00ffff"><b>$alarm</b></font>=<font color="#ff40ff"><b>0</b></font>;
    } <font color="#ffff00"><b>else</b></font> {
        <font color="#00ffff"><b>$start</b></font>=<font color="#ffff00"><b>shift</b></font> <font color="#00ffff"><b>@msg</b></font>;
        <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$msg</b></font>[<font color="#ff40ff"><b>0</b></font>] =~<font color="#ffff00"><b> /</b></font><font color="#ff6060"><b>\+</b></font><font color="#ff6060"><b>.*</b></font><font color="#ffff00"><b>/</b></font> ) {
            <font color="#00ffff"><b>$alarm</b></font> = <font color="#ffff00"><b>shift</b></font> <font color="#00ffff"><b>@msg</b></font>;
            <font color="#00ffff"><b>$alarm</b></font> =~ <font color="#ffff00"><b>s/</b></font><font color="#ff6060"><b>\+</b></font><font color="#ffff00"><b>//</b></font>
        } <font color="#ffff00"><b>else</b></font> {
            <font color="#00ffff"><b>$alarm</b></font> = <font color="#ff40ff"><b>0</b></font>
        }
        <font color="#00ffff"><b>$msg</b></font>=<font color="#ffff00"><b>join</b></font>(<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b> </b></font><font color="#ff40ff"><b>&quot;</b></font>,<font color="#00ffff"><b>@msg</b></font>);
    }

    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$t</b></font>=str2time(<font color="#ff40ff"><b>&quot;</b></font><font color="#00ffff"><b>$date</b></font><font color="#ff40ff"><b> </b></font><font color="#00ffff"><b>$start</b></font><font color="#ff40ff"><b>&quot;</b></font>);

    <font color="#ffff00"><b>die</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>unable to parse </b></font><font color="#00ffff"><b>$date</b></font><font color="#ff40ff"><b> </b></font><font color="#00ffff"><b>$start</b></font><font color="#ff40ff"><b>&quot;</b></font> <font color="#ffff00"><b>if</b></font> <font color="#ffff00"><b>not</b></font> <font color="#ffff00"><b>defined</b></font> <font color="#00ffff"><b>$t</b></font>;

    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$d</b></font>=<font color="#00ffff"><b>$duration</b></font>*<font color="#ff40ff"><b>60</b></font>;
    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$a</b></font>=<font color="#00ffff"><b>$alarm</b></font>*<font color="#ff40ff"><b>60</b></font>;

    <font color="#ffff00"><b>my</b></font> (<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>);
    <font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$s_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>&quot;</b></font>,
            <font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);

    (<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>+<font color="#00ffff"><b>$d</b></font>);
    <font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$e_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>&quot;</b></font>,
            <font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);

    (<font color="#00ffff"><b>$sec</b></font>,<font color="#00ffff"><b>$min</b></font>,<font color="#00ffff"><b>$hour</b></font>,<font color="#00ffff"><b>$mday</b></font>,<font color="#00ffff"><b>$mon</b></font>,<font color="#00ffff"><b>$year</b></font>) = <font color="#ffff00"><b>localtime</b></font>(<font color="#00ffff"><b>$t</b></font>-<font color="#00ffff"><b>$a</b></font>);
    <font color="#00ffff"><b>$year</b></font> += <font color="#ff40ff"><b>1900</b></font>; <font color="#00ffff"><b>$mon</b></font>++;
    <font color="#ffff00"><b>my</b></font> <font color="#00ffff"><b>$a_string</b></font>=<font color="#ffff00"><b>sprintf</b></font>(<font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>%04d%02d%02dT%02d%02d%02d</b></font><font color="#ff40ff"><b>&quot;</b></font>,
            <font color="#00ffff"><b>$year</b></font>, <font color="#00ffff"><b>$mon</b></font>, <font color="#00ffff"><b>$mday</b></font>, <font color="#00ffff"><b>$hour</b></font>, <font color="#00ffff"><b>$min</b></font>, <font color="#00ffff"><b>$sec</b></font>);

    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>BEGIN:VEVENT</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>CATEGORIES:MEETING</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>SUMMARY:</b></font><font color="#00ffff"><b>$msg</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>DTSTART:</b></font><font color="#00ffff"><b>$s_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>DTEND:</b></font><font color="#00ffff"><b>$e_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>AALARM:</b></font><font color="#00ffff"><b>$a_string</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font> <font color="#ffff00"><b>if</b></font> ( <font color="#00ffff"><b>$alarm</b></font> != <font color="#ff40ff"><b>0</b></font> ) ;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>END:VEVENT</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
    <font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
}
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;
<font color="#ffff00"><b>print</b></font> <font color="#ff40ff"><b>&quot;</b></font><font color="#ff40ff"><b>END:VCALENDAR</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>;

jack | posted Thu Sep 22 23:09:16 2005 | #
category: projects/calendar

A weblog by Jack Cummings