Additional Alarm documentation (0.98)
To set a task alarm, send the following message.
block+16 &500 indicate message to !Alarm +20 0/1 indicate set an alarm (1 if 5 byte format) +24 date/time +30 name of task sender, terminated by 0 +n task-specific unique alarm identifier, terminated by 0
Date & time must be given in standard 5 byte format if +20 is 1, otherwise the layout is:
+24 year as low-byte/high-byte +26 month +27 date +28 hour +29 minutes
Neither the name nor the alarm identifier may be longer than 40 chars each.
To cancel the alarm, use the following message block:
block+16 &500 indicate message to !Alarm +20 2 indicate cancel an alarm +24 name of task, terminated by 0 +n task-specific unique alarm identifier, terminated by 0
The name & identifier must match exactly for the alarm to be successfully cancelled. It is not necessary to specify the time of the alarm, as this may have changed due to being deferred by Alarm.
If these messages are sent recorded, !Alarm will acknowledge with 0 if successful, or a 0 terminated error string.
When an alarm goes off, the format of the block sent by !Alarm as a broadcast is:
block+16 &501 indicate an alarm has gone off +20 name of task sender, terminated by 0 +n task-specific unique alarm identifier, terminated by 0
If the named task recognises the identifier, it must acknowledge this message, otherwise !Alarm will ask the user to install the named application. If the latter occurs, the alarm is deferred for one minute to allow the task to be installed.
All alarms set are stored in <Alarm$Dir>.!Alarm. This is a data file containing a linked list of alarms as follows:
PTR Contents ~~~ ~~~~~~~~ 0 PTR to first alarm, -1 if none set 5 PTR to first free space, -1 if none available...
n PTR to next alarm/free space block, -1 if last n+5 PTR to previous alarm/free space block, -1 if firstn+10 set alarm time stored as five byte format plus urgent flag n+17 alarm text
contains 3 strings, each a maximum of 40 characters if a task alarm then string 1 is the task name string 2 is the unique indentifiern+144 flags:
bit 0 = task alarm 1 = repeating alarmn+145 repeat period:
bit 0 = minutes 1 = hours 2 = days 3 = weeks 4 = months 5 = yearsn+146 repeat multiplier (1 byte)