TikTok 2.03
(GPL Free Software)
Modification Author:
© 1999-2000 Michael J. McCollister
E-Mail: Mike_McCollister@msn.com
Web Page: http://members.xoom.com/mjmdlm/palm/
Original Author:
© 1997-2000 David A. Pearson (contact Michael J. McCollister for
questions)
E-Mail: tiktok@hagbard.demon.co.uk
Web Page: http://www.hagbard.demon.co.uk/
Forward
TikTok is designed to be a simple, no nonsense, timer utility for
a Palm Computing® Connected Organizer. Using it is dead simple. Tick
on a checkbox to start a timer, edit it's description to tell you what it
is you are timing. Simple!
Special Notes
The application ID 'DAP2' is registered with Palm
Computing. If you intend to make
changes and release your own free version based on this code please make
sure you change the application ID.
Please note that TikTok is free software, licensed under the
GPL. Be sure to read the section on Copying for full details.
If you have any feedback or comments (or bugs) please feel free to mail
them to Mike_McCollister@msn.com. Before you do mail me with any questions
and/or bugs, please read the FAQ section first, your question may already
have been answered.
The latest version of TikTok will always be available from http://members.xoom.com/mjmdlm/palm/.
If you are upgrading from an earlier version of TikTok you can
find out what has changed by reading the Version
History section.
Contents of This Document
Installation of TikTok is just like any other Palm program.
IMPORTANT: If upgrading from version 1.0x, 2.01 or 2.02 of TikTok, your preferences
and current timers will be lost due to a new preferences format.
Requires Palm OS 1.0 or greater. 19K of free memory on the Palm is required.
TikTok.prc |
|
The TikTok application that you install on your Palm Computing®
Connected Organizer or compatible device. |
README.htm |
|
This file |
Makefile |
|
Makefile for building TikTok. |
obj/ |
|
Obj directory where object files are stored during a make. See directory for
contents. |
src/ |
|
Source directory where source files are stored. See directory for contents. |
To start a timer check its start/stop checkbox. To stop a timer un-check its
start/stop checkbox.
A timer can be made to be "persistent" by checking its
"persistent" checkbox. In this case, "persistent" means that
when you stop it, and then re-start it, instead of starting from 0.00:00:00 it
will carry on counting in the place you left off.
You can edit the time field of a non-running timer and set the time value to
anything you like. If you set the time to a negative value the time will count
down to 0.00:00:00 and an alarm will sound when 0 is reached.
The TikTok timers will carry on working when other applications are
running and when your Palm is turned off.
Be sure to check out the Options->Preferences menu item for configuration.
2.03 (03/29/2000)
- Alarm sound is now selectable. Because of this, the preferences needed to be changed. This alarm sound in only available on Palm OS 3 or greater.
- Made the preferences page full screen to make room for the alarm sound.
- Added a "Cancel" button to the preferences.
- Color and grayscale icons now included.
- Page number is now a pull down menu.
- Next and previous fields no longer switch to next or previous pages.
- Focus is now placed in the description field whenever TikTok starts or stops.
- Now use curly quotes in the info screen.
- Minor changes to the Makefile.
- Fixed some minor copyright comments in the source code and documentation.
2.02 (02/26/2000)
- Added color alarm icon.
- New and improved alarm form that will not exit until the user taps "OK".
- New and improved about dialog box.
- Removed some redundancies from the Makefile
- Better synchronization of start all, stop all, clear all and zero all functions.
- Added Page x of y to the top portion of the screen where the graffiti state indicator used to be.
- Used evtWaitForever instead of -1 in the EvtGetEvent.
- Changed the order of the info text.
- One beep for simultaneous alarms.
- Fixed a bug in which the cursor would be partially erased if right under the first number in the time.
- There was a bug that if multiple countdown alarms have the same time only one would come up. This has been fixed. Because of this, the prefs format
needed to be changed.
- Modified the code so that there is only one use of PrefGetAppPreferencesV10
and one use of PrefSetAppPreferencesV10. This cut down on the code size a little bit.
- Cleaned up the code a little more.
- Now have four pages of timers with eight timers per page. This leaves room at the bottom of the screen to prevent any page refresh issues with
the command bar.
- Added some buttons at the bottom of the page.
- Moved the Graffiti State Indicator to the bottom of the screen now that there is more room.
- Now use a bitmap for the arrows on the screen. Also removed the DecorateForm
function. This makes the display a little faster and makes the prc a little
smaller.
- Removed RefreshTikTok function and made some major changes to the program
structure.
- Defaults now include the page up and page down keys go to previous and next
pages and start memory and stop on when alarm finished are both true.
- Global Dialogs now ask if you want to start/stop/clear/zero all, page or none.
- Modified the preferences screen a little bit.
- Removed "Ask Silly Questions" option since all dialogs are now required because there are three options. However, I've added the option for button
at the bottom of the screen to control multiple timers.
- Switched to using PRC-Tools 2.0 with Palm OS 3.5 header files. Because of this, I had to make the following changes:
- Use new types (i.e. UInt8 instead of Byte) when applicable.
- New header file format.
- The pragma pack(2) is no longer needed
- Modified the Makefile so that it will work with PRC-Tools 2.0.
- Switched to PilRC 2.5b1.
- Modified the menu shortcuts some.
- Now respond to frmUpdateEvent for proper screen refresh on PalmOS 3.5.
2.01 (01/21/2000)
-
Fixed some legal typos from the README.htm file.
2.00 (01/02/2000)
-
Fixed a bug where at 12 noon it would display "am" instead of "pm".
-
The numeric keyboard now pops up when on the right when the keyboard menu
item is selected and the focus is on the number side of the input field.
-
Added the next and previous field characters to move from one alarm to
another.
-
Added Start/Stop Focused and Persistent Focused to the tools menu.
-
Pressing the clock no longer loses focus on a text field.
-
Alarms are now retained after a reset.
-
Focus dots added to make it more obvious which field is in focus.
-
Focus changes with start/stop and persistent selection.
-
Page up and page down button functionality is now programmable (this made
the preferences a new version of 2). The default mode is that both
the page up and page down buttons start and stop the current timer, just
as was with TikTok 1.07.
-
Added "Start All" and "Stop All" menu items and functionality.
-
All documentation is now in HTML format. This will ensure that the documentation
looks good on every platform.
-
Added /R preferences menu shortcut.
-
Changed all references of "Ok" with "OK".
-
Changed to version 2.00.
-
Title bar is now no longer modal.
-
Added the version ID to the resource. This enables the proper version to
show up in the Palm Info screen.
-
Moved controls around a little bit because of the title bar change.
-
Added "Get Info" and "About" to the Options menu item.
-
Better aligned the preferences dialog.
-
Added Graffiti Help menu item.
-
Moved the graffiti indicator so that it looks OK on Palm OS 1.0.
-
Changed the large icon to make it look a little better.
-
Created a small icon.
-
Display updates tweaked to make stuff appear faster.
-
"Clear" menu renamed to "Tools".
-
Zero all function no longer displays all zero and then clears the empty
alarms.
-
Compiled with PilRC 2.4 so that menu shortcuts are spaced properly.
-
Cleaned up the Makefile
-
Icon is now BMP format.
-
Removed all warnings from source code.
-
Removed the FrmInitForm line before FrmPopupForm so that it will not cause
a memory leak on the emulator.
-
There is now always an alarm with focus, even when the preferences have
been cleared.
-
Changed the timeout from 1 to 50 to reduce the power consumption.
-
Added FldSetTextHandle to StuffTikTok to avoid warning/error on the Palm
OS Debugger.
-
Added MenuEraseStatus(MenuGetActiveMenu()) to the menu portion of the case
statement so that menu shortcut messages at the bottom of the screen don't
get clobbered.
-
Time time is now displayed using WinDrawChars instead of using fields.
This ensures that focus will always be placed on a valid field.
-
Removed all references to TxtFieldHasFocus function because a text field
will now always have focus.
-
Source code now looks good in 80 columns.
-
The main form now responds to frmCloseEvent to prevent any possible memory
leaks that were showing up in the emulator.
-
The alarm is now sounded when the sysAppLaunchCmdAlarmTriggered event is
received. This allows for the alarm to beep when other alarm dialogs
are currently up.
-
Array sizes are now sized using defines.
-
Added DEFAULTBUTTON to dialogs that have multiple buttons. This defines
what button is "pressed" when the the program is exited when a dialog is
up. The dialogs effected now default to a "no".
-
Function prototypes now contain variable names.
1.07
-
Fixed a bug in RaiseAlarm() that caused a FE if the timer that was kicking
in had an empty description.
-
You can now tell TikTok that you want timers to stop counting when they
are acting as an alarm and they go off. See the options dialog for the
setting (thanks to Kadar Tanuwidjaja <ktan8@dgs.monash.edu.au>
for the
patch that this change is based on).
-
You can now tell TikTok to use a timers last starting time when you tick
it on a second time. See the options dialog for the setting (thanks to
Kadar Tanuwidjaja <ktan8@dgs.monash.edu.au>
for the patch that this
change is based on).
1.06
-
Minor tweaks to the prefs structures to reduce the memory needed to hold
the timer details.
-
Improved the look of the interface (thanks to J. Y. Mantinband <yosh@netvision.net>
for the suggestions).
-
Added "zero timer" options to the Clear menu.
-
Added a "quick alarms" menu.
-
Added an extra config option that lets you tell TikTok that you don't want
to be asked silly questions when you say you want to clear/zero all timers.
-
Added an optional clock display (thanks to Holger Klawitter <holger@math.uni-muenster.de>
for the suggestion).
1.05
-
PilotMain() now returns sysErrParamErr if the cmd is not known or used
by TikTok (source: <syK3zYbo8GA.74@darrin2.massena.com>
in pilot.programmer.gcc
on news.massena.com).
-
Many tweaks to the code to try and kill the menu-death-bug.
-
Moved to GCC 0.5.0. It appears that 0.4.0 was the cause of the menu-death-bug.
1.04
-
Removed the input filter on the time fields. Next time I'll think things
thru a lot better before I add something like this. :-)
1.03
-
Corrected a couple of minor bugs which shouldn't have been user visible
but were bad coding.
-
When writing in the "time" field, all characters that are not "0-9:." are
ignored.
1.02
-
Corrected a couple of spelling mistakes.
-
All time fields are now editable.
-
If a user enters a negative value in a time field it is considered to be
a countdown timer and will trip an alarm when it hits 0.
-
Added options form that allows you to specify if alarms should just be
audible or visible as well.
-
You can now use the Palm's up/down keys to start and stop a timer (both
keys work the same, they toggle the currently focused timer).
-
Is there any chance of adding feature X?
Possibly. Mail me with your suggestion and I'll consider it. I can't
guarantee that I'll add it, but, if I like it, if it can be done and if
I can do it and it makes sense for TikTok I'll probably add it.
Failing that, you have the source code.... :-)
-
Can I register TikTok?
No, TikTok is free software, read the Copying
section for full
details. However, if you do feel the need to send someone some money why
not consider making a donation to the Free Software Foundation? Pop over
to http://www.fsf.org to find out about them.
-
Can I modify and distribute my own version of TikTok?
Read the Copying section for a full answer to this question.
-
Alarms appear to kick in up to 60 seconds late!
This is a known "problem" with the Palm. If your Palm is turned
on an alarm should fire right on time. However, if your Palm is turned
off an alarm can kick in up to 60 seconds late. From what I've seen most
software that uses alarms suffers from this. I'm afraid there is nothing
I can do about this, it appears to be the way the Palm works.
- Why can't I time things down to 100th of a second?
Because TikTok is not designed to do that. It's designed to be a simple,
pretty accurate, stopwatch utility. I'd not advise that you time any critical
event. I wrote TikTok to time things where a couple of seconds here
and there don't matter (that's not to say that TikTok is that sloppy).
If you want a stopwatch that can go down to 100th of a second I'd suggest
you take a look at Chronos (check your local Palm software library for
full details).
-
No bugs known at this time.
Here are some of the things, in no special order, that I intend to get
round to doing at some time in the near future.
-
Flexible configuration per timer.
-
Make the quick alarms menu configurable.
Thanks go to the following people who have mailed bug reports and suggestions
or have submitted code during the development of TikTok:
-
Douglas Turner <dturner@mercuryadvisors.com>
Suggestion for the ability to start/stop all (or selected) timers simultaneously
with a single stroke or key press.
-
Andrew Robertson <Andrew_Robertson@compuserve.com>
Alerted me to my terrible abuse of my native language in the tips screen.
-
Jim Aspnes <aspnes@cs.yale.edu>
Submitted a patch to allow countdown timers with alarms. This patch
formed the basis of the countdown ability of v1.02. Also gave lots of support
and ideas when I was getting stuck with bits and bobs.
-
Iain Barclay <isb@pobox.com>
Help and ideas and was good enough to read and reply to my mail while
I was attempting to get my head around various bits of Palm coding. He
also runs the excellent RoadCoders web site (check it out at http://www.roadcoders.com)
and is the author of the (IMHO) #1 timer application, BugMe!
-
J. Y. Mantinband <yosh@netvision.net>
Thanks for sticking with 1.05 and testing each release above and beyond the call of duty.
-
Andrew Ball <aball@icis.on.ca>
For helping me work out if the menu-death-bug was a problem with the
compiler and for patching TikTok to work with 0.5.0. Andy is also the author
of the excellent Chronos, if you want a serious stopwatch, clock and countdown
timer you should check out Chronos.
-
Holger Klawitter <holger@math.uni-muenster.de>
For the clock display suggestion.
-
Kadar Tanuwidjaja <ktan8@dgs.monash.edu.au>
For a patch that added the "timer memory" and "halting alarms" features.
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0.
This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1.
You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2.
You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- a)
You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
- b)
You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
- c)
If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3.
You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- a)
Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
- b)
Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
- c)
Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4.
You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5.
You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6.
Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7.
If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8.
If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9.
The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10.
If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11.
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.