<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%
%% This is file `shrtcnt.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% cntdwn.dtx  (with options: `copyright,shortcnt')
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% cntdwn package,            2010-8-2                  %%
%% Copyright (C) 2010  D. P. Story                      %%
%%   dpstory@uakron.edu                                 %%
%%                                                      %%
%% This program can redistributed and/or modified under %%
%% the terms of the LaTeX Project Public License        %%
%% Distributed from CTAN archives in directory          %%
%% macros/latex/base/lppl.txt; either version 1 of the  %%
%% License, or (at your option) any later version.      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\cntdwnopts}[1]{\TU{#1}\H{N}\S{S}\BG{}}
\newcommand{\cntdwnDisplay}[4][]{%
    \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
        \def\autorun@presets{%
            \AA{\AAPageOpen{if (!\CDO#2.isCounting&amp;&amp;!\CDO#2.bNotify4)
                sStartTimer(\CDO#2);}}}\else
        \let\autorun@presets\@empty\fi
    \textField[\Ff\FfReadOnly\Q{1}#1\presets{\autorun@presets}
    ]{\CDO#2.cntdwn.TimeRemaining}{#3}{#4}}
\newcommand{\cntdwnStartT}[4][]{%
    \pushButton[\presets{\cntdwnopts{Start}}
    \A{\JS{sStartTimer(\CDO#2);}}#1]{\CDO#2.cntdwn.Notify1}{#3}{#4}}
\newcommand{\cntdwnStart}[4][]{%
    \pushButton[\TU{Start}\A{\JS{sStartTimer(\CDO#2);}}#1
    ]{\CDO#2.cntdwn.Start}{#3}{#4}}
\newcommand{\cntdwnPauseT}[4][]{%
    \pushButton[\presets{\cntdwnopts{Pause}}
    \A{\JS{sPauseTimer(\CDO#2);}}#1
    ]{\CDO#2.cntdwn.Notify2}{#3}{#4}}
\newcommand{\cntdwnPause}[4][]{%
    \pushButton[\TU{Pause}\A{\JS{sPauseTimer(\CDO#2);}}#1
    ]{\CDO#2.cntdwn.Pause}{#3}{#4}}
\newcommand{\cntdwnStopT}[4][]{%
    \pushButton[\presets{\cntdwnopts{Stop}}
    \A{\JS{sStopTimer(\CDO#2);}}#1
    ]{\CDO#2.cntdwn.Notify3}{#3}{#4}}
\newcommand{\cntdwnStop}[4][]{%
    \pushButton[\TU{Stop}\A{\JS{sStopTimer(\CDO#2);}}#1
    ]{\CDO#2.cntdwn.Stop}{#3}{#4}}
\newcommand{\cntdwnEndTarget}[4][]{%
    \textField[\Ff\FfReadOnly\Ff\FfMultiline#1
    ]{\CDO#2.cntdwn.End}{#3}{#4}}
\newcommand{\setShortCntDwn}[2]{\begingroup
    \@ifundefined{#1@timername}{\cntdwn@namegdef{#1@timername}{#1}}%
    {\PackageError{cntdwn}{The name `#1' is already defined as a timer
    variable.}{Choose a unique timer variable name,
    one different from `#1'.}}%
    \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
    \def\hours{_oTime.hour}%
    \setkeys{cntdwn}{endmsg,#2}%
    \cntdwn@namexdef{#1@autorun}{\ctndwn@autorun}%
    \def\r{^^J}\def\t{\space\space\space\space}%
    \cntdwn@namexdef{#1TimerObject}{%
        var _o#1 = {\r\t
            name: "_o#1",\r\t
            length: \cntdwn@length,\r\t
            timeleft: \cntdwn@length,\r\t
            notify1: \cntdwn@notifyi,\r\t
            notify2: \cntdwn@notifyii,\r\t
            notify3: \cntdwn@notifyiii,\r\t
            refreshrate: \cntdwn@refreshrate,\r\t
            event1: "\cntdwn@eventi",\r\t
            event2: "\cntdwn@eventii",\r\t
            event3: "\cntdwn@eventiii",\r\t
            endEvent: "\cntdwn@eventiv",\r\t
            weStopOnEnd: \cntdwn@ifstop,\r\t
            isStopwatch: \isStopwatch,\r\t
            startcolor: \cntdwn@startcolor,\r\t
            pausecolor: \cntdwn@pausecolor,\r\t
            stopcolor: \cntdwn@stopcolor,\r\t
            endMsg: "\cntdwn@endmsg",\r\t
            bNotify1:false,\r\t
            bNotify2:false,\r\t
            bNotify3:false,\r\t
            bNotify4:false,\r\t
            isCounting:false,\r\t
            bBlinkOn:false,\r\t
            startTime:0,\r\t
            pauseTime:0,\r\t
            EndOfTime:0,\r\t
            blinkTimeOut:null,\r\t
            timeout:null\r
        };
    }%
    \ifx\cntdwnlTimers\@empty
    \else\g@addto@macro\cntdwnlTimers{^^J}\fi
    \expandafter\g@addto@macro\expandafter\cntdwnlTimers
    \expandafter{\csname#1TimerObject\endcsname}%
    \ifx\cntdwnaTimers\@empty\else\g@addto@macro\cntdwnaTimers{^^J}\fi
    \g@addto@macro\cntdwnaTimers{aTimers["_o#1"]=_o#1;}%
    \endgroup}
\def\thetimername#1{\csname#1@timername\endcsname}
\@onlypreamble\setShortCntDwn
\define@boolkey{cntdwn}{stopwatch}[true]{%
    \edef\isStopwatch{\ifKV@cntdwn@stopwatch true\else false\fi}}
\define@boolkey{cntdwn}{autorun}[true]{%
    \edef\ctndwn@autorun{\ifKV@cntdwn@autorun1\else0\fi}}
\define@key{cntdwn}{length}[20*\minutes]{\def\cntdwn@length{#1}}
\define@key{cntdwn}{notify1}[5*\minutes]{\def\cntdwn@notifyi{#1}}
\define@key{cntdwn}{notify2}[3*\minutes]{\def\cntdwn@notifyii{#1}}
\define@key{cntdwn}{notify3}[1*\minutes]{\def\cntdwn@notifyiii{#1}}
\define@key{cntdwn}{refreshrate}[1000]{\def\cntdwn@refreshrate{#1}}
\define@key{cntdwn}{event1}[sDefNotify1]{\def\cntdwn@eventi{#1}}
\define@key{cntdwn}{event2}[sDefNotify2]{\def\cntdwn@eventii{#1}}
\define@key{cntdwn}{event3}[sDefNotify3]{\def\cntdwn@eventiii{#1}}
\define@key{cntdwn}{endEvent}[sDefEndEvent]{\def\cntdwn@eventiv{#1}}
\define@choicekey{cntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
    \ifcase\nr\relax\def\cntdwn@ifstop{true}\or
    \def\cntdwn@ifstop{false}\fi}
\define@key{cntdwn}{startcolor}[color.green]{%
    \def\cntdwn@startcolor{#1}}
\define@key{cntdwn}{pausecolor}[color.yellow]{%
    \def\cntdwn@pausecolor{#1}}
\define@key{cntdwn}{stopcolor}[color.red]{\def\cntdwn@stopcolor{#1}}
\newcommand{\cnddwnDefaultEndMsg}{This ends the
    Presentation, any questions?}
\define@key{cntdwn}{endmsg}[\cnddwnDefaultEndMsg]{%
    \def\cntdwn@endmsg{#1}}
\setkeys{cntdwn}{stopwatch=false,onfinish,length,%
    notify1,notify2,notify3,refreshrate,startcolor,pausecolor,%
    stopcolor,event1,event2,event3,endEvent,autorun=false,endmsg}
\begin{insDLJS*}[shrtcntdwn]{shrtcntdwn}
\begin{newsegment}{CntDwn: Countdown JavaScript}
function shrtcntdwn(cTimer){
    var oTimer=aTimers[cTimer];
    var _delta,nDays,pDays,nHours,pHours,nMinutes,
        pMinutes,nSeconds,pSeconds,timeValue,isEndReached;
    _delta=(oTimer.isStopwatch)?new Date()%
-new Date(oTimer.startTime):new Date(oTimer.EndOfTime)-new Date();
    oTimer.timeleft=_delta;
    _delta=(_delta&lt;0)?-_delta:_delta;
    this.delay=true;
    nDays = Math.floor(_delta/_oTime.day);
    pDays = _delta\%_oTime.day;
    nHours = Math.floor(pDays/_oTime.hour);
    pHours = pDays\%_oTime.hour;
    nMinutes = Math.floor(pHours/_oTime.minute );
    pMinutes = pHours\%_oTime.minute;
    nSeconds = Math.floor(pMinutes/_oTime.second);
    pSeconds = pMinutes\%_oTime.second;
    timeValue=((nHours&gt;=1)?((nHours&lt;10)?"0":"")+nHours+":":"")
        +((nMinutes&lt;10)?"0":"")+nMinutes
        +":"+((nSeconds&lt;10)?"0":"")+nSeconds;
    try { this.getField(oTimer.name%
+".cntdwn.TimeRemaining").value= timeValue; }
        catch(e) {};
    isEndReached=(oTimer.isStopwatch)?oTimer.timeleft&gt;oTimer.length%
:oTimer.timeleft&lt; 0;
    if ( isEndReached &amp;&amp; !oTimer.bNotify4) {
        oTimer.bNotify4=true;
        eval(oTimer.endEvent)(this,cTimer);
        if (oTimer.weStopOnEnd) {
          oTimer.isCounting=false;
          try { app.clearInterval(oTimer.timeout);
            oTimer.timeout=null; } catch(e){};
        }
        try { app.clearInterval(oTimer.blinkTimeOut);
            oTimer.blinkTimeOut=null; } catch(e){};
        this.delay=false;this.dirty=false;
        if (oTimer.weStopOnEnd) return;
    }
    if (oTimer.isStopwatch) {
        if (!oTimer.bNotify1&amp;&amp;(_delta&gt;oTimer.notify1))
            {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
        if (!oTimer.bNotify2&amp;&amp;(_delta&gt;oTimer.notify2))
            {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
        if (!oTimer.bNotify3&amp;&amp;(_delta&gt;oTimer.notify3))
            {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
    } else {
        if (!oTimer.bNotify1&amp;&amp;(_delta&lt;oTimer.notify1))
            {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
        if (!oTimer.bNotify2&amp;&amp;(_delta&lt;oTimer.notify2))
            {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
        if (!oTimer.bNotify3&amp;&amp;(_delta&lt;oTimer.notify3))
            {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
    }
    this.delay=false;this.dirty=false;
}
function sDefNotify1(doc,cTimer) {
    var oTimer=aTimers[cTimer];
    var f = doc.getField(cTimer+".cntdwn.Notify1");
    if (f!=null) f.fillColor = oTimer.startcolor;
    app.beep();
}
function sDefNotify2(doc,cTimer) {
    var oTimer=aTimers[cTimer];
    var f = doc.getField(cTimer+".cntdwn.Notify2");
    if (f!=null) f.fillColor = oTimer.pausecolor;
    app.beep();
}
function sDefNotify3(doc,cTimer) {
    var oTimer=aTimers[cTimer];
    app.beep();
    var f = doc.getField(cTimer+".cntdwn.Notify3");
    if ( f!=null)
        oTimer.blinkTimeOut=app.setInterval(%
"_sBlinkRed(\""+cTimer+"\")",500);
}
function _sBlinkRed(cTimer) {
    var oTimer=aTimers[cTimer];
    var f=this.getField(cTimer+".cntdwn.Notify3");
    f.fillColor = ( oTimer.bBlinkOn )?color.white:oTimer.stopcolor;
    oTimer.bBlinkOn=!oTimer.bBlinkOn;
    this.dirty=false;
}
function sDefEndEvent(doc,cTimer) {
    var oTimer=aTimers[cTimer];
    var f=doc.getField(cTimer+".cntdwn.Notify3");
    if (f!=null) f.fillColor = oTimer.stopcolor;
    f=doc.getField(cTimer+".cntdwn.End");
    if (f!=null) f.value = oTimer.endMsg;
}
function sPauseTimer(oTimer) {
    oTimer.isCounting=false;
    oTimer.pauseTime=new Date().valueOf();
    try { app.clearInterval(oTimer.timeout);
        oTimer.timeout=null; } catch(e){};
}
function sStopTimer(oTimer) {
    oTimer.isCounting=false;
    oTimer.startTime=oTimer.pauseTime=0;
    oTimer.timeleft=oTimer.length;
    try { app.clearInterval(oTimer.timeout);
        oTimer.timeout=null; } catch(e){};
    try { app.clearInterval(oTimer.blinkTimeOut);
        oTimer.blinkTimeOut=null; } catch(e){};
    try { this.getField(oTimer.name%
+".cntdwn.Notify1").fillColor = color.white; } catch(e) {}
    try { this.getField(oTimer.name%
+".cntdwn.Notify2").fillColor = color.white; } catch(e) {}
    try { this.getField(oTimer.name%
+".cntdwn.Notify3").fillColor = color.white; } catch(e) {}
    oTimer.bNotify1=oTimer.bNotify2=oTimer.bNotify3%
=oTimer.bNotify4=false;
    this.resetForm([oTimer.name]);
    this.dirty=false;
}
function sStartTimer(oTimer) {
    if (oTimer.isCounting) return;
    oTimer.isCounting=true;
    if (oTimer.startTime == 0 || (event.shift) %
|| (oTimer.weStopOnEnd&amp;&amp;oTimer.bNotify4) ){
        sStopTimer(oTimer);
        oTimer.startTime=new Date().valueOf();
    }
    oTimer.pauseTime=(oTimer.pauseTime==0)?0:new Date()%
-new Date(oTimer.pauseTime)+oTimer.refreshrate;
    oTimer.startTime+=oTimer.pauseTime;
    if (oTimer.isStopwatch)
        oTimer.EndOfTime=oTimer.startTime+((event.shift)?oTimer.length%
:oTimer.timeleft);
    else
        oTimer.EndOfTime=new Date().valueOf()%
+((event.shift)?oTimer.length:oTimer.timeleft);
    oTimer.timeout=app.setInterval(%
"shrtcntdwn(\""+oTimer.name+"\")",oTimer.refreshrate);
}
\end{newsegment}
\end{insDLJS*}
\endinput
%%
%% End of file `shrtcnt.def'.
</pre></body></html>