beautypg.com

Apple Newton Programmer’s Newton 2.0 (for Newton 2.0) User Manual

Page 630

background image

C H A P T E R 1 7

Additional System Services

17-14

Using Additional System Services

In any case, debugging your callback function is difficult because any exceptions it
raises are caught and ignored by the alarm mechanism. Thus, you need to debug
your callback functions thoroughly before passing them to the

AddAlarm

function.

Since your application may not be open, or even installed when its alarm executes,
your code needs to handle these eventualities appropriately. The following code
fragment shows how to test for the presence of an application before sending a
message to it:

if GetRoot().(kAppSymbol) then

GetRoot().(kAppSymbol):DoSomething()

else

GetRoot():Notify(...)

Alarms and Sound

17

The Alarm panel in user preferences controls the volume of alarm sounds. Do not
change preferences without the user’s knowledge.

Courteous Use of Alarms

17

Each alarm you schedule uses space in the internal store. You need to exercise
reasonable judgment when creating multiple alarms. Your application needs to
schedule and use alarms in a way that does not hamper the activities of other
applications residing on the user’s Newton. While limiting your application to a
single alarm might be too restrictive, scheduling a daily wake-up alarm for the next
year by creating 365 different alarms would use up a lot of the internal store.

Similarly, your alarm actions should be brief, so they don’t interfere with other
alarms. If you need to do something time consuming or repetitive, use a deferred
action or set up a

ViewIdleScript

.

Using the Periodic Alarm Editor

17

There is no way to set a periodic alarm programmatically. You can, however, create
a view from

protoPeriodicAlarmEditor

, and allow your application’s users

to set periodic alarms. To attain the functionality of periodic alarms without using
the

protoPeriodicAlarmEditor

, you would need to programmatically add

new alarms from the callback functions executed when your alarms go off.

There are three steps required to support the alarm editor:

1. Add a method in your application’s base view called

AlarmsEnabled

. This

method takes no arguments, and should return a Boolean indicating whether
your application should be sent the

PeriodicAlarm

message (see next item).

If the alarms are not a feature that can be disabled, you can simply define your

AlarmsEnabled

method as:

func() true;