SwitchTask v2.25
----------------

SwitchTask is a small but efficient program designed
to facilitate the switches between tasks, especially
when you hold your Serie 5 and you can't or don't want
to use the pen. But it does so much that even if you
are stylus addicted, you will find yourself using it all
the time. It allows you to define up to 26 shortcuts
for :

   1) Switching directly to an application or a document
   (run it if not started). When you need an info, you don't
   have to bother anymore whether the application is already
   running or not (then having to switch to the shell in order
   to find and start it), you just key the corresponding
   shortcut and youre in.

   2) Pasting a predefined text (with keywords like %%date%%,
   %%time%%, %%query question_text%%)

   3) Executing a macro (all the OPL, some new commands, send
   keys, etc...) for shortcuting all your repetitive tasks
   (e.g. direct access to the battery statistics, automatic link
   between your agenda and your data files, help on a selected
   command in the OPL editor, immediate link on/off, inserting
   new tasks in your agenda, modifying text, restart of your
   programs after a backup with PsiWin, ..., and all the
   small utilities that are not complex enough to make an app
   but you use all the time).

For those, like me, who hate to press Ctrl+Shift+Key in order
to access certain Menu functions, because they always miss a key
and got the wrong menu or a new character in their document,
SwitchTask provides a hotkey that will ask for a key and send
Ctrl+Shift+Key to the current application.

And last but not least, it  enables you to cycle through
tasks (like ctrl-tab on Windows), to display a tasklist
and to manage your display at switch on (backlight and contrast).


Installation :
--------------
+ Mandatory files
  Copy SwitchTask.app and SwitchTask.aif in \System\Apps\SwitchTask.
  Copy all the *.mbm of your country in \System\Apps\SwitchTask\Icons.
  If your machine is not US/English, German or French, copy the US files
  and rename them according to the captions you read on the screen
  sensitive keys and in the Extras bar.
  You can put the files either on C: or D: but all the files have to
  be on the same disk.
  If you don't already have it, copy Sysram1.opx in \System\OPX.

+ Optional files
  If you want to install the examples of macro, copy all
  the *.oph, *.opl and *.opo in c:\Macros and SwitchTask.ini
  in \System\Apps\SwitchTask. The macros have to be on 'c:' when you
  start SwitchTask for the first time, but you can reconfigure it.
  You will then have 6 shortcuts set up as examples, that you may of
  course change or delete.

You should have something like :

  c:---+---\Macros---+---Macro.oph
       |             +---*.opl
       |             +---*.opo
       +---\Startup
       |
       +---\System---+---\Apps---\SwitchTask---+---\Icons---*.mbm
                     |                         +---SwitchTask.aif
                     |                         +---SwitchTask.app
                     |                         +---SwitchTask.ini
                     +---\OPX---SysRam1.opx

Then start SwitchTask using the Extras bar and that's it.


Upgrade :
---------
First copy the mandatory files as explained above.
If you upgrade from v1.xx, delete \System\Data\SwitchTask.dat
If you upgrade from v2.00, delete \Data\SwitchTask\Data\SwitchTask.ini
I'm sorry for the trouble of having to re-enter your configuration
but I didn't want to overload the program with some extra code.
If you upgrade from 2.10 and defined hotkeys with Caps Lock "on", redefine them.
If you upgrade from 2.10 and over, move SwitchTask.ini from \Data\SwitchTask\Data\
to \System\Apps\SwitchTask. Remove the folder \Data\SwitchTask\Data\.
Then start SwitchTask and select in the menu 'Advanced>Macros folder'the folder
where the macros are stored. DO NOT change this path now, keep it
as \Data\SwitchTask\Macro\. At the prompt 'Update shorcuts' answer 'NO'
and you should be done.


Usage :
-------

1) You display a TaskList by pressing the TaskList Hotkey (Fn+Del by default).
   You may then switch to the selected task or close it.

2) To cycle through the tasks, hold down Ctrl, browse the applications with
   the Space Bar and release Ctrl when you have found the one your are looking
   for. It works like Ctrl-Tab on Windows. Esc or Del cancels the cycling (notice
   that the  hotkey is defined as Fn+Key, then Fn+Esc will switch off your machine).
   Any other key will cycle backward. Since you do not switch to SwitchTask itself
   very often, it does not appear in the cycle. Use the tasklist to access it.

3) You run a shortcut by typing first the Shortcuts Hotkey (Fn+N by default),
   then the key of the shortcut. If you configured SwitchTask for not displaying
   the shortcuts reminder, any non-letter key or any non-assigned letter will
   pop it up. Esc will cancel the action.

4) You send Ctrl+Shift+Key by pressing the Ctrl+Shift Hotkey (disabled by default),
   and then the letter corresponding to the Menu function you want to access.
   Any other key than a letter will cancel the action.

5) You can configure SwitchTask to set the backlight and the display contrast
   when the machine is switched on. It possible to activate or deactivate the backlight
   and the contrast settings. Parameters are different for the day and the night times.
   Of course, the Night Time has to be greater than the Day Time.

6) It is also possible to define macros that will be run either at switch on or at
   SwitchTask startup.

I have set up by default Fn+Del for the TaskList and Fn+N for the Shortcuts because
they are the same on the different keyboard layouts. But I find more convenient
to use only one modifier (Ctrl) and to affect the hotkeys to non-letter keys around
the right of the Space Bar, like "Ctrl+?" & "Ctrl+," on the US keyboard and
"Ctrl+:" & "Ctrl+;" on the French keyboard. The Ctrl+Shift hotkey is disabled by default.
I did not set a toolbar to keep the program as small as possible.

   App Menu :
   ----------
      + Go to background - Ctrl+B or Esc : send SwitchTask to background
      + Exit - Ctrl+E : exit SwitchTask

   Shortcuts Menu:
   ---------------
      + Modify - Ctrl+M or enter : edit the selected shortcut
      + Move - Ctrl+X : reassign the shortcut to a new key
      + Delete - Ctrl+H or Del : delete the selected shortcut
      + New macro - Ctrl+N : create and open a new source file for a macro
      + Open macro - Ctrl+O : edit the source file of the selected shortcut
      + Record macro - Ctrl+R : record your keystrokes in a new source file

      You select a shortcut either with the arrows or by typing directly the letter of
      the shortcut. Notice that Enter edit the current shortcut and does not run it.
      Press the Shortcuts hotkey for that. When you create or edit a shortcut,
      you specify first the Caption, which is the label put on the reminding panel,
      and the type of the shortcut. Then you enter the attributes of the shortcut.

      A shortcut may be a :
         + direct access to a document : to be used when the file you want to open is
           a document linked to an application : it has the same icon than its
           application and it may be run by selecting it with the explorer (e.g. Data,
           Word and spreadsheet files).
         + direct access to a program : to be used when the application is not document
           oriented (e.g. Calc, Shell, Time, games, utilities). Notice that you may
           switch to the system by running : "z:\System\Apps\Shell\Shell.app".
         + text to paste : can be any text up to 255 characters, plus the following
           keywords :
              + %%date format%% : insert the current date as specified by format.
                format may a combination of any characters plus :
                  +DD : day of the month (1 to 31)
                  +MM : month (1 to 12)
                  +YY : year on 4 digits
                  +yy : year on 2 digits
                  +DN : full day name
                  +dn : 3-letter day name
                  +MN : full month name
                  +mn : 3-letter month name
                e.g. %%date DD/MM/yy%% pastes 21/12/97
                rem  %%date%% is equivalent to %%date dn DD mn YY%%
              + %%time format%% : insert the current time as specified by format.
                format may a combination of any characters plus :
                  +HH : hours in 24 format
                  +hh : hours in 12 format
                  +MM : minutes
                  +SS : seconds
                  +AP : AM/PM
                e.g. %%time hh:MM:SS AP%% pastes 01:23:45 PM
                rem  %%time%% is equivalent to %%time HH:MM:SS%%
              + %%query question_text%% : open an input box with the label "question_text"
                and paste the input text.
           You can use as many keywords as you want. This way you may prepare small
           documents (e.g. email) that are customized on the spot. This version is
           limited to 255 characters, but by programming a macro with several paste
           commands, you can create large documents. If you ask for it, I will try
           to remove this limit. If you think of some new useful keywords, don't
           hesitate to send me an email. SwitchTask is improved through your feedback.
         + macro to execute : look below how to program macros.

      When you record a macro, you are first prompted for its name (must be a new file)
      and for the task you want to work on (you have the option of not recording
      this switch). If you want to switch to the system screen or any other standard
      application, select it in Z:\System\Apps. Then enter your sequence of keys.
      When you are done, stop the recording with the hotkey used for the Shortcuts
      and a program editor will pop up with the code of the macro.
      While recording, do not switch to another task with the application keys or
      the system tasklist, but use the TaskList or TaskCycling hotkeys instead.
      If you loose the blinking message "Recording macro...", get it back
      by switching to SwitchTask with the system tasklist.
      The Record Macro facility does not work if Macro.oph is not installed.
      I'm aware that the text cursor is not visible during the record of a macro
      but so far I have not been able to find a workaround.

   Display Menu :
   --------------
      + Zoom in/out - Ctrl+W : zoom in/out the Shortcuts Reminder.
      + Shortcuts Reminder - Ctrl+Y : if activated, the list of the 26 shortcuts
        will pop up each time you press the Shortcuts hotkey. Otherwise it will only
        pop up when pressing a non-letter key or a not assigned key.
 
   Tools Menu :
   ------------
      + Settings - Ctrl+S : define the options for setting the display at switch on.
        The "Turn backlight on when main power" option uses the night contrast setting.
      + Hotkeys ->
         + TaskList - Ctrl+L : set the hotkey for displaying a tasklist
         + TaskCycling - Ctrl+C : set the hotkey for cycling through open tasks
         + Shortcuts - Ctrl+K : set the hotkey for accessing the 26 shortcuts
         + Ctrl+Shift - Ctrl+I : set the hotkey for accessing the Ctrl+Shift capability
        It is possible to disable any hotkey with the key "Del".
        !!! Some very rare key combinations may return different keycodes when Caps Lock
        is on or off. If you use your machine in both modes, watch for that (in the
        hotkey setting try the key with and without Caps and check it is the same string).
        Otherwise define your hotkeys with Caps set accordingly but it may happen that
        one of your hotkeys will not work when you are in the other Caps mode.
        !!! Please notice that the buttons are not pen sensitive.
        This dialog box will be closed automatically if you switch to an other task.
      + Advanced ->
          + Macro at startup - Ctrl+U : execute the specified macro at Switchtask startup.
            This feature is particularly useful after a backup or a reset, when you have
            to restart all your favorite applications. If you have assigned an Extras bar
            position to SwitchTask, they may all be restarted with one key stroke.
            You may use the macro "Startup" that runs all the apps & docs
            in \Startup, but it may be anything else (e.g. a sequence of FgApp%:()).
          + Macro at switch on - Ctrl+T : execute the specified macro at switch on.
            Use it to foreground an application at each switch on or when you want
            something to be done or check regularly. For example you can use the macro
            NoLightOff that disable the backlight timer when the external power is
            connected or you can write a macro that checks the battery status at each
            switch on.
          + Macro folder - Ctrl+F : define the path of the folder where the macros are
            stored. When you change it, SwitchTask ask you to confirm the update
            of the shortcuts paths.
            !!! The system updates the shortcuts paths, but not the code of the macros.
            Some macros may have to be updated as well.
      + About - Ctrl+A : display information about SwitchTask.
      + Help - Ctrl+P : remind you the hotkeys.


Programming of Macros :
-----------------------

Macros are written and compiled with the standard program editor.
The sources should be named *.opl and the binaries *.opo, both stored
in \Macros (may be reconfigured). This naming is not mandatory but
will allow you to access these files directly from SwitchTask.
The language for the macros is the same than for any other OPL program.
The only restriction is that the name of the main procedure has to
be called 'Macro'. And of course, you may not use the APP ... ENDA
statement since you want to generate opo files.
All the EPOC32 OPL & OPX commands are available, plus some new variables,
constants and functions that will help you writing your macros :

   Variables :
   -----------

   + Thread& : + is set at the start of a macro and by FgDoc, RunDoc, FgApp,
                 BgApp, FgSystem and BgSystem.
               + is used by FgCurrent, BgCurrent, TaskUid, TaskApp, TaskDoc,
                 SendKeyCode, Paste, Copy, TaskUid, TaskApp and TaskDoc.
               + is the thread number of the task you want to work with.

   + Macro$ : + path of the folder where macros are stored.
              + e.g. use it to access the startup folder : Home$+"Startup\".
              !!! do not modify it otherwise the file input boxes will not point
                  to the correct folders anymore.

   Constants :
   -----------

   If you use them, you must add <<Include "Macro.oph>> at the top of the macro.

   + Key values to be used with SendKeyCode:
	+ %a...%z value of the corresponding key
        + Esc%
        + Tab%
        + Enter%
        + Space%
        + Del%
        + Menu%
        + UpArrow%
        + DownArrow%
        + LeftArrow%
        + RightArrow%
        + PageUp%
        + PageDown%
        + PageLeft%
        + PageRight%
        + Ctl% : to be add to the key value if you want to send a Ctrl+letter
        + Sft% : to be add to the key value if you want to send a Shift+letter
                 !!! do not add Sft% to the key value if you have already
                     added Ctl%, even if you want to send a Ctrl+Shift+letter.
                     Look at the examples provided below in the SendKeyCode section.

    + Modifier values to be used with SendKeyCode:
        + None% :  no modifier
        + Shift% : Shift modifier
        + Ctrl% :  Ctrl modifier
        + Fn% :    Fn modifier

      You must sum all the modifiers you want to send. Look at the examples
      provided below in the SendKeyCode section.

    !!! If you want to send 'Home', 'End', 'PageUp' and 'PageDown', use the corresponding
        Pagexxx% constant, not the xxxArrow% constant combined with Fn%.

   Commands :
   ----------

      + FgDoc%:(Doc$)
         => + foreground the document Doc$ if in memory and open it otherwise.
            + use it only with documents bound to applications (have the same icon
              than their application and may be run by selecting them with the explorer).
	    + set Thread& to the corresponding ThreadId.
	    + return 0 if Doc$ was in memory and 1 if it has to be loaded.

      + UseDoc%:(App$,Doc$,Cmd%)
         => + switch to the document Doc$ if in memory and Cmd% < 3,
              set Thread& to the corresponding ThreadId if in memory and Cmd% = 3,
              and start App$ otherwise.
            + Cmd%=0 for open, 1 for create, 2 for run and 3 for run in background.
              Notice that the standard applications do not open Doc$ but the last
              document when they are opened with Cmd%=3.
            + set Thread& to the corresponding ThreadId.
            + return 0 if Doc$ was in memory and 1 if it has to be loaded.

      + FgApp%:(App$)
         => + foreground the program App$ if in memory and run it otherwise.
            + handle app, opo and application bound documents as well, but prefer
              FgDoc when you know it is a document (is faster).
            + set Thread& to the corresponding ThreadId.
            + return 0 if App$ was in memory and 1 if it has to be run.

      + BgApp%:(App$)
         => + set Thread& to the corresponding ThreadId if in memory and run it
              in the background otherwise. To be used when you want to send information
              (SendKeyCode, Copy$, Paste) to an application but you don't want it
              to be in the foreground yet (is faster).
            + handle only programs (app & opo), not documents.
            + set Thread& to the corresponding ThreadId.
            + return 0 if App$ was in memory and 1 if it has to be run.

      + FgSystem:
         => + foreground System.
            + set Thread& to the corresponding ThreadId.

      + BgSystem:
         => + set Thread& to the ThreadId of System.

      + FgCurrent:
         => + foreground the task with the ThreadId Thread&.
         !!!! make sure that Thread& points to the correct task.

      + BgCurrent:
         => + background the task with the ThreadId Thread&.
         !!!! make sure that Thread& points to the correct task.

      + FgSound:(Sound$,Volume%)
         => + play the file Sound$, waiting for the end of the file before going on.
            + 0 (no volume) =< Volume% =< 4 (maximum volume).

      + BgSound:(Sound$,Volume%)
         => + play the file Sound$, going on without waiting the end of the file.
            + 0 (no volume) =< Volume% =< 4 (maximum volume).

      + GetFocus:
         => + when any Bgxxx commands is used, the corresponding task is foregrounded
              and the macro is sent to the background. As a result all displays are now
              in the background as well and all events redirected to the current task.
              GetFocus return the focus on the macro when you need to display information
              or input data.
          !!! Thread& keeps its current value.

      + ReleaseFocus:
         => + return the focus to the current task.
            + you may use FgCurrent (or any Fgxxx) as well.
         !!!! Thread& keeps its current value.

      + Copy$:
         => + copy the selected text in the clipboard and return it.
            + if the text is greater than 255 characters, only the first 255 are copied.
         !!!! if no text is selected, the current clipboard is returned.
         !!!! make sure that Thread& points to the correct task.

      + Paste:(Text$)
         => + put Text$ in the clipboard and paste it.
            + the keywords %%date%%, %%time and %%query question_text%% may be used.
         !!!! this command works only when the target task supports it.
         !!!! make sure that Thread& points to the correct task.

      + ClipLen&:
         => + return the length of the text in the clipboard

      + ClipRead:(BufferAddr&,Max&)
         => + put in Buffer the text in the clipboard, with a limit of Max& Characters.
         !!!! Max& has to be a long integer. If you use a constant, either do it in hexa
              and put '&' before or include "Macro.oph" for the OPL compiler to coerce
              the parameters types.
         !!!! make sure that Buffer is large enough to store Max& characters.
         !!!! if you want to read the selected text,
              use "SendKeyCode:(Ctl%+%c,Ctrl%,1) :Pause 5" before.

      + ClipWrite&:(BufferAddr&)
         => + put in the clipboard the text in Buffer.
         !!!! if you want to paste the text in the current task,
              use SendkeyCode:(Ctl%+%v,Ctrl%,1) after.

      + SendKeyCode:(KeyCode%,Modifier%,Repeat%)
         => + send the corresponding key to the task pointed by Thread&.
            + Keycode% is ev&(1) and Modifier% is KeyMod&:(ev&(4)) when using
              the command GetEvent32 ev&().
              Repeat% is the number of times you want to send the key.
            + you may use the macro SendKeyCode to program your key sequences
              or use the predefined variables. But then notice that the key code for Key
              and Fn+key is the same, as Shift+Ctrl+Key is the same than Ctrl+Key.
              e.g. to send Z         use    SendKeyCode:(%z,None%,1)
                           Shift+Z          SendKeyCode:(Sft%+%z,Shift%,1)
                           Ctrl+Z           SendKeyCode:(Ctl%+%z,Ctrl%,1)
                           Fn+Z             SendKeyCode:(%z,Fn%,1)
                           Ctrl+Shift+Z     SendKeyCode:(Ctl%+%z,Ctrl%+Shift%,1)
                           Ctrl+Fn+Z        SendKeyCode:(Ctl%+%z,Ctrl%+Fn%,1)
                           Shift+Fn+Z       SendKeyCode:(Sft%+%z,Shift%+Fn%,1)
                           Ctrl+Shift+Fn+Z  SendKeyCode:(Ctl%+%z,Ctrl%+Shift%+Fn%,1)

         !!!! make sure that Thread& points to the correct task.
         !!!! to send 'Home' use SendKeyCode:(PageLeft%,None%,1) and
              not SendKeyCode:(LeftArrow%,Fn%,1).

      + KeyMod&:(EvMod&)
         => + translate the Modifiers Code returned by GetEvent32 in ev&(4).
              to the Modifers Code used by SendKeyCode.

      + TaskUid&:
         => + return the program's UID pointed by Thread&.
         !!!! make sure that Thread& points to the correct task.

      + TaskApp$:
         => + return the program's name pointed by Thread&.
         !!!! make sure that Thread& points to the correct task.

      + TaskDoc$:
         => + return the path of the document used by the program pointed by Thread&.
              return "" if the program does not use any document or has not declared it.
         !!!! make sure that Thread& points to the correct task.

      + gClip:(Text$)
         => + same as Busy, but does not blink.
         !!!! make sure you've got the focus, otherwise nothing will appear.

      + gClipOff:
         => + same as Busy Off but for gClip.

      + OPLCreate:(HdlAddr&,Files$)
         => + create the OPL file Files$ with the handler Hdl%.
         !!!! needs Macro.oph.

      + OPLWrite:(Hdl%,Text$)
         => + write Text$ in the OPL file handled by Hdl%.

      + OPLClose:(Hdl%)
         => + close the OPL file handled by Hdl%.

      + Beep:
         => + sound a nice beep.

Notice that a macro is seen as a part of SwitchTask (that's why you are able to
access some global variables and new functions) and consequently, as long as the
macro is running, SwitchTask is not available for an other switch or lighting up
the display at switch on. The purpose of a macro is to automate straight tasks.
If you think of something more complex, then program an app and define a shortcut
to run it. Do not use macros to access SwitchTask : because SwitchTask is busy
executing the macro, it will not react to the sent events.
You may not program SwitchTask to switch to itself.
!!! But you may define a position for SwitchTask in the first line of the Extras bar
and then access it directly by a single key stroke.
If you think of new functions that would help writing macros, please send me an email.
And if you write useful macros, please think that it may benefit to others.
Either publish them on the web or send them to me and I will upload them on my site.
I have included some examples as a tutorial :

   + Battery : display the battery statistics : show you how to send keys to an App (*).
   + LinkOn : set on the link : show you how to send keys to an App (*).
   + LinkOff : set off the link : show you how to send keys to an App (*).
   + DataLink : show you how to set a link between an App and a data file.
   + OPLHelp : display the usage of a keyword you've selected in the OPL Editor (+).
   + FileTime : change the time stamp of a file : show you how to use OPL in a macro.
   + UpperCase : set to uppercase the text you've selected : show you how to handle
                 the clipboard functions.
   + SendKeyCode : read the keys you are typing and paste in your current macro
                   source file the corresponding SendKeyCode commands.
   + RunExtras : run applications in the Extras bar without the pen.
   + Startup : start all the App/Doc in c:\Startup. Very useful after a backup
               with PsiWin or a reset.
   + NoLightOff : disable the backlight timer when the main power is present. To be
                  used as a 'Run macro at switch on'.

   (*) : these macros have been written for the US/UK, German and French Serie 5.
         The key sequences must be adapted if your machine is from another country.
   (+) : you need the "OPL reference" database file.

Please have a look at them before writing your own procedures. I hope they cover
all the new commands. If you have any questions, please feel free to contact me
and I will do my best to reply you as soon as possible. Because you can do almost
anything with macros, you should watch what you are doing and backup your data.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! If you get the error message 'ppp procedure not found' where ppp is one   !!!
!!! of the macro functions (BgSystem, FgCurrent, ...), it means either that   !!!
!!! you did not select the type "macro" in the shortcut definition, or you're !!!
!!! trying to run the macro directly from the program editor or the system.   !!!
!!! A macro cannot be run directly after a translation or by selecting it     !!!
!!! in the explorer, but must be executed through a shortcut in SwitchTask.   !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Planned enhancements :
----------------------
- possibility to assigned hotkeys to very often used shortcuts
- more shortcuts (one hotkey per panel)
- running of macro/app/doc at specified times (crontab) (e.g. automatic link off)
- SendKeyCode(String$) function for the macros
- unlimited size for the ClipTexts
- graphical battery status
- full online help

Vote for them. If you wish something else, then send me an email.
And once again, if you write some useful macros, send them to
me or publish them so that others may use them.

- I've been asked by a lot of people for the capability to pilote the Extras bar
  with the keyboard. There is no command in the EPOC32 v1.01 that enable to send
  a pen event to a task. I'd love to have this feature and will include it as soon
  as it will pe possible.
- I've also been thinking of the possibility to set shortcuts that would switch to
  the explorer directly in the folder you've defined. But I don't know of any Shell API
  that would do the trick.


Known issues :
--------------
- When you press tab in a file select box and the directory is system,
  the app crashes. It seems to be an EPOC32 bug and I can't do anything about it.
- When SwitchTask is busy doing something (opened dialog or menu,
  running macro), neither the hotkeys or the display settings works.
  Consequently, do not keep open a dialog box and write straight macros.
- The text cursor is not visible when a macro is being recorded. So far I have not
  been able to find a work around.


History :
---------
- v1.00 : + first public release
- v1.10 : + added the cycling through tasks
          + changed the default values for the hotkeys
- v1.11 : + excluded SwitchTask from the cycle
- v2.00 : + added 26 shortcuts for running app/doc, ClipLibrary and macros
          + improve the hotkey setting interface
          + removed the blinking when cycling through tasks
          + moved the init file from \System\Data to \Data\SwichTask\Data
          + official UID from Psion
- v2.10 : + added the Ctrl+Shift hotkey
          + added the option of not displaying the shorcuts panel
          + added the possibility to disable each hotkey
          + set Thread& automatically at the start of a macro, removed SetCurrent
          + FgApp now runs documents as well as app and opo.
          + added the functions TaskUid, TaskApp, TaskDoc and KeyMod
          + removed some variables and put them as constants in Macro.oph
          + rewrote all the macros, added the macro Startup
          + added the handling of Caps Lock in the hotkey setting
          + few bugs corrected
- v2.15 : + added the option to run a macro at startup
          + added the option to set backlight "on" when external power is connected
          + added the variable Home$ and the functions FgMacro, ClipLen&, ClipRead and ClipWrite
          + added the declaration of the macro functions in Macro.oph
          + hotkeys, shortcuts and ctrl+shifts callings are not sensitive to Caps Lock anymore
          + SendKeyCode now works when Nb% > 1
          + fixed a problem with KeyMod ; letters are now in lowercases in KeyString
- v2.20 : + added the backward cycling
          + added the Shortcuts Panel zooming
          + added the Record Macro facility
          + the format of %%date%% and %%time%% is now fully configurable
          + added the functions FgSound, BgSound and Beep
          + removed FgMacro : a macro cannot run an other macro because they've got the same name
          + adapted the display to the Geofox One
          + fixed a problem with Copy$ that could return nothing even when a text was selected
- v2.25 : + the task cycling bar now includes the application icons
          + added the option to run a macro at switch on
          + moved SwitchTask.ini to \System\Apps\SwitchTask
          + added the possibility to change the path of the macros folder, removed Home$, added Macro$
          + added commands OPLCreate, OPLWrite and OPLClose.
          + new macros RunExtras and NoLightOff included, macro Startup updated
          + fixed bug with %%date dn%% and %%date DN%
          + fixed bug with TaskApp$ returning too many characters


Copyright :
-----------
This program has been written by Pascal NICOLAS. It may be distributed
freely as long as it is not altered or sold. This program is a SmileWare,
which means that if you use it, you "MUST" send me a :-)
Even if you did it for a previous release, please tell me how you find
this new version : I do love :-) very much. I will then notify you of
the new releases.

Thank you to all of you who send me comments, new ideas, :-) and encourages
me to go on.

Pascal NICOLAS
Email : pnicolas@geocities.com
Latest version at http://www.geocities.com/SiliconValley/Pines/1215