/****************************************************************************** 
                 The Klipper Library, for CA-Clipper 5.x                        
        Copyright (c), 1994, Wallace Information Systems Engineering            

FUNCTION:

_Timer(nChannel, nAction, nOptVal) --> nTimerData

PARAMETERS:

nChannel: Timer Channel Number (1-16 DEAFAULT: 1)
nAction : Timer Action:

        KT_RESET   Reset specified timer to ZERO
        KT_START   Start specified timer
        KT_STOP    Stop specified timer
        KT_READ    Read specified timer
        KT_SET_TO  Set nChannel to the value in nSet
        KT_SWITCH  Stop other channels & start channel nChannel
        KT_ASSIGN  Set specified timer to a specific value.

nOptVal : Numeric setting for SET action SET_TO.

SHORT:

16 channel "timer & stopwatch."

DESCRIPTION:

_Timer() contains 16 individual timers (assigned to "channels").

KT_RESET resets a timer channel to ZERO.  Any previous time on that channel 
is lost.

KT_START starts the specified nChannel timer.  Time accumulates until a 
KT_STOP, or KT_SWITCH is issued. 

KT_STOP stops a timer channel, but does not reset it's value. It remains 
stopped until a KT_START, or a KT_SWITCH to that channel is issued. 

KT_READ reads the time on the specified timer channel.  If the timer is 
running, it continues to run after the KT_READ.  If it is stopped, it remains 
stopped.

KT_SET_TO causes the specified timer channel to be set to the time in 
currently in the timer channel specified in nSet. 

KT_SWITCH causes all timers to be stopped, and the specified channel to be 
started.

KT_ASSIGN allows you to set a timer to a specific value.  Thus, a timer could 
continue to accumulate time through several separate runs of an application 
by saving the timer contents (retrieved by KT_READ) and, when the application 
is run again, setting the timer to it's previous value.  KT_ASSIGN sets the 
ELAPSED TIME to the specified value and clears the START and STOP time 
(effectively STOPPING the timer).  Thus, when you KT_ASSIGN a timer channel, 
you must also start it (if desired).


Begin by KT_RESETing the desired channel to ZERO.  Then start and stop the 
timer as necessary.  At any point, you can obtain a reading of any given 
timer by KT_READing it. 

You may also KT_SET_TO one timer to the current time on another channel. This 
will allow you to keep one overall time reading by way of multiple channels.

All 16 timers are intially assigned a ZERO time.

NOTE:



EXAMPLE:

See DEMOS\TIMER\MAIN.PRG for example.

******************************************************************************/
