summaryrefslogtreecommitdiff
path: root/texmf-dist/tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2017-07-13 09:30:28 +0900
committerNorbert Preining <norbert@preining.info>2017-07-13 09:30:28 +0900
commit32d0671418a3cc6ad0465b06539ed54d96f77784 (patch)
tree83f9ce9f288adee0aa0af0eddfdccf6d5a47bae7 /texmf-dist/tex
parent30e9cda301125dbde368d7bba3331bfd0f8389a1 (diff)
add artthreads cntdwn ecards fc-arith fldigigal
Diffstat (limited to 'texmf-dist/tex')
-rw-r--r--texmf-dist/tex/latex/artthreads/artthreads.sty200
-rw-r--r--texmf-dist/tex/latex/cntdwn/cntdwn.sty84
-rw-r--r--texmf-dist/tex/latex/cntdwn/lngcnt.def518
-rw-r--r--texmf-dist/tex/latex/cntdwn/shrtcnt.def271
-rw-r--r--texmf-dist/tex/latex/ecards/ecards.sty560
-rw-r--r--texmf-dist/tex/latex/ecards/ecardslist.def91
-rw-r--r--texmf-dist/tex/latex/fc-arith/fc_arith.sty1887
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_ht1.swfbin0 -> 78677 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_nt1.swfbin0 -> 123787 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fdg_vt1.swfbin0 -> 138607 bytes
-rw-r--r--texmf-dist/tex/latex/fldigigal/fldigigal.cfg7
-rw-r--r--texmf-dist/tex/latex/fldigigal/fldigigal.sty177
12 files changed, 3795 insertions, 0 deletions
diff --git a/texmf-dist/tex/latex/artthreads/artthreads.sty b/texmf-dist/tex/latex/artthreads/artthreads.sty
new file mode 100644
index 00000000..f8ec0fbb
--- /dev/null
+++ b/texmf-dist/tex/latex/artthreads/artthreads.sty
@@ -0,0 +1,200 @@
+%%
+%% This is file `artthreads.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% artthreads.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% artthreads.sty package, 2016-04-09 %%
+%% Copyright (C) 2016 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{artthreads}
+ [2016/04/09 v1.1 Support for article threads (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{ifxetex}[2006/08/21]
+\@ifundefined{ifpdfmarkup}{\newif\ifpdfmarkup}{}\pdfmarkupfalse
+\ifpdf\else\ifxetex\else\pdfmarkuptrue\fi\fi
+\DeclareOptionX{pdftex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvips}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipsone}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipdfm}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{dvipdfmx}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{xetex}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!preview}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{viewMagWin}{\PassOptionsToPackage{\CurrentOption}{fitr}}
+\DeclareOptionX{!viewMagWin}
+ {\PassOptionsToPackage{\CurrentOption}{fitr}}
+\ProcessOptionsX
+\RequirePackage{fitr}[2016/04/04]
+\newif\ifnewarticle
+\newcounter{artthrdcnt}
+\def\CntArt{0}\def\CntArtInfo{0}
+\def\inc@CntMacro#1{{\@tempcnta#1\relax\advance\@tempcnta1\relax
+ \xdef#1{\the\@tempcnta}}}
+\def\artM@rk{[\space}
+\define@key{artthrd}{title}[]{\def\threadTitle{#1}}
+ \let\threadTitle\@empty
+\define@key{artthrd}{author}[]{\def\threadAuthor{#1}}
+ \let\threadAuthor\@empty
+\define@key{artthrd}{keywords}[]{\def\threadKeywords{#1}}
+ \let\threadKeywords\@empty
+\define@key{artthrd}{subject}[]{\def\threadSubject{#1}}
+ \let\threadSubject\@empty
+\newcommand{\setThreadInfo}[1]{\inc@CntMacro\CntArtInfo
+ \let\threadTitle\@empty\let\threadAuthor\@empty
+ \let\threadKeywords\@empty\let\threadSubject\@empty
+ \setkeys{artthrd}{#1}\ifx\threadTitle\@empty
+ \def\threadTitle{thread-\CntArtInfo}\fi
+}
+\def\bArtErrMsg{When starting a new article thread
+ (\string\cArticle)\MessageBreak
+ first use \string\setThreadInfo\space to set the title,\MessageBreak
+ author, subject, and keywords}
+\define@key{@rtthrd}{addtow}[0]{%
+ \fitr@defaultbp{\artthrd@@addtow}{#1}}
+\def\artthrd@@addtow{0}
+\define@key{@rtthrd}{addtoh}[0]{%
+ \fitr@defaultbp{\artthrd@@addtoh}{#1}}
+\def\artthrd@@addtoh{0}
+\newcommand{\setAddToBorder}[1]{\setkeys{@rtthrd}{#1}}
+\newcommand{\bArticle}{\begingroup\inc@CntMacro\CntArt
+ \ifnum\CntArt=\CntArtInfo\relax\else
+ \PackageError{artthreads}{\bArtErrMsg}{See package documentation
+ for \string\setThreadInfo}\fi
+ \newarticletrue\set@rectart
+}
+\newcommand{\cArticle}{\begingroup\newarticlefalse\set@rectart}
+\newcommand{\set@rectart}[1]{\def\fitr@artrect@argi{#1}%
+ \edef\temp@exp{\noexpand\setkeys{fitr}{#1}}\temp@exp
+ \set@@rectart}
+\def\set@@rectart{\def\fitr@setBL{0pt}%
+ \@ifundefined{ef@Bbox}{\let\fitr@FLB@ction\Bbox}%
+ {\let\fitr@FLB@ction\ef@Bbox}%
+ \get@fitr@dimen{%
+ \parbox[\fitr@@refPt][\fitr@@height]{\fitr@@width}%
+ {\kern0pt\fitr@FLB@ction{\fitr@@width}{\fitr@@height}\kern0pt}%
+ }%
+ \makebox[0pt][l]{\hspace*{\fitr@@shift}\smash{%
+ \raisebox{\fitr@@lift-\fitr@setBL}{%
+ \setThre@d{\artthrd@@addtow}{\artthrd@@addtoh}%
+ \unhbox\fitr@bbox
+ \fitr@urxury@fixup{\artthrd@@addtow}{\artthrd@@addtoh}{}%
+ }}}\setlength{\fboxsep}{0pt}%
+ \ifviewMagWin
+ \fitr@length=\artthrd@@addtow bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@width}%
+ \edef\fitr@@width{\the\fitr@length}%
+ \fitr@length=\artthrd@@addtoh bp
+ \fitr@length=2\fitr@length
+ \addtolength{\fitr@length}{\fitr@@height}%
+ \edef\fitr@@height{\the\fitr@length}%
+ \setlength\fitr@length{-\artthrd@@addtow bp}%
+ \addtolength\fitr@length{\fitr@@shift}%
+ \makebox[0pt][l]{\hspace*{\fitr@length}\smash{%
+ \setlength\fitr@length{\fitr@@lift-\fitr@setBL}%
+ \if\fitr@@refPt b%
+ \addtolength\fitr@length{-\artthrd@@addtoh bp}\else
+ \if\fitr@@refPt t%
+ \addtolength\fitr@length{\artthrd@@addtoh bp}%
+ \fi\fi
+ \raisebox{\fitr@length}%
+ {\fbox{\parbox[\fitr@@refPt][\fitr@@height]%
+ {\fitr@@width}{\kern0pt\hfill\vfill\kern0pt}}}}%
+ }%
+ \fi
+\endgroup}
+\if@fitr@dvipdfm
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@xetex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@xetex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@xetex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@pdftex@driver
+\def\ThrBbox#1#2{%
+ \fitr@length=#1bp
+ \fitr@length=2\fitr@length
+ \advance\fitr@length\wd\fitr@bbox
+ \edef\fitr@pdftex@view@width{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\ht\fitr@bbox
+ \edef\fitr@pdftex@view@height{\the\fitr@length}%
+ \fitr@length=#2bp
+ \advance\fitr@length\dp\fitr@bbox
+ \edef\fitr@pdftex@view@depth{\the\fitr@length}%
+}\else\ifx\fitr@driver\fitr@dvipsone@driver
+\def\ThrBbox#1#2{%
+ currentpoint 2 copy %
+ \the\fitr@depth\space add #2\space PDFtoTeX add % y1
+ exch #1\space PDFtoTeX sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space add #1\space PDFtoTeX add exch % x2
+ \the\fitr@height\space sub #2\space PDFtoTeX sub} % y2
+\else\ifx\fitr@driver\fitr@dvips@driver
+\def\ThrBbox#1#2{% Uses \fitr@bbox
+ currentpoint 2 copy %
+ \the\fitr@depth\space SPtoDvips add
+ #2\space BPToDvips add % y1
+ exch #1\space BPToDvips sub exch % x1
+ 4 2 roll exch
+ \the\fitr@width\space SPtoDvips add
+ #1\space BPToDvips add exch % x2
+ \the\fitr@height \space SPtoDvips sub
+ #2\space BPToDvips sub} % y2
+\fi\fi\fi\fi
+\def\setThre@d#1#2{%
+ \fitr@defaultbp{\aWd}{#1}\fitr@defaultbp{\aHt}{#2}%
+ \edef\tmp@exp{\noexpand\set@rtThrd{\aWd}{\aHt}}\tmp@exp
+}
+\if@fitr@dvipdfm
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \smash{\raisebox{-\fitr@xetex@view@height+#2bp}%
+ {\makebox[0pt][l]{\hspace*{-#1bp}%
+ \@pdfm@mark{thread @artthrd\CntArt\space
+ width \fitr@xetex@view@width\space
+ height \fitr@xetex@view@height\space
+ depth \fitr@xetex@view@depth\space
+ << /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi >>}}}}}\else\ifx\fitr@driver\fitr@pdftex@driver
+\def\set@rtThrd#1#2{\ThrBbox{#1}{#2}%
+ \makebox[0pt][l]{\hspace*{-#1bp}%
+ \pdfthread
+ width \fitr@pdftex@view@width\space
+ height \fitr@pdftex@view@height\space
+ depth \fitr@pdftex@view@depth\space
+ name {\threadTitle}}}\else
+\def\set@rtThrd#1#2{\literalps@out{\artM@rk
+ /Rect [\ThrBbox{\artthrd@@addtow}{\artthrd@@addtoh}]
+ /Title (\threadTitle)
+\ifnewarticle
+ /Author (\threadAuthor)
+ /Subject (\threadSubject)
+ /Keywords (\threadKeywords)
+\fi
+ /ARTICLE pdfmark}}
+\fi\fi
+\endinput
+%%
+%% End of file `artthreads.sty'.
diff --git a/texmf-dist/tex/latex/cntdwn/cntdwn.sty b/texmf-dist/tex/latex/cntdwn/cntdwn.sty
new file mode 100644
index 00000000..cd847ea6
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/cntdwn.sty
@@ -0,0 +1,84 @@
+%%
+%% This is file `cntdwn.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cntdwn.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{cntdwn}
+ [2014/11/26 v.6 countdown support (dps)]
+\RequirePackage{xkeyval}
+\def\cntdwn@defaultcode{\makeatletter
+ \InputIfFileExists{shrtcnt.def}{}\makeatother}
+\DeclareOptionX{shortcount}{%
+ \def\cntdwn@shrtcnt{\cntdwn@defaultcode}%
+}
+\let\cntdwn@shrtcnt\@empty
+\DeclareOptionX{longcount}{%
+ \def\cntdwn@lngcnt{\makeatletter
+ \InputIfFileExists{lngcnt.def}{}\makeatother}%
+}
+\let\cntdwn@lngcnt\@empty
+\ProcessOptionsX
+\ifx\cntdwn@shrtcnt\@empty
+ \ifx\cntdwn@lngcnt\@empty\AtEndOfPackage{\cntdwn@defaultcode}\else
+ \AtEndOfPackage{\cntdwn@lngcnt}\fi
+\else
+ \AtEndOfPackage{\cntdwn@defaultcode}
+ \ifx\cntdwn@lngcnt\@empty\else\AtEndOfPackage{\cntdwn@lngcnt}\fi
+\fi
+\@namedef{Time@timername}{Time}
+\def\cntdwn@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\cntdwn@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+\let\cntdwnlTimers\@empty
+\let\cntdwnaTimers\@empty
+\newcommand{\cntdwnYear}{year}
+\newcommand{\cntdwnYears}{years}
+\newcommand{\cntdwnDay}{day}
+\newcommand{\cntdwnDays}{days}
+\newcommand{\cntdwnHour}{hour}
+\newcommand{\cntdwnHours}{hours}
+\newcommand{\cntdwnMinute}{minute}
+\newcommand{\cntdwnMinutes}{minutes}
+\newcommand{\cntdwnSecond}{second}
+\newcommand{\cntdwnSeconds}{seconds}
+\begin{insDLJS*}[_timerObjsLoaded]{cntdwncom}
+\begin{newsegment}{CntDwn: DLJS for the cntdwn Package}
+/*
+ Document Level JavaScript for cntdwn
+ D. P. Story copyright 2010
+*/
+var _timerObjsLoaded=true;
+\end{newsegment}
+\begin{newsegment}{CntDwn: Timer Objects}
+var _oTime = new Object;
+ _oTime.second=1000;
+ _oTime.minute=60*_oTime.second;
+ _oTime.hour=60*_oTime.minute;
+ _oTime.day=24*_oTime.hour;
+ _oTime.year = 365*_oTime.day;
+\cntdwnlTimers
+var aTimers = new Array();
+\cntdwnaTimers
+\end{newsegment}
+\end{insDLJS*}
+\begingroup
+\catcode`\_12
+\gdef\CDO{_o}
+\endgroup
+\endinput
+%%
+%% End of file `cntdwn.sty'.
diff --git a/texmf-dist/tex/latex/cntdwn/lngcnt.def b/texmf-dist/tex/latex/cntdwn/lngcnt.def
new file mode 100644
index 00000000..e5ed8ac1
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/lngcnt.def
@@ -0,0 +1,518 @@
+%%
+%% This is file `lngcnt.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cntdwn.dtx (with options: `copyright,lngcnt')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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{\lcntdwnDisplay}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.bAutorunEnabled && \CDO#2.timeout==null) lStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) lcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.lcntdwn.timeToFromEvent}{#3}{#4}}
+\newcommand{\lcntdwnToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{lcntdwnToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+\newcommand{\setLongCntDwn}[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'.}}%
+ \setkeys{lcntdwn}{date,endmsg,#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+ \ifx\lcntdwn@date\@empty\def\lcntdwn@date{1970/01/01}%
+ \PackageWarning{cntdwn}{!!Beware!!
+ The `date' key was not supplied,\MessageBreak
+ using the default date 1970/01/01}\fi
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ pdfdate:"D:\lcntdwn@date\lcntdwn@time\lcntdwn@tz",\r\t
+ target: null,\r\t
+ refreshrate: 1000,\r\t
+ notify1: \lcntdwn@notifyi,\r\t
+ notify2: \lcntdwn@notifyii,\r\t
+ notify3: \lcntdwn@notifyiii,\r\t
+ notify5: \lcntdwn@notifyv,\r\t
+ notify6: \lcntdwn@notifyvi,\r\t
+ notify7: \lcntdwn@notifyvii,\r\t
+ eventhandler: "\lcntdwn@eventhandler",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\r\t
+ displayfunc: "\lcntdwn@displayfunc",\r\t
+ endtimecolor: \cntdwn@endtimecolor,\r\t
+ weStopOnEnd: \lcntdwn@ifstop,\r\t
+ endMsg: "\lcntdwn@endmsg",\r\t
+ bAutorunEnabled:\lcntdwn@autorunenabled,\r\t
+ bNotify1:false,\r\t
+ bNotify2:false,\r\t
+ bNotify3:false,\r\t
+ bNotify4:false,\r\t
+ bNotify5:false,\r\t
+ bNotify6:false,\r\t
+ bNotify7:false,\r\t
+ lastSignDelta:1,\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\@lcntdwn@parse@YYYY#1#2#3#4{%
+ {\count0=#1\relax\count0=#2\relax
+ \count0=#3\relax\count0=#4\relax}%
+ \def\lcntdwn@date{#1#2#3#4}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@MM\@gobble}%
+ {\def\lcntdwn@date{#1#2#3#4}}}%
+}
+\def\@lcntdwn@parse@MM#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar/{\expandafter\@lcntdwn@parse@DD\@gobble}%
+ {\edef\lcntdwn@date{\lcntdwn@date#1#2}}}%
+}
+\def\@lcntdwn@parse@DD#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@date{\lcntdwn@date#1#2}%
+ \@gobbletonil
+}
+\def\@lcntdwn@parse@HH#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \def\lcntdwn@time{#1#2}
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@mm\@gobble}%
+ {\def\lcntdwn@time{#1#2}}}%
+}
+\def\@lcntdwn@parse@mm#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@ifnextchar\@nil{\@gobbletonil}%
+ {\@ifnextchar:{\expandafter\@lcntdwn@parse@SS\@gobble}%
+ {\edef\lcntdwn@time{\lcntdwn@time#1#2}}}%
+}
+\def\@lcntdwn@parse@SS#1#2{%
+ {\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@time{\lcntdwn@time#1#2}%
+ \@gobbletonil
+}
+\def\tz@Z{Z}\def\tz@p{+}\def\tz@m{-}
+\def\lcntdwn@parse@tz{\@ifnextchar\@nil
+ {\let\lcntdwn@tz\@empty}{\@lcntdwn@parse@tz}%
+}
+\def\@lcntdwn@parse@tz#1{%
+ \def\argi{#1}\ifx\argi\tz@Z
+ \def\lcntdwn@tz{Z}\def\@next{\@gobbletonil}%
+ \else\ifx\argi\tz@p\def\lcntdwn@tz{+}%
+ \def\@next{\tz@gethrs}\else
+ \ifx\argi\tz@m\def\lcntdwn@tz{-}%
+ \def\@next{\tz@gethrs}\else
+ \let\lcntdwn@tz\@empty\def\@next{\@gobbletonil}%
+ \fi\fi\fi\@next
+}
+\def\@gobbletonil#1\@nil{}
+\def\tz@gethrs#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}%
+ \@ifnextchar\@nil{\@gobbletonil}{\tz@getmnts}}
+\def\tz@getmnts#1#2{{\count0=#1\relax\count0=#2\relax}%
+ \edef\lcntdwn@tz{\lcntdwn@tz#1#2'}\@gobbletonil}
+\define@key{lcntdwn}{date}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \def\lcntdwn@date{}\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@YYYY\argi\@nil}\fi
+ \@next
+}
+\define@key{lcntdwn}{time}[]{%
+ \edef\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@time\@empty\let\@next\relax\else
+ \def\@next{\expandafter\@lcntdwn@parse@HH\argi\@nil}\fi
+ \@next
+}
+\define@key{lcntdwn}{tzoffset}[]{%
+ \def\argi{#1}\ifx\argi\@empty
+ \let\lcntdwn@tz\@empty\let\@next\relax\else
+ \def\@next{\lcntdwn@parse@tz#1\@nil}\fi
+ \@next
+}
+\define@boolkey{lcntdwn}{autorun}[true]{%
+ \edef\lctndwn@autorun{\ifKV@lcntdwn@autorun1\else0\fi}}
+\define@boolkey{lcntdwn}{autopause}[true]{%
+ \edef\lctndwn@autopause{\ifKV@lcntdwn@autopause1\else0\fi}}
+\define@boolkey{lcntdwn}{autorunenabled}[true]{%
+ \edef\lcntdwn@autorunenabled{\ifKV@lcntdwn@autorunenabled
+ true\else false\fi}}
+\define@key{lcntdwn}{notify1}[null]{\def\lcntdwn@notifyi{#1}}
+\define@key{lcntdwn}{notify2}[null]{\def\lcntdwn@notifyii{#1}}
+\define@key{lcntdwn}{notify3}[null]{\def\lcntdwn@notifyiii{#1}}
+\define@key{lcntdwn}{notify5}[null]{\def\lcntdwn@notifyv{#1}}
+\define@key{lcntdwn}{notify6}[null]{\def\lcntdwn@notifyvi{#1}}
+\define@key{lcntdwn}{notify7}[null]{\def\lcntdwn@notifyvii{#1}}
+\define@key{lcntdwn}{eventhandler}[_NoOpt]{%
+ \def\lcntdwn@eventhandler{#1}}
+\define@key{lcntdwn}{refreshrate}[1000]{\def\lcntdwn@refreshrate{#1}}
+\define@key{lcntdwn}{currtimefunc}[_defaultTimeDateFunc]{%
+ \def\lcntdwn@timedateFunc{#1}}
+\define@key{lcntdwn}{displayfunc}[_defaultLDisplayFunc]{%
+ \def\lcntdwn@displayfunc{#1}}
+\define@key{lcntdwn}{endtimecolor}[color.red]{%
+ \def\cntdwn@endtimecolor{#1}}
+\define@choicekey{lcntdwn}{onfinish}[\val\nr]{stop,continue}[stop]{%
+ \ifcase\nr\relax\def\lcntdwn@ifstop{true}\or
+ \def\lcntdwn@ifstop{false}\fi}
+\newcommand{\lcnddwnDefaultEndMsg}{The time has expired}
+\define@key{lcntdwn}{endmsg}[\lcnddwnDefaultEndMsg]{%
+ \def\lcntdwn@endmsg{#1}}
+\setkeys{lcntdwn}{time,tzoffset,refreshrate,autorun,autopause,%
+ autorunenabled,notify1,notify2,notify3,notify5,notify6,notify7,%
+ eventhandler,endtimecolor,displayfunc,currtimefunc,%
+ onfinish=continue,endmsg}
+\newcommand{\setClockTimer}[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'.}}%
+ \setkeys{lcntdwn}{#2}%
+ \def\seconds{_oTime.second}\def\minutes{_oTime.minute}%
+ \def\hours{_oTime.hour}\def\days{_oTime.day}%
+ \def\weeks{7*_oTime.day}\def\years{_oTime.year}%
+ \cntdwn@namexdef{#1@autorun}{\lctndwn@autorun}%
+ \cntdwn@namexdef{#1@autopause}{\lctndwn@autopause}%
+ \def\r{^^J}\def\t{\space\space\space\space}%
+ \cntdwn@namexdef{#1TimerObject}{%
+ var _o#1 = {\r\t
+ name: "_o#1",\r\t
+ tzoffset:"\lcntdwn@tz",\r\t
+ refreshrate: \lcntdwn@refreshrate,\r\t
+ timedateFunc: "\lcntdwn@timedateFunc",\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}
+\newcommand{\cntdwnclocktime}[4][]{%
+ \let\autorun@presets\@empty
+ \expandafter\ifnum\csname#2@autorun\endcsname=1\relax
+ \edef\autorun@presets{%
+ \AAPageOpen{if (\CDO#2.timeout==null) clStartTimer(\CDO#2);}}\fi
+ \expandafter\ifnum\csname#2@autopause\endcsname=1\relax
+ \edef\autorun@presets{\autorun@presets
+ \AAPageClose{if (\CDO#2.timeout!=null) clcntdwnPause(\CDO#2);}}\fi
+ \edef\autorun@presets{\noexpand\AA{\autorun@presets}}%
+ \textField[\Ff\FfReadOnly\Q{1}\textSize{0}#1
+ \presets{\autorun@presets}]%
+ {\CDO#2.clock.time}{#3}{#4}}
+\newcommand{\cntdwnclockdate}[4][]{\textField[%
+ \Ff\FfReadOnly\Q{1}\textSize{0}#1]{\CDO#2.clock.date}{#3}{#4}}
+\newcommand{\clockToggle}[4][]{%
+ \pushButton[\TU{Toggle Countdown}\A{\JS{clockToggle(\CDO#2);}}#1
+ ]{\CDO#2.lcntdwn.Toggle}{#3}{#4}}
+\begin{insDLJS*}[lngcntdwn]{lngcntdwn}
+\begin{newsegment}{CntDwn: Convert Time Function}
+/*
+ This function converts the PDF Date Format to a JavaScript
+ Date object. The PDF Date Format is specified in section
+ 3.8.3 in the PDF Reference.
+*/
+function pdfDate2oDate( pdfDate ) {
+ // if present, remove the "D:" in format
+ if ( pdfDate.indexOf("D:") != -1 )
+ pdfDate = pdfDate.substring(2);
+ // now see if the O component is there
+ var re = /[\+\-Z]/;
+ var nIndex = pdfDate.search(re);
+ // separate the time date info from the time zone offset info
+ if ( nIndex != -1 ) {
+ var cTimeZone = pdfDate.substring(nIndex);
+ pdfDate = pdfDate.substring(0, nIndex);
+ } else cTimeZone = "";
+ // seg is an array of arrays. The first element is the field width,
+ // the second entry is the default value.
+ var seg = [[4,1970],[2,1],[2,1],[2,0],[2,0],[2,0]];
+ // an array to hold time arguments for the date constructor.
+ var args = new Array();
+ // as we determine the values of the PDF Date Format, push them onto
+ // the args array, if not present, push the default value on.
+ for ( var i=0; i < seg.length; i++) {
+ if ( pdfDate.length > 0 ) {
+ args.push(Number( pdfDate.substring(0, seg[i][0]) ) );
+ pdfDate = pdfDate.substring( seg[i][0] );
+ } else args.push( seg[i][1] );
+ }
+ // adjust month to base zero
+ args[1] = args[1] - 1;
+ // see if there is time zone info
+ var pm = "";
+ if ( cTimeZone.length > 0 ) {
+ pm = cTimeZone.charAt(0);
+ var zoneOffsetHr=Number(cTimeZone.substring(1,3));
+ cTimeZone=cTimeZone.substring(3);
+ var zoneOffsetMin=0;
+ if ( cTimeZone.length > 0 && cTimeZone.charAt(0) == "'" )
+ var zoneOffsetMin = Number( cTimeZone.substring(1,3) );
+ var totalOffset=zoneOffsetHr*60+zoneOffsetMin;
+ totalOffset*= 60000;
+ totalOffset=( pm == "-" )?-1*totalOffset:totalOffset;
+ var msTime=Date.UTC.apply(global,args);
+ msTime = msTime - totalOffset;
+ var d = new Date( msTime );
+ } else {
+ var dateArgs = args.toSource().replace(/[\[\]]/g,"");
+ var d = eval("new Date(" + dateArgs + ")" );
+ }
+ return d
+}
+\end{newsegment}
+\begin{newsegment}{CntDwn: Long Countdown JavaScript}
+function lngcntdwn(cTimer){
+ var _delta,nYears,pYears,nDays,pDays,nHours,pHours,nMinutes,
+ pMinutes,nSeconds,pSeconds,f,thisSignDelta,msYear;
+ var oTimer=aTimers[cTimer];
+ var Clock=new Date();
+ this.delay=true;
+ _delta=oTimer.target-Clock;
+ var o=lCalcYears(oTimer,Clock,_delta);
+ nYears=o.nYears;
+ pYears=o.pYears;
+ _delta=o.delta;
+ nDays=Math.floor(pYears/_oTime.day);
+ pDays=pYears\%_oTime.day;
+ nHours=Math.floor(pDays/_oTime.hour);
+ pHours=pDays\%_oTime.hour;
+ nMinutes=Math.floor(pHours/_oTime.minute);
+ pMinutes=pHours\%_oTime.minute;
+ nSeconds=Math.round(pMinutes/_oTime.second);
+ pSeconds=pMinutes\%_oTime.second;
+ f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ thisSignDelta=(_delta<0)?-1:1;
+ if (thisSignDelta*oTimer.lastSignDelta<0&&!oTimer.bNotify4) {
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ oTimer.bNotify4=true;
+ oTimer.lastSignDelta=thisSignDelta;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ if (oTimer.weStopOnEnd) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+ if (f!=null) f.value=oTimer.endMsg;
+ return;
+ }
+ }
+ if (!oTimer.bNotify4&&_delta>0){ // event in future
+ if (!oTimer.bNotify1&&oTimer.notify1!=null%
+&&_delta<oTimer.notify1) {
+ oTimer.bNotify1=true;
+ eval(oTimer.eventhandler)(this,cTimer,1);
+ } else {
+ if (!oTimer.bNotify2&&oTimer.notify2!=null%
+&&_delta<oTimer.notify2) {
+ oTimer.bNotify2=true;
+ skipCheckB=true;
+ eval(oTimer.eventhandler)(this,cTimer,2);
+ } else {
+ if (!oTimer.bNotify3&&oTimer.notify3!=null%
+&&_delta<oTimer.notify3) {
+ oTimer.bNotify3=true;
+ eval(oTimer.eventhandler)(this,cTimer,3);
+ }
+ }
+ }
+ }
+ if (oTimer.bNotify4&&_delta<0){// event in past
+ var neg_delta=-1*_delta;
+ if (!oTimer.bNotify5&&oTimer.notify5!=null&&%
+neg_delta>oTimer.notify5) {
+ oTimer.bNotify5=true;
+ eval(oTimer.eventhandler)(this,cTimer,5);
+ } else {
+ if (!oTimer.bNotify6&&oTimer.notify6!=null&&%
+neg_delta>oTimer.notify6) {
+ oTimer.bNotify6=true;
+ eval(oTimer.eventhandler)(this,cTimer,6);
+ } else {
+ if (!oTimer.bNotify7&&oTimer.notify7!=null&&%
+neg_delta>oTimer.notify7) {
+ oTimer.bNotify7=true;
+ eval(oTimer.eventhandler)(this,cTimer,7);
+ }
+ }
+ }
+ }
+ eval(oTimer.displayfunc)(f,nYears,nDays,nHours,nMinutes,nSeconds);
+ this.delay=false;
+ this.dirty=false;
+}
+function _defaultTimeDateFunc(oTime,cTimer) {
+ try{ this.getField(cTimer+".clock.time").value%
+=util.printd("H:MM:ss",oTime); } catch(e) {};
+ try { this.getField(cTimer+".clock.date").value=%
+util.printd("mm/dd/yyyy", oTime); } catch(e) {};
+}
+function _defaultLDisplayFunc(f,nYears,nDays,nHours,nMinutes,nSeconds) {
+ var strYears=(nYears==0)?""%
+:(""+nYears+((nYears == 1)?" \cntdwnYear, ":" \cntdwnYears, "));
+ var strDays=(nDays== 0)?""%
+:(""+nDays+((nDays==1)?" \cntdwnDay, ":" \cntdwnDays, "));
+ var strHours=(nHours==0)?""%
+:(""+nHours+((nHours==1)?" \cntdwnHour, ":" \cntdwnHours, "));
+ var strMinutes=(nMinutes==0)?""%
+:(""+nMinutes+((nMinutes==1)?" \cntdwnMinute, ":" \cntdwnMinutes, "));
+ var strSeconds=""+nSeconds+((nSeconds<2)?" \cntdwnSecond "%
+:" \cntdwnSeconds ");
+ var cCntDwnDisplay=strYears+strDays+strHours+strMinutes+strSeconds;
+ try { f.value=cCntDwnDisplay; } catch(e) {}
+}
+function lCalcYears(oTimer,Clock,_delta) {
+ var nYears,lengthOfYears,targetpdfdate,targetYear,thisYear,
+ otherYear,currAnnivDate,otherAnnivDate,tCurrAnnivDate,
+ tOtherAnnivDate,msYear=0;
+ targetpdfdate=oTimer.pdfdate;
+ targetYear=Number(targetpdfdate.substring(2,6));
+ thisYear=Clock.getFullYear();
+ otherYear=(_delta<0)?thisYear-1:thisYear+1;
+ currAnnivDate=targetpdfdate.substring(0,2)%
++thisYear+targetpdfdate.substring(6);
+ otherAnnivDate=targetpdfdate.substring(0,2)%
++otherYear+targetpdfdate.substring(6);
+ tCurrAnnivDate=pdfDate2oDate( currAnnivDate );
+ tOtherAnnivDate=pdfDate2oDate( otherAnnivDate );
+ if (_delta<0) {
+ if ( Clock < tCurrAnnivDate ){
+ nYears=otherYear-targetYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+ } else {
+ nYears=thisYear-targetYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ } else {// _delta>=0
+ if ( Clock > tCurrAnnivDate ) {
+ nYears=targetYear-otherYear;
+ lengthOfYears=oTimer.target-tOtherAnnivDate;
+ } else {
+ nYears=targetYear-thisYear;
+ lengthOfYears=oTimer.target-tCurrAnnivDate;
+ }
+ }
+ _delta-=lengthOfYears;
+ pYears=Math.abs(_delta);
+ return {
+ nYears:nYears,
+ pYears:pYears,
+ delta:_delta
+ };
+}
+function lStartTimer(oTimer) {
+ var cTimer=oTimer.name;
+ oTimer.target=pdfDate2oDate(oTimer.pdfdate).getTime();
+ var bWasNotified=oTimer.bNotify4;
+ var _delta=oTimer.target-new Date();
+ oTimer.lastSignDelta=(_delta<0)?-1:1;
+ if ( _delta > 0 ) {
+ oTimer.bNotify1=(_delta<oTimer.notify1);
+ oTimer.bNotify2=(_delta<oTimer.notify2);
+ oTimer.bNotify3=(_delta<oTimer.notify3);
+ } else {
+ oTimer.bNotify4=true;
+ oTimer.bNotify5=(-1*_delta>oTimer.notify5);
+ oTimer.bNotify6=(-1*_delta>oTimer.notify6);
+ oTimer.bNotify7=(-1*_delta>oTimer.notify7);
+ }
+ if (!bWasNotified&&oTimer.bNotify4) {
+ var f=this.getField(cTimer+".lcntdwn.timeToFromEvent");
+ if (f!=null) f.textColor=oTimer.endtimecolor;
+ eval(oTimer.eventhandler)(this,cTimer,4);
+ }
+ if (_delta<0&&oTimer.weStopOnEnd) {
+ f.value=oTimer.endMsg;
+ return;
+ }
+ oTimer.timeout=app.setInterval(%
+"lngcntdwn(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function lcntdwnPause(oTimer) {
+ try { app.clearInterval(oTimer.timeout);
+ oTimer.timeout=null; } catch(e){};
+}
+function lcntdwnToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ lStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+function _NoOpt(doc,cTimer,nEvent){}
+function lngClockHandler(cTimer) {
+ var oTimer=aTimers[cTimer];
+ var Clock = new Date();
+ if ( oTimer.tzoffset != "" ) {
+ var localTime = Clock.getTime();
+ var localOffset = Clock.getTimezoneOffset()*60000;
+ // obtain UTC time in msec
+ var utc = localTime + localOffset;
+ var tzoffset=(oTimer.tzoffset=="Z")?0:oTimer.tzoffset;
+ var nonlocal=utc+oTimer.tzoffset;
+ Clock = new Date(nonlocal);
+ }
+ this.delay=true;
+ eval(oTimer.timedateFunc)(Clock,cTimer);
+ this.dirty=false;
+ this.delay=false;
+}
+function clStartTimer(oTimer) {
+ var tzoffset=oTimer.tzoffset;
+ if ( tzoffset !="" && tzoffset !="Z" ) {
+ var sign=tzoffset.charAt(0);
+ offset=tzoffset.substring(1);
+ var a=tzoffset.split("'");
+ var hrs=Number(a[0]);
+ var mins=Number(a[1]);
+ tzoffset=hrs*3600000+mins*60000;
+ tzoffset=((sign=="+")?1:-1)*tzoffset;
+ oTimer.tzoffset=tzoffset;
+ }
+ var cTimer=oTimer.name;
+ oTimer.timeout=app.setInterval(%
+"lngClockHandler(\""+cTimer+"\")",oTimer.refreshrate);
+}
+function clockToggle(oTimer) {
+ if (oTimer.timeout==null) // stopped or paused
+ clStartTimer(oTimer);
+ else
+ lcntdwnPause(oTimer);
+}
+\end{newsegment}
+\end{insDLJS*}
+\endinput
+%%
+%% End of file `lngcnt.def'.
diff --git a/texmf-dist/tex/latex/cntdwn/shrtcnt.def b/texmf-dist/tex/latex/cntdwn/shrtcnt.def
new file mode 100644
index 00000000..babca943
--- /dev/null
+++ b/texmf-dist/tex/latex/cntdwn/shrtcnt.def
@@ -0,0 +1,271 @@
+%%
+%% 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&&!\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<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>=1)?((nHours<10)?"0":"")+nHours+":":"")
+ +((nMinutes<10)?"0":"")+nMinutes
+ +":"+((nSeconds<10)?"0":"")+nSeconds;
+ try { this.getField(oTimer.name%
++".cntdwn.TimeRemaining").value= timeValue; }
+ catch(e) {};
+ isEndReached=(oTimer.isStopwatch)?oTimer.timeleft>oTimer.length%
+:oTimer.timeleft< 0;
+ if ( isEndReached && !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&&(_delta>oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta>oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta>oTimer.notify3))
+ {oTimer.bNotify3=true;eval(oTimer.event3)(this,cTimer);}
+ } else {
+ if (!oTimer.bNotify1&&(_delta<oTimer.notify1))
+ {oTimer.bNotify1=true;eval(oTimer.event1)(this,cTimer);}
+ if (!oTimer.bNotify2&&(_delta<oTimer.notify2))
+ {oTimer.bNotify2=true;eval(oTimer.event2)(this,cTimer);}
+ if (!oTimer.bNotify3&&(_delta<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&&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'.
diff --git a/texmf-dist/tex/latex/ecards/ecards.sty b/texmf-dist/tex/latex/ecards/ecards.sty
new file mode 100644
index 00000000..fc0b39b7
--- /dev/null
+++ b/texmf-dist/tex/latex/ecards/ecards.sty
@@ -0,0 +1,560 @@
+%%
+%% This is file `ecards.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ecards.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ecards.sty package, %%
+%% Copyright (C) 1999-2016 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{ecards}
+ [2016/09/03 v2.0e eCards: An electronic flash cards package (dps)]
+\let\ec@YES=y \let\ec@NO=n
+\DeclareOption{memLogo}{\let\@memLogo\ec@YES}
+\let\@memLogo\ec@NO
+\DeclareOption{listing}{\ecListingtrue}
+\newif\ifecListing \ecListingfalse
+\DeclareOption{custom}{\let\@ecCustom\ec@YES}
+\let\@ecCustom\ec@NO
+\DeclareOption{nohints}{\def\opts@ecNoHints{nohint}%
+\def\defaultecNoHints{\useNoHints}\defaultecNoHints}
+\newif\ifisQues \isQuesfalse
+\def\useNoHints{\ifecListing\else\newpage\fi\ecUseNoHints}
+\def\ecUseNoHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{nohint}%
+ \global\let\@ecNoHints\ec@YES
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{ex.\exnoCard}%
+}
+\def\useHints{\ifecListing\else\newpage\fi\ecUseHints}
+\def\ecUseHints{\ifisQues
+ \expandafter\def\else\expandafter\gdef\fi\opts@ecNoHints{hint}%
+ \global\let\@ecNoHints\ec@NO
+ \gdef\hintDest{ex\exnoCard}\gdef\solnDest{ex\exnoCard.s}%
+ \gdef\hintDestJS{ex.\exnoCard}\gdef\quesDestJS{qex.\exnoCard}%
+}
+\def\opts@ecNoHints{hint}
+\def\defaultecNoHints{\useHints}
+\defaultecNoHints
+\DeclareOption{notrandomized}{\def\israndomized{false}
+ \def\cbInitState{Off}}
+\def\israndomized{true}
+\def\cbInitState{randomOrder}
+\ProcessOptions
+\RequirePackage{web}
+\RequirePackage{exerquiz}[2016/04/18]
+\newcommand{\cardsFinishedMsg}[1]{\def\CARDSFINISHED{#1}}
+\cardsFinishedMsg{You've seen all the cards!}
+\textBgColor{cornsilk}
+\def\cardColor#1{\def\@cardColor{#1}}
+\def\hintColor#1{\def\@hintColor{#1}}
+\def\solnColor#1{\def\@solnColor{#1}}
+\cardColor{vlightblue}
+\hintColor{cornsilk}
+\solnColor{webyellow}
+\let\exnoCard\the@exno
+\let\web@rightheader\@empty
+\def\io#1{\immediate\write\@auxout{#1}}
+\def\endsolnexerhookaux{%
+ \ifnum\@panelconfig=0\relax
+ \immediate\write\verbatim@out
+ {\string\insNaviBar*{\hfil\string\NextCard\string\ %
+ \string\PrevCard\string\ \string\ToggleOrder\hfil}}%
+ \fi
+}
+\def\include@solutions{%
+ \let\webnewpage\relax
+ \immediate\closeout\ex@solns
+ \ifeq@nosolutions\else
+ \iftherearesolutions\newpage\markright{\exsecrunhead}%
+ \ifx\webnewpage\relax
+ \def\webnewpage{\let\webnewpage\newpage}%
+ \fi
+ \eqsolutionshook
+ \addcontentsline{toc}{section}
+ {\protect\numberline{}\exsectitle}%
+ \input{\jobname.sol}%
+ \fi
+ \fi
+}
+\AtEndDocument{\io{\string\gdef\string\totalCards{\exnoCard}}\clearpage}
+\def\theNumCards{\csname totalCards\endcsname}
+\let\ec@Zero=0 \let\ec@One=1 \let\ec@Two=2
+\def\ec@Ques{0}\def\ec@Hint{1}\def\ec@Soln{2}
+\def\nMarkerSet#1{\gdef\nMarker{#1}}
+\nMarkerSet\ec@Ques
+\def\ReturnTo#1#2{\eq@fititin#2}
+\renewcommand\exsecrunhead{}
+\renewcommand\exlabel{}
+\renewcommand\exsectitle{}
+\newcommand{\leadAnsFmtForPaper}{\textbf{Ans:\thinspace[}}
+\newcommand{\trailAnsFmtForPaper}{\textbf{]}}
+\def\math@correctAnswer{\unskip\ifeqforpaper\leadAnsFmtForPaper\fi
+ {\ttfamily\color{\@proofingsymbolColor}\spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleMacro\meaning\eqCorrectAns}%
+ \ifeqforpaper\trailAnsFmtForPaper\fi
+}
+\def\txt@correctAnswer{\unskip\ifeqforpaper\textbf{Ans:\thinspace[}\fi
+ {\ttfamily\color{\@proofingsymbolColor}%
+ \spaceskip=2pt\xspaceskip=2pt
+ \expandafter\gobbleTxt\meaning\rbTxtAlt}\ifeqforpaper\textbf{]}\fi
+}
+\newenvironment{multiChoice}[1]{\par
+ \if\nMarker\ec@Ques
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\hintDestJS");}%
+ \fi
+ \vskip-\baselineskip % dps
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest
+ \ifisHint.h\fi\else\solnDest\fi}%
+ \begin{answers}[\solnDest]{#1}%
+}{%
+ \end{answers}
+ \end{oQuestion}
+}
+\ifecListing
+ \ifeq@proofing
+ \everyRespBoxTxt{\Ff\FfReadOnly\BG{}\BC{}}
+ \everyRespBoxMath{\Ff\FfReadOnly\BG{}\BC{}}\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}\fi
+\else
+ \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}}
+\fi
+\newenvironment{fillIn}{%
+ \def\RespBoxTxtOnBlur{ecOnBlurRespBox(retn, \exnoCard, \nMarker);}%
+ \begin{oQuestion}{\if\nMarker\ec@Ques\hintDest\else\solnDest\fi}%
+}{\end{oQuestion}}
+\def\ec@isHint{hint}
+\def\ec@isNoHint{nohint}
+\def\ec@HintsWarning{\PackageWarning{ecards}
+ {The use of \string\useHints\space and \string\useNoHints
+ \MessageBreak is prohibited, ignoring this use}}
+\def\ec@BadArgWarning{\PackageWarning{ecards}
+ {The argument `\ec@rgi' is not an acceptable option.\MessageBreak
+ Will use `hint' instead}}
+\def\ecInfoToSolns{\string\def\string\exnoCard{\exnoCard}%
+ \string\def\string\solndest{\solnDest}%
+ \expandafter\string\ec@thisHintOpt
+ \string\nMarkerSet{\ec@Hint}\string\defineSoln}
+\newenvironment{card}[1][\opts@ecNoHints]{\newpage\isQuestrue
+ \let\useHints\ec@HintsWarning\let\useNoHints\ec@HintsWarning
+ \edef\ec@rgi{#1}\ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+ \def\ec@thisHintOpt{\ecUseHints}%
+ \ec@BadArgWarning
+ \fi
+ \fi
+ \xdef\ecLoc@lSt@te{\ec@rgi}%
+ \ec@thisHintOpt\nMarkerSet\ec@Ques
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+ \ifnum\@panelconfig=0\relax\aftergroup\cardNaviBar\fi
+}
+\def\ecAfterQuesSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterQuesSkip{\the\@tempdima}}}
+\ecAfterQuesSkip{.25in}
+\def\ecQuesWidth#1{\def\ec@QuesWidth{#1}}
+\ecQuesWidth{.85\linewidth}
+\def\ecSetQuesWidth{\setlength{\@tempdima}{\ec@QuesWidth}%
+ \edef\ec@QuesWidth{\the\@tempdima}}
+\newcommand{\ecQUESTION}{\textbf{QUESTION}}
+\newcommand{\headCard}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetQuesWidth
+ \Large\ecQUESTION\par\vspace*{\ec@fterQuesSkip}%
+ \begin{minipage}{\ec@QuesWidth}%
+ \large\noindent\ignorespaces
+}
+\newcommand{\tailCard}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+\newenvironment{response}{\solnexer@woparts[]} %dps
+ {\endsolnexer@woparts}
+\newif\ifisHint \isHintfalse
+\newenvironment{hint}{%
+ \isHinttrue
+ \if\@ecNoHints\ec@YES\textBgColor{\@hintColor}\headHint
+ \centering\noHintProvided\tailHint\expandafter\ec@comment@hint
+ \else\expandafter\ec@hint\fi}{%
+ \if\@ecNoHints\ec@YES\expandafter\endec@comment@hint
+ \else\expandafter\endec@hint\fi}
+\newcommand{\noHintProvided}{No hint provided for this question.}
+\newenvironment{ec@comment@hint}{\comment}{%
+ \endcomment
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+\newenvironment{ec@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{%
+ \tailHint
+ \ifnum\@panelconfig=0\relax
+ \insNaviBar{\hfill\hintSoln\ \hintNextCard\ %
+ \PrevCard\ \ToggleOrder\hfill}\fi
+ \newpage\nMarkerSet{\ec@Soln}\noindent\hypertarget{\solndest}{}%
+}
+\def\ecAfterHintSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterHintSkip{\the\@tempdima}}}
+\ecAfterHintSkip{.25in}
+\def\ecHintWidth#1{\def\ec@HintWidth{#1}}
+\ecHintWidth{.85\linewidth}
+\def\ecSetHintWidth{\setlength{\@tempdima}{\ec@HintWidth}%
+ \edef\ec@HintWidth{\the\@tempdima}}
+\newcommand{\ecHINT}{\textbf{HINT}}
+\newcommand{\headHint}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetHintWidth
+ \Large\ecHINT\par\vspace*{\ec@fterHintSkip}%
+ \begin{minipage}{\ec@HintWidth}%
+ \large\noindent\ignorespaces
+}
+\newcommand{\tailHint}{%
+ \end{minipage}
+ \end{center}
+ \par\vspace{\stretch{2}}%
+}
+\newenvironment{answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+\def\ecAfterAnsSkip#1{{\setlength{\@tempdima}{#1}%
+ \xdef\ec@fterAnsSkip{\the\@tempdima}}}
+\ecAfterAnsSkip{.25in}
+\def\ecAnsWidth#1{\def\ec@AnsWidth{#1}}
+\ecAnsWidth{.85\linewidth}
+\def\ecSetAnsWidth{\setlength{\@tempdima}{\ec@AnsWidth}%
+ \edef\ec@AnsWidth{\the\@tempdima}}
+\newcommand{\ecANS}{\textbf{ANSWER}}
+\newcommand{\headAnswer}{%
+ \vspace*{\stretch{.1}}%
+ \begin{center}\ecSetAnsWidth
+ \Large\ecANS\par\vspace*{\ec@fterAnsSkip}%
+ \begin{minipage}[t]{\ec@AnsWidth}%
+ \large\noindent\ignorespaces}
+\newcommand{\tailAnswer}{%
+ \end{minipage}
+ \end{center}
+ \vspace*{\stretch{2}}
+}
+\newcommand\iconWidth{40pt}\newcommand\iconHeight{15pt}
+\def\ecHomePage{\hyper@normalise\ec@HomePage}
+\def\ec@HomePage#1{\def\@ecHomePage{#1}}
+\ecHomePage{http://www.math.uakron.edu/~dpstory/acrotex.html}
+\def\ecLogo#1{\def\@ecLogo{#1}}
+\ecLogo{\includegraphics[scale=.4]{graphics/uakron}}
+\def\ecLogoLink{\hyper@normalise\ec@LogoLink}
+\def\ec@LogoLink#1{\def\@ecLogoLink{#1}}
+\let\@ecLogoLink\@empty
+\newcommand{\randomizedMsg}{The cards will be delivered
+ to you in random order.}
+\newcommand{\nonrandomizedMsg}{The cards will be delivered
+ to you in their natural order.}
+\newcommand{\toggleRandomizeTU}{%
+ Click to toggle between random and natural order.}
+\def\makeesc#1{\catcode`#1=0\relax}
+\begin{defineJS}{\fsJS}
+if (app.viewerVersion < 5.0)
+ app.fullscreen = !app.fullscreen
+else {
+ app.fs.cursor = cursor.visible;
+ app.fs.defaultTransition = "";
+ app.fs.useTimer = false;
+ app.fs.isFullScreen = !app.fs.isFullScreen;
+}
+\end{defineJS}
+\newcommand\noHintJSAction{}
+\def\NaviIconActionJS#1{\ifecListing
+ \if\nMarker\ec@Ques\else
+ this.gotoNamedDest("\quesDestJS");\fi
+ \else
+ #1;
+ \fi
+}
+\def\ec@defineLabel#1#2#3{\def#1{#2 #3}}
+\newcommand{\ecSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@SolnLabel{#1}{#2}}
+\ecSolnLabel{Soln}
+\newcommand{\ecHintLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintLabel{#1}{#2}}
+\ecHintLabel{Hint}
+\newcommand{\ecNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@NextLabel{#1}{#2}}
+\ecNextLabel{Next}
+\newcommand{\ecPrevLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@PrevLabel{#1}{#2}}
+\ecPrevLabel{Prev}
+\newcommand{\ecHintNextLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintNextLabel{#1}{#2}}
+\ecHintNextLabel{Next}
+\newcommand{\ecHintSolnLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HintSolnLabel{#1}{#2}}
+\ecHintSolnLabel{Soln}
+\newcommand{\ecBeginLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@BeginLabel{#1}{#2}}
+\ecBeginLabel{Begin}
+\newcommand{\ecHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@HomeLabel{#1}{#2}}
+\ecHomeLabel{Home}
+\newcommand{\ecFinHomeLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FinHomeLabel{#1}{#2}}
+\ecFinHomeLabel{Home}
+\newcommand{\ecFSLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@FSLabel{#1}{#2}}
+\ecFSLabel{FS}
+\newcommand{\ecCloseLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@CloseLabel{#1}{#2}}
+\ecCloseLabel{Close}
+\newcommand{\ecRandomLabel}[2][\footnotesize]
+ {\ec@defineLabel\ec@RandomLabel{#1}{#2}}
+\ecRandomLabel{Random}
+\newNaviIcon[j]{\Soln}\iconWidth\iconHeight{\ec@SolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solnDest")}}
+\newNaviIcon[j]{\Hint}\iconWidth\iconHeight{\ec@HintLabel}
+ {\if\@ecNoHints\ec@YES\noHintJSAction\else
+ \NaviIconActionJS{this.gotoNamedDest("\hintDestJS")}\fi} % dps
+\newNaviIcon[j]{\NextCard}\iconWidth\iconHeight{\ec@NextLabel}
+ {\NaviIconActionJS{getNextCard()}}
+\newNaviIcon[j]{\PrevCard}\iconWidth\iconHeight{\ec@PrevLabel}
+ {\NaviIconActionJS{getPrevCard()}}
+\newNaviIcon[j]{\hintNextCard}\iconWidth\iconHeight
+ {\ec@HintNextLabel}{getNextCard();}
+\newNaviIcon[j]{\hintSoln}\iconWidth\iconHeight{\ec@HintSolnLabel}
+ {\NaviIconActionJS{this.gotoNamedDest("\solndest")}}
+\newNaviIcon[j]{\Begin}\iconWidth\iconHeight
+ {\ec@BeginLabel}{beginECards();}
+\newNaviIcon[l]{\Home}\iconWidth\iconHeight{\ec@HomeLabel}
+ {\ifnum\arabic{page}=1\relax\def\ec@next{\href{\@ecHomePage}}\else
+ \def\ec@next{\hyperlink{page.1}}\fi\ec@next}
+\newNaviIcon[j]{\Finished}\iconWidth\iconHeight{\ec@FinHomeLabel}
+ {resetToFirstPage();}
+\newNaviIcon[j]{\FullScreen}\iconWidth\iconHeight
+ {\ec@FSLabel}{\fsJS}
+\newNaviIcon[j]{\Close}\iconWidth\iconHeight{\ec@CloseLabel}
+ {closeCards=true; app.execMenuItem("Close")}
+\def\ec@CB@toggleOrder{%
+ \checkBox[\A{\JS{toggleOrder();}}\DV{\cbInitState}\V{\cbInitState}%
+ \TU{\toggleRandomizeTU}\textSize{0}\textColor{1 0 0}
+ \BC{0 0 .8}]{eccbtoggleorder}{9bp}{9bp}{randomOrder}}
+\providecommand{\nopNaviIcon}[4]{%
+ \def#1{{\setlength{\fboxsep}{0pt}%
+ \web@colorbox@w@transparency{\@menuBgColor}%
+ {\parbox[c][#3][c]{#2}%
+ {\normalsize\centering\color{\@menucolor}#4}}%
+ }}%
+}
+\nopNaviIcon{\fpToggleOrder}\iconWidth\iconHeight
+ {\ec@RandomLabel\space\ec@CB@toggleOrder}
+\nopNaviIcon{\ToggleOrder}\iconWidth\iconHeight
+ {\footnotesize\ec@CB@toggleOrder}
+\edef\@@Logo{\if\@memLogo\ec@YES\relax
+ \noexpand\unhcopy\noexpand\Logo\else\noexpand\@ecLogo\fi}
+\newcommand\iconWidthPanel{28pt}
+\newcommand\panelGrpWidth{57pt}
+\ifnum\@panelconfig>0\relax
+ \renewcommand\panelNaviGroup {%
+ \def\iconWidth{\iconWidthPanel}%
+ \ifnum\thepage=1\relax
+ \parbox[c]{\panelGrpWidth}
+ {%
+ \Begin\hfill\FullScreen\\
+ \Close\hfill\Home\\
+ \let\iconWidth\linewidth
+ \fpToggleOrder
+ }%
+ \else
+ \parbox[c]{\panelGrpWidth}
+ {%
+ {\ifecListing\else\if\nMarker\ec@Ques
+ \if\@ecNoHints\ec@YES
+ \navibarTextColor{lightblue}\fi
+ \else
+ \navibarTextColor{lightblue}\fi\fi\Hint}\hfill
+ {\if\nMarker\ec@Soln
+ \navibarTextColor{lightblue}\fi\Soln}\\
+ \NextCard\hfill\PrevCard\\
+ \ToggleOrder\hfill\Finished
+ }%
+ \fi
+ }
+ \newbox\Logo
+ \if\@memLogo\ec@YES\relax
+ \AtBeginDocument{\global\setbox\Logo=\hbox{\@ecLogo}}%
+ \fi
+\def\raiseLogoBy#1{{\setlength\@tempdima{#1}%
+ \xdef\r@iseLogoBy{\the\@tempdima}}}\raiseLogoBy{0pt}
+ \buildpanel{\raisebox{\r@iseLogoBy}{\ifx\@ecLogoLink\@empty\@@Logo
+ \else\href{\@ecLogoLink}{\@@Logo}\fi}%
+ \par\vspace{\stretch{1}}%
+ \rotatebox{-90}{\aebLogo}%
+ \par\vspace{\stretch{1}}%
+ \panelNaviGroup
+ }
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+\else
+ \def\cardNaviBar{\insNaviBar{\hfill
+ \if\@ecNoHints\ec@NO\Hint\ \fi\Soln\ \NextCard\
+ \PrevCard\ \ToggleOrder\ \Home\hfill}}
+ \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight
+ {\ec@SolnLabel}{%
+ \NaviIconActionJS{this.gotoNamedDest("\solndest")}}%
+ \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3);
+ this.gotoNamedDest("\solndest");}%
+ }
+\fi
+\newcommand{\pressBeginMsg}{Press the \eqbs\eqbs"Begin\eqbs\eqbs"
+ button to begin viewing the cards.}
+\ifecListing\else
+\thisPageAction{\JS{}}{\JS{if (!closeCards&&!beginPressed){\jsR\jsT
+ var b=app.setTimeOut("this.pageNum=0;
+ app.alert(pressBeginMsg);",50);\jsR}}}
+\fi
+\let\importdljs=y
+\begin{insDLJS}[isCardloaded]{flashcrd}{Flash Card JS}
+var isCardloaded=true;
+var closeCards=false;
+var beginPressed=false;
+var maxNumberCards = Math.pow(10,Math.ceil(%
+Math.LOG10E*Math.log(\theNumCards)));
+var aCardsNaturalOrder=new Array();
+var aCardsRandomOrder=new Array();
+var aCardsViewOrder;
+var ptrCards=0;
+var cardsFinished = "\CARDSFINISHED";
+var pressBeginMsg = "\pressBeginMsg";
+var isRandomized=\israndomized;
+function getNextCard() {
+ numCards = \theNumCards;
+ if ( ptrCards == numCards ) {
+ app.alert(cardsFinished,3);
+ resetToFirstPage();
+ } else {
+ ptrCards+=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+function getPrevCard() {
+ if ( ptrCards <= 1 ) {
+ resetToFirstPage();
+ } else {
+ ptrCards-=1;
+ this.gotoNamedDest("qex."+aCardsViewOrder[ptrCards]);
+ }
+}
+function ecOnBlurRespBox (retn, exnoCard, nMarker) {
+ if (retn != null) {
+ if (retn) {
+ app.alert(\eqsqrtmsg,3);
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ } else {
+ app.alert(\eqsqwgmsg,3);
+ if (nMarker==0) {
+ var dest = "ex." + exnoCard; // dps
+ this.gotoNamedDest(dest);
+ }
+ else {
+ var dest = "ex" + exnoCard + ".s"; // dps
+ this.gotoNamedDest(dest);
+ }
+ }
+ } else {
+ var str = event.target.value.toString();
+ if (str.replace(/\s/g,"") == "")
+ event.target.strokeColor = \defaultColorJSDef; // dps
+ }
+}
+function beginECards() {
+ PrepareViewingOrder();
+ beginPressed=true;
+ getNextCard();
+ var f, g, bState;
+ f=this.getField("eccbtoggleorder");
+ bState=f.isBoxChecked(0);
+ this.resetForm();
+ f.checkThisBox(0,bState);
+ for (var card=1; card<=\theNumCards; card++) {// dps
+ f = this.getField("obj.ex"+card);
+ if ( f != null ) {
+ g = f.getArray();
+ for (var i = 0; i < g.length; i++)
+ g[i].strokeColor = \defaultColorJSDef; // dps
+ }
+ }
+}
+function PrepareViewingOrder() {
+ ptrCards=0;
+ var i, rand;
+ for (i=0; i<=\theNumCards; i++) {
+ aCardsNaturalOrder[i]=i;
+ aCardsRandomOrder[i]=i;
+ }
+ for (i=1; i<=\theNumCards; i++) {
+ var rand = Math.random();
+ rand *= maxNumberCards;
+ rand = Math.ceil(rand);
+ rand = rand \% \theNumCards;
+ rand += 1;
+ temp = aCardsRandomOrder[i];
+ aCardsRandomOrder[i]=aCardsRandomOrder[rand];
+ aCardsRandomOrder[rand]=temp;
+ }
+ aCardsViewOrder=(isRandomized)?aCardsRandomOrder:aCardsNaturalOrder;
+}
+function toggleOrder() {
+ isRandomized=!isRandomized;
+ if (aCardsNaturalOrder.length==0) PrepareViewingOrder();
+ if (isRandomized) {
+ for (var i=1; i<=\theNumCards; i++)
+ if (aCardsRandomOrder[i]==ptrCards) break;
+ ptrCards=i;
+ aCardsViewOrder=aCardsRandomOrder;
+ app.alert("\randomizedMsg");
+ } else {
+ ptrCards=aCardsViewOrder[ptrCards];
+ aCardsViewOrder=aCardsNaturalOrder;
+ app.alert("\nonrandomizedMsg");
+ }
+}
+function resetToFirstPage() {
+ this.gotoNamedDest("page.1");
+ beginPressed=false;
+}
+\end{insDLJS}
+\ifecListing\input{ecardslist.def}\fi
+\if\@ecCustom\ec@YES\InputIfFileExists{ecard.cus}{}{}\fi
+\endinput
+%%
+%% End of file `ecards.sty'.
diff --git a/texmf-dist/tex/latex/ecards/ecardslist.def b/texmf-dist/tex/latex/ecards/ecardslist.def
new file mode 100644
index 00000000..a5a4c6cb
--- /dev/null
+++ b/texmf-dist/tex/latex/ecards/ecardslist.def
@@ -0,0 +1,91 @@
+%%
+%% This is file `ecardslist.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ecards.dtx (with options: `copyright,listing')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ecards.sty package, %%
+%% Copyright (C) 1999-2016 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcounter{ecCnt}
+\let\exsolafter\@empty
+\eqexerskip{0pt}
+\newenvironment{listing@card}[1][\opts@ecNoHints]{%
+ \isQuestrue\let\useHints\ec@HintsWarning
+ \let\useNoHint\ec@HintsWarning\edef\ec@rgi{#1}%
+ \ifx\ec@rgi\ec@isHint
+ \def\ec@thisHintOpt{\ecUseHints}\else
+ \ifx\ec@rgi\ec@isNoHint
+ \def\ec@thisHintOpt{\ecUseNoHints}\else
+ \def\ec@thisHintOpt{\ecUseHints}\ec@BadArgWarning
+ \fi\fi
+ \ec@thisHintOpt\nMarkerSet{\ec@Ques}%
+ \stepcounter{ecCnt}%
+ \def\eqexheader{\noindent}%
+ \renewcommand\exsllabelformat{\protect\noindent}%
+ \renewcommand\exrtnlabelformat{}%
+ \renewcommand\exsecrunhead{}%
+ \let\afterlabelhskip\@empty
+ \def\exersolnheadhook{\ecInfoToSolns}%
+ \begin{exercise}%
+ \textBgColor{\@cardColor}%
+ \headCard
+}{%
+ \tailCard
+ \end{exercise}%
+}
+\newcommand{\listing@headCard}{\ifeqforpaper
+ \makebox[0pt][r]{\textbf{\arabic{ecCnt}.\thinspace}}\else
+ \makebox[0pt][r]{\textbf{\hyperlink{ex.\exnoCard}%
+ {\arabic{ecCnt}.\thinspace}}}\fi\ignorespaces}
+\newcommand{\listing@tailCard}{\removelastskip\par} % dps
+\def\setSolutionsAfterSkip{\expandafter
+ \def\expandafter\solutionsafterSkip
+ \expandafter{\solutionsafterSkip\kern0pt}}
+\AtBeginDocument{\setSolutionsAfterSkip}
+\newenvironment{listing@response}
+ {\solutionsafterSkip\solnexer@woparts[]}{\endsolnexer@woparts}
+\newenvironment{listing@hint}{%
+ \textBgColor{\@hintColor}%
+ \headHint
+}{\tailHint}
+\newcommand{\listing@headHint}{%
+ \par\textit{Hint}:\space\ignorespaces}
+\newcommand{\listing@tailHint}{}
+\newenvironment{listing@answer}{%
+ \textBgColor{\@solnColor}%
+ \headAnswer
+}{\tailAnswer}
+\newcommand{\listing@headAnswer}{%
+ \par\textit{Answer}:\space\ignorespaces}
+\newcommand{\listing@tailAnswer}{}
+\def\ec@redefForListing{%
+ \let\card\listing@card
+ \let\endcard\endlisting@card
+ \let\headCard\listing@headCard
+ \let\tailCard\listing@tailCard
+ \let\response\listing@response % dps
+ \let\endresponse\endlisting@response % dps
+ \let\headhint\listing@hint
+ \let\endhint\listing@endhint
+ \let\headHint\listing@headHint
+ \let\tailHint\listing@tailHint
+ \let\answer\listing@answer
+ \let\endanswer\listing@endanswer
+ \let\headAnswer\listing@headAnswer
+ \let\tailAnswer\listing@tailAnswer
+}
+\AtBeginDocument{\ec@redefForListing}
+\endinput
+%%
+%% End of file `ecardslist.def'.
diff --git a/texmf-dist/tex/latex/fc-arith/fc_arith.sty b/texmf-dist/tex/latex/fc-arith/fc_arith.sty
new file mode 100644
index 00000000..0d0f54b6
--- /dev/null
+++ b/texmf-dist/tex/latex/fc-arith/fc_arith.sty
@@ -0,0 +1,1887 @@
+%%
+%% This is file `fc_arith.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fc_arith.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fc_arith.sty package, %%
+%% Copyright (C) 1999-2017 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.2 of %%
+%% the License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{fc_arith}
+ [2017/01/16 v1.0f fc_arith: PDF flash cards for arithmetic drill (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{ifxetex}
+\RequirePackage{calc}
+\let\fc@YES=y \let\fc@NO=n
+\DeclareOptionX{allownegsub}{\def\fcAllowNegSub{true}}
+\def\fcAllowNegSub{false}
+\DeclareOptionX{nomenu}{\let\fc@usemenu\fc@NO}
+\let\fc@usemenu\fc@YES
+\DeclareOptionX{operations}[add,sub,mul,div]{\def\fc@operations{#1}}
+\def\fc@operations{add,sub,mul,div}
+\DeclareOptionX{showkeypadlink}{\let\fc@keypadlink\fc@YES}
+\let\fc@keypadlink\fc@NO
+\DeclareOptionX{notimedscores}{%
+ \def\fcTimedScores{false}
+ \let\fc@timedscores\fc@NO
+}
+\def\fcTimedScores{true}
+\let\fc@timedscores\fc@YES
+\ProcessOptionsX
+\RequirePackage{eforms}[2017/01/15]
+\RequirePackage{popupmenu}
+\newdimen\fcWidth
+\define@boolkey{fcopera}{add}[true]{}
+\define@boolkey{fcopera}{sub}[true]{}
+\define@boolkey{fcopera}{mul}[true]{}
+\define@boolkey{fcopera}{div}[true]{}
+\edef\fc@expand{\noexpand\setkeys{fcopera}{\fc@operations}}\fc@expand
+\define@key{fcarithparams}{addT}[{[0,100]}]{\def\fcAddTParams{#1}}
+\define@key{fcarithparams}{addB}[{[0,100]}]{\def\fcAddBParams{#1}}
+\define@choicekey{fcarithparams}{addDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecT{\nr}}{}
+\define@choicekey{fcarithparams}{addDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcaddDecB{\nr}}{}
+\define@key{fcarithparams}{subT}[{[0,100]}]{\def\fcSubTParams{#1}}
+\define@key{fcarithparams}{subB}[{[0,100]}]{\def\fcSubBParams{#1}}
+\define@choicekey{fcarithparams}{subDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecT{\nr}}{}
+\define@choicekey{fcarithparams}{subDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcsubDecB{\nr}}{}
+\define@key{fcarithparams}{mulT}[{[0,100]}]{\def\fcMulTParams{#1}}
+\define@key{fcarithparams}{mulB}[{[0,10]}]{\def\fcMulBParams{#1}}
+\define@choicekey{fcarithparams}{mulDecT}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecT{\nr}}{}
+\define@choicekey{fcarithparams}{mulDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcmulDecB{\nr}}{}
+\define@key{fcarithparams}{divQ}[{[0,10]}]{\def\fcDivQParams{#1}}
+\define@key{fcarithparams}{divB}[{[0,10]}]{\def\fcDivBParams{#1}}
+\define@choicekey{fcarithparams}{divDecQ}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecQ{\nr}}{}
+\define@choicekey{fcarithparams}{divDecB}[\val\nr]{none,1,2}[none]{%
+ \edef\fcdivDecB{\nr}}{}
+\setkeys{fcarithparams}{addT,addB,subT,subB,mulT,mulB,divQ,divB,%
+ addDecT,addDecB,subDecT,subDecB,mulDecT,mulDecB,divDecQ,divDecB}
+\newcommand{\DeclareArithParams}[1]{\setkeys{fcarithparams}{#1}}
+\@onlypreamble\DeclareArithParams
+\newcommand{\timeUpMsg}{Your Time is UP!}
+\newcommand{\rightMsg}{Right!}
+\newcommand{\wrongMsg}{Wrong!}
+\newcommand{\startAgainMsg}{Start Again}
+\newcommand{\newCardMsg}{New Card}
+\newcommand{\toggleKeypad}{Toggle Keypad}
+\newcommand{\operation}{Operation}
+\newcommand{\numCorrect}{Number Correct}
+\newcommand{\numAttempted}{Number Attempted}
+\newcommand{\percentCorrect}{Percentage Correct}
+\newcommand{\timedScores}{Timed Scores}
+\newcommand{\fmtAnswer}{Answer:}
+\newcommand{\kpDec}{.}
+\newcommand{\kpMinus}{-}
+\newcommand{\kpBack}{Back}
+\newcommand{\kpEnter}{Enter}
+\newcommand{\fcNoTiming}{No Timing}
+\newcommand{\fcAddition}{Addition}
+\newcommand{\fcSubtraction}{Subtraction}
+\newcommand{\fcMultiplication}{Multiplication}
+\newcommand{\fcDivision}{Division}
+\newcommand{\fcSettings}{Settings}
+\newcommand{\fcSettingsColor}{0 0 0}
+\newcommand{\fcSettingsTooltip}{Click for a dropdown menu
+ of menu choices}
+\newcommand{\FCMenu}{\smash{\hbox{\pushButton[\textSize{8}\H{O}
+ \textColor{\fcSettingsColor}
+ \CA{\fcSettings\space}\S{S}\BC{}\BG{}\TU{\fcSettingsTooltip}
+ \A{\JS{processFcMenu();}}]{fcSettingsBtn}{}{11bp}\kern0pt}}}
+ \ifx\fc@usemenu\fc@YES\lheader{\FCMenu}\rheader{}\else
+\lheader{}\rheader{}\fi
+\newenvironment{MenuFC}{\begin{popupmenu}{fcMenu}}
+{\end{popupmenu}}
+\def\fcMenu{// No menu items selected in the MenuFC environment}
+\def\fcOptionsMenuItem{\item{title=\fcOptionsMenuItemTitle,return=0}}
+\newcommand\fcOptionsMenuItemTitle{Options}
+\def\fcToggleKeypadMenuItem{\item{title=\fcToggleKeypadMenuItemTitle,%
+ marked=false,return=1}}
+\newcommand\fcToggleKeypadMenuItemTitle{Toggle Keypad}
+\def\fcTouchKPMenuItem{\item{title=\fcTouchKPMenuItemTitle,%
+ marked=false,enabled=false,return=3}}
+\newcommand\fcTouchKPMenuItemTitle{Touch Friendly Keypad}
+\def\fcMouseKPMenuItem{\item{title=\fcMouseKPMenuItemTitle,%
+ marked=true,enabled=false,return=4}}
+\newcommand\fcMouseKPMenuItemTitle{Mouse Friendly Keypad}
+\def\fcAboutFC{\item{title=\fcAboutFCTitle, return=2}}
+\newcommand\fcAboutFCTitle{About PDF Flash Cards}
+\newcommand{\tBGNoBorder}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{1 0 0}\Ff\FfReadOnly}
+\newcommand{\tBGNoBorderI}{\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}}
+\newcommand{\cBGNoBorder}{\Q{1}\BC{}\BG{}\autoCenter{n}\textSize{0}
+ \textColor{0 0 0}\BG{.75 .75 .75}\Ff\FfReadOnly}
+\newcommand{\cBGBorder}{\BC{0 0 0}\BG{.75 .75 .75}\autoCenter{n}
+ \textSize{0}\textColor{0 0 0}}
+\newcommand{\myNumPadI}{\F\FHidden\autoCenter{n}\textSize{8}
+ \textFont{\fieldFont}\S{S}}
+\newcommand{\setDimOf}[3]{\@namedef{widthOf#1}{#2}%
+ \@namedef{heightOf#1}{#3}}
+\newcommand{\monoSpaceFont}{CoBo}
+\newcommand{\fieldFont}{Helv}
+\setDimOf{top}{1in}{0.62in}
+\setDimOf{operation}{.38in}{.62in}
+\setDimOf{bottom}{1in}{0.62in}
+\newcommand{\arithProb}{\mbox{\vbox{\offinterlineskip
+ \hbox{\hspace*{\@nameuse{widthOfoperation}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{top}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }%
+ \hbox{%
+ \textField[\presets{\tBGNoBorder}
+ \textSize{25}\Q{1}]{operation}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}%
+ \textField[\presets{\tBGNoBorder}
+ \textFont{\monoSpaceFont}\Q{2}]{bottom}%
+ {\@nameuse{widthOf\Fld@name}}{\@nameuse{heightOf\Fld@name}}%
+ }}}%
+}
+\setDimOf{alertbox}{.88in}{.62in}
+\setDimOf{StartAgain}{0.88in}{0.62in}
+\setDimOf{result}{1.38in}{0.62in}
+\setDimOf{NewProblem}{0.88in}{0.62in}
+\newcommand{\alertbox}[1][]{\hbox{\textField[\presets{\tBGNoBorder}
+ \textSize{0}#1]{alertbox}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\@ifundefined{if@useacrobat}{\let\placeImageOpts\@empty}
+{\def\placeImageOpts{\FB{false}\I{null}\TP{2}}}
+\newcommand{\startAgain}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \textSize{12}\CA{\startAgainMsg}\AC{\startAgainMsg}#1
+ \A{\JS{startAgain();}}]{StartAgain}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\inputRegion}[1][]{\hbox{\textField[\presets{\cBGNoBorder}
+ \Ff{-\FfReadOnly}\Q{2}#1\AA{\AAValidate{validateResult();}
+ \AAKeystroke{fcNumber_Keystroke(numDecimals,1,0,0,"",true);}
+ \AAFormat{try{%
+ fcNumber_Format(numDecimals,1,0,0,"",true);}catch(e){}}}
+ ]{result}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\newcommand{\newCard}[1][]{\hbox{%
+ \expandafter\pushButton\expandafter[\placeImageOpts
+ \textSize{12}\presets{\tBGNoBorderI}\textFont{\fieldFont}\S{S}
+ \CA{\newCardMsg}\AC{\newCardMsg}#1\A{\JS{newCard();}}
+ ]{NewProblem}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}}
+\setDimOf{TimeDelay}{0.9in}{0.24in}
+\setDimOf{ansregion}{.87in+10bp}{.24in}
+\setDimOf{ChooseOperation}{1.38in-10bp}{0.24in}
+\edef\isReadOnlyTiming{\ifx\fc@timedscores\fc@NO
+ \noexpand\Ff{\FfReadOnly}\fi}
+\newcommand{\cbTimingToolip}{Select a time challenge
+ from the dropdown menu}
+\newcommand{\cbTiming}[1][]{\hbox{%
+ \expandafter\comboBox\expandafter[\isReadOnlyTiming
+ \presets{\cBGBorder}\textFont{\fieldFont}\V{600000}\DV{600000}#1
+ \TU{\cbTimingToolip}\AA{\AAKeystroke{%
+ if (!event.willCommit) timelimit=event.changeEx;}}
+ ]{TimeDelay}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{%
+ [(600000)(\fcNoTiming)][(30)(30 sec)][(25)(25 sec)][(20)(20 sec)]%
+ [(15)(15 sec)][(10)(10 sec)][(5)(\space\space 5 sec)]}}%
+}
+\newcommand{\ansField}[1][]{\hbox{\textField[\presets{\cBGNoBorder}\Q{2}
+ #1\AA{\AAFormat{%
+ if (event.value!="") {\r
+ try{fcNumber_Format(numDecimals,1,0,0,"",true);\r
+ event.value=("\fmtAnswer\space")+event.value;}catch(e){};}}}
+ ]{ansregion}{\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}}%
+}
+\let\fc@addAbbr=a\let\fc@subAbbr=s
+\let\fc@mulAbbr=m\let\fc@divAbbr=d
+\newcommand{\cbOpDefault}[1]{\def\cbOpDef@ult{#1}%
+ \if\cbOpDef@ult\fc@addAbbr\else\if\cbOpDef@ult\fc@subAbbr\else
+ \if\cbOpDef@ult\fc@mulAbbr\else\if\cbOpDef@ult\fc@divAbbr\else
+ \ifKV@fcopera@add\def\cbOpDef@ult{a}\else
+ \ifKV@fcopera@sub\def\cbOpDef@ult{s}\else
+ \ifKV@fcopera@mul\def\cbOpDef@ult{m}\else
+ \ifKV@fcopera@div\def\cbOpDef@ult{d}\else
+ \PackageError{fc_arith}{There are no selected arithmetic
+ operations}{}\fi\fi\fi\fi
+ \PackageWarning{fc_arith}{Value of \string\cbOpDefault\space
+ not recognized,\MessageBreak will use `\cbOpDef@ult'}%
+ \fi\fi\fi\fi
+}
+\cbOpDefault{a}
+\newcommand{\cbOperationTooltip}{Choose an arithmetic operation
+ to practice}
+\newcommand{\cbOperation}[1][]{%
+ \edef\cbvOptChoices{\ifKV@fcopera@add[(a)(\fcAddition)]\fi
+ \ifKV@fcopera@sub[(s)(\fcSubtraction)]\fi
+ \ifKV@fcopera@mul[(m)(\fcMultiplication)]\fi
+ \ifKV@fcopera@div[(d)(\fcDivision)]\fi}%
+ \hbox{\comboBox[\presets{\cBGBorder}\textFont{\fieldFont}
+ \TU{\cbOperationTooltip}
+ \V{\cbOpDef@ult}\DV{\cbOpDef@ult}#1]{ChooseOperation}%
+ {\@nameuse{widthOf\Fld@name}}%
+ {\@nameuse{heightOf\Fld@name}}{\cbvOptChoices}}%
+}
+\newcommand{\szNum}{14bp}
+\newcommand\toggleKeyPadBtnColor{0 0 1}
+\newcommand\toggleKeyPadBtnTooltip{Click to toggle keypad, shift-click
+ to toggle between mouse and touch keypads}
+\def\toggleKeyPadBtn{\pushButton[\textSize{6}\CA{\toggleKeypad}\H{O}
+ \TU{\toggleKeyPadBtnTooltip}\textColor{\toggleKeyPadBtnColor}
+ \S{S}\BC{}\BG{}\A{\JS{%
+ if (event.shift)\r\t
+ if (bTouchFriendly)\r\t\t
+ makeMouseFriendly();\r\t
+ else\r\t\t
+ makeTouchFriendly();\r\t
+ else\r\t
+ ToggleKeyPad();\r
+}}]{toggleKeyPadBtn}{}{8bp}}%
+\newcommand{\Keypad}{%
+ \vbox{\offinterlineskip\ifx\fc@keypadlink\fc@YES
+ \setlength{\fcWidth}{4bp+\szNum*4}%
+ \hbox to\fcWidth{\hfill\toggleKeyPadBtn\hfill}\vskip2bp\fi
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{7}
+ \A{\JS{addDigit(7)}}]{num7}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{8}
+ \A{\JS{addDigit(8)}}]{num8}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{9}
+ \A{\JS{addDigit(9)}}]{num9}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{4}
+ \A{\JS{addDigit(4)}}]{num4}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{5}
+ \A{\JS{addDigit(5)}}]{num5}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{6}
+ \A{\JS{addDigit(6)}}]{num6}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{1}
+ \A{\JS{addDigit(1)}}]{num1}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{2}
+ \A{\JS{addDigit(2)}}]{num2}{\szNum}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{3}
+ \A{\JS{addDigit(3)}}]{num3}{\szNum}{\szNum}}\olBdry
+ \hbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \pushButton[\presets{\myNumPadI}\CA{0}
+ \A{\JS{addDigit(0)}}]{num0}{\w@dj+\szNum*2}{\szNum}\olBdry
+ \pushButton[\presets{\myNumPadI}\CA{\kpDec}
+ \A{\JS{addDigit("Dec")}}]{Dec}{\szNum}{\szNum}\olBdry
+ \smash{\vbox{\edef\w@dj{\ifmakeXasPD1bp\else\ifxetex-1bp\else-1bp\fi\fi}%
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpMinus}
+ \A{\JS{addDigit("Minus")}}
+ ]{Minus}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpBack}
+ \textSize{0}\A{\JS{addDigit("Back")}}
+ ]{Back}{\szNum}{\szNum}}\olBdry
+ \hbox{\pushButton[\presets{\myNumPadI}\CA{\kpEnter}
+ \textSize{0}\A{\JS{addDigit("Enter")}}
+ ]{Enter}{\szNum}{\w@dj+\szNum*2}}%
+ }}}}%
+}
+\def\fcSep{\quad}
+\setDimOf{fcSF}{0.37in}{0.25in}
+\newcommand{\statsFieldOpColor}{1 0 0}
+\newcommand{\statsFieldColor}{blue}
+\newcommand{\timeScoresTooltip}{Click to see how points are assigned}
+\newcommand{\statsFields}{%
+\ifKV@fcopera@add
+ \vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{+}\DV{+}\Q{1}
+ ]{AddScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore2}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore3}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore4}{\widthOffcSF}{\heightOffcSF}}%
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}
+ ]{AddScore5}{\widthOffcSF}{\heightOffcSF}}%
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@sub
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{-}\DV{-}\Q{1}
+ ]{SubScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore2}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore3}%
+ {\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{SubScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@mul
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}\V{x}\DV{x}\Q{1}
+ ]{MulScore1}{\widthOffcSF}{\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{MulScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\ifKV@fcopera@div
+\vbox{\offinterlineskip
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ \uV{FEFF00F7}\uDV{FEFF00F7}\Q{1}
+ ]{DivScore1}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore2}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore3}{\widthOffcSF}%
+ {\heightOffcSF}}\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore4}{\widthOffcSF}%
+ {\heightOffcSF}}
+\ifx\fc@timedscores\fc@YES\olBdry
+ \hbox{\textField[\presets{\cBGNoBorder}]{DivScore5}{\widthOffcSF}%
+ {\heightOffcSF}}
+\fi
+ }\fcSep
+\fi
+\vbox{\offinterlineskip
+ \hbox{\parbox[b][.25in][c]{.75in}{%
+ \textcolor{blue}{\operation}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numCorrect}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\numAttempted}\hfill}}
+ \hbox{\parbox[b][.25in][c]{1.25in}{%
+ \textcolor{blue}{\percentCorrect}\hfill}}
+\ifx\fc@timedscores\fc@YES
+ \hbox{\textField[\presets{\cBGNoBorder}
+ \textColor{\statsFieldOpColor}
+ ]{ScoreTotal}{.51in}{.25in}\kern1bp
+ \makebox[0pt][l]{\pushButton[\presets{\tBGNoBorder}
+ \Ff{-\FfReadOnly}\S{S}\H{I}\textSize{10}
+ \TU{\timeScoresTooltip}
+ \A{\JS{docTimeScores();}}]{Descrip5}{1in}{.25in}}%
+ \parbox[b][.25in][c]{1in}{%
+ \centering\textcolor{blue}{\timedScores}}}%
+\fi
+ }%
+}
+\edef\bFCa{/\ifKV@fcopera@add/\else*\fi}
+\edef\eFCa{\ifKV@fcopera@add/\else*\fi/}
+\edef\bFCs{/\ifKV@fcopera@sub/\else*\fi}
+\edef\eFCs{\ifKV@fcopera@sub/\else*\fi/}
+\edef\bFCm{/\ifKV@fcopera@mul/\else*\fi}
+\edef\eFCm{\ifKV@fcopera@mul/\else*\fi/}
+\edef\bFCd{/\ifKV@fcopera@div/\else*\fi}
+\edef\eFCd{\ifKV@fcopera@div/\else*\fi/}
+\def\fctCharWidth{22}
+\def\fctInstr{"Points are awarded, based on time,
+ for successfully solving a problem:"}
+\def\fctTimeElapsed{"Time elapsed"}
+\def\fctPoints{"Points"}
+\def\fctLessThanV{"Less than 5 sec"}
+\def\fctLessThanVPoints{6}
+\def\fctBtwnVAndX{"Between 5 and 10 sec"}
+\def\fctBtwnVAndXPoints{5}
+\def\fctBtwnXAndXV{"Between 10 and 15 sec"}
+\def\fctBtwnXAndXVPoints{4}
+\def\fctBtwnXVAndXX{"Between 15 and 20 sec"}
+\def\fctBtwnXVAndXXPoints{3}
+\def\fctBtwnXXAndXXV{"Between 20 and 25 sec"}
+\def\fctBtwnXXAndXXVPoints{2}
+\def\fctGtrXXV{"Greater than 25 sec"}
+\def\fctGtrXXVPoints{1}
+\newcommand\amtChngMouToTou{5}
+\newcommand\fcOptTextWidth{80}
+\newcommand\fcOptTopRange{Range Top}
+\newcommand\fcOptBottomRange{Range Bottom}
+\newcommand\fcOptTopRangeDiv{Range Quotient}
+\newcommand\fcOptBottomRangeDiv{Range Divisor}
+\newcommand\fcOptTo{ to }
+\newcommand\fcOptAllowNegNumber{Allow Negative Subtraction}
+\newcommand\fcOptDecimal{Decimals:}
+\newcommand\fcOptDecimalNone{none}
+\newcommand\fcMenuFCMsg{No menu items to display}
+\newcommand\fcAdditionName{\fcAddition}
+\newcommand\fcSubtractionName{\fcSubtraction}
+\newcommand\fcMultiplicationName{\fcMultiplication}
+\newcommand\fcDivisionName{\fcDivision}
+\begin{insDLJS*}{fcjs}
+\begin{newsegment}{data}
+var _loadfcjs=true;
+var t, b, o, r, c, oAlert;
+function getFieldObjects()
+{
+ t=this.getField("top");
+ b=this.getField("bottom");
+ o=this.getField("operation");
+ r=this.getField("result");
+ c=this.getField("ChooseOperation");
+ oAlert=this.getField("alertbox");
+ useKeyPad = (this.getField("Enter").display==display.visible);
+}
+var turnoff=false;
+var bUpdateField=true;
+var timedScores=\fcTimedScores;
+var fcAllowNegSub=\fcAllowNegSub;
+var useKeyPad = false;
+var decimalPressed = false;
+var keypadInput=false;
+var operand='a';
+var NumAddCorr=0;
+var NumAddTried=0;
+var NumSubCorr=0;
+var NumSubTried=0;
+var NumMulCorr=0;
+var NumMulTried=0;
+var NumDivCorr=0;
+var NumDivTried=0;
+timelimit=600000;
+var mybegin;
+getFieldObjects();
+var numDecimals=0;
+var addDecT = \fcaddDecT, addDecB = \fcaddDecB;
+var addT_a = Number(\fcAddTParams[0]);
+var addT_b = Number(\fcAddTParams[1]);
+var addB_a = Number(\fcAddBParams[0]);
+var addB_b = Number(\fcAddBParams[1]);
+var subDecT = \fcsubDecT, subDecB = \fcsubDecB;
+var subT_a = Number(\fcSubTParams[0]);
+var subT_b = Number(\fcSubTParams[1]);
+var subB_a = Number(\fcSubBParams[0]);
+var subB_b = Number(\fcSubBParams[1]);
+var mulDecT = \fcmulDecT, mulDecB = \fcmulDecB;
+var mulT_a = Number(\fcMulTParams[0]);
+var mulT_b = Number(\fcMulTParams[1]);
+var mulB_a = Number(\fcMulBParams[0]);
+var mulB_b = Number(\fcMulBParams[1]);
+var divDecQ = \fcdivDecQ, divDecB = \fcdivDecB;
+var divQ_a = Number(\fcDivQParams[0]);
+var divQ_b = Number(\fcDivQParams[1]);
+var divB_a = Number(\fcDivBParams[0]);
+var divB_b = Number(\fcDivBParams[1]);
+\end{newsegment}
+\begin{newsegment}{updatescore}
+function updatescore(f,t) {
+ // console.println(t);
+ var points=0;
+ if(t<=5) points=6;
+ if((t>5)&&(t<=10)) points=5;
+ if((t>10)&&(t<=15)) points=4;
+ if((t>15)&&(t<=20)) points=3;
+ if((t>20)&&(t<=25)) points=2;
+ if(t>25) points=1;
+ var oField=this.getField(f);
+ if ( oField != null ) {
+ oField.value+=points;
+ this.getField("ScoreTotal").value+=points;
+ }
+}
+function docTimeScores() {
+ app.execDialog(fcTimedScoresDialog);
+}
+var fcTimedScoresDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Timed Scores",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "instr",
+ name: \fctInstr
+ }
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "hr01",
+ char_width: \fctCharWidth,
+ font: "dialog",
+ bold: true,
+ name: \fctTimeElapsed
+ },
+ {
+ type: "static_text",
+ item_id: "hr02",
+ font: "dialog",
+ bold: true,
+ name: \fctPoints
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st11",
+ char_width: \fctCharWidth,
+ name: \fctLessThanV
+ },
+ {
+ type: "static_text",
+ item_id: "st12",
+ name: " \fctLessThanVPoints"
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st21",
+ char_width: \fctCharWidth,
+ name: \fctBtwnVAndX
+ },
+ {
+ type: "static_text",
+ item_id: "st22",
+ name: " \fctBtwnVAndXPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st31",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXAndXV
+ },
+ {
+ type: "static_text",
+ item_id: "st32",
+ name: " \fctBtwnXAndXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st41",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXVAndXX
+ },
+ {
+ type: "static_text",
+ item_id: "st42",
+ name: " \fctBtwnXVAndXXPoints"
+ },
+ ]
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st51",
+ char_width: \fctCharWidth,
+ name: \fctBtwnXXAndXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st52",
+ name: " \fctBtwnXXAndXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "gap",
+ width: 10
+ },
+ {
+ type: "static_text",
+ item_id: "st61",
+ char_width: \fctCharWidth,
+ name: \fctGtrXXV
+ },
+ {
+ type: "static_text",
+ item_id: "st62",
+ name: " \fctGtrXXVPoints"
+ },
+ ]
+ },
+//---
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok",
+ }
+ ]
+ }
+ ]
+ }
+}
+function validateResult()
+{
+ var oField, MsgFlag, calculation;
+ if (!turnoff && !keypadInput) {
+ MsgFlag=false;
+ this.delay=true;
+ var mynow=new Date();
+ var elapsedtime = (Date.parse(mynow)-Date.parse(mybegin))/1000;
+ var timeelapsed = (elapsedtime>timelimit);
+ switch (operand) {
+ case 'a':
+ oField = this.getField("AddScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value+b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumAddCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumAddCorr;
+ updatescore("AddScore5",elapsedtime);
+ }
+ }
+ else
+ if ( bUpdateField ) oField.value=NumAddCorr;
+ }
+ oField = this.getField("AddScore3");
+ if (oField != null ) oField.value=++NumAddTried;
+ oField = this.getField("AddScore4");
+ if (oField != null ) oField.value = util.printf("\%.0f",%
+(NumAddCorr/NumAddTried)*100);
+ break;
+ case 's':
+ oField=this.getField("SubScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",
+ (t.value-b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumSubCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if ( bUpdateField ) {
+ oField.value=++NumSubCorr;
+ updatescore("SubScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumSubCorr;
+ }
+ oField=this.getField("SubScore3");
+ if (oField != null) oField.value=++NumSubTried;
+ oField=this.getField("SubScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumSubCorr/NumSubTried)*100);
+ break;
+ case 'm':
+ oField=this.getField("MulScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+(t.value*b.value));
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumMulCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumMulCorr;
+ updatescore("MulScore5",elapsedtime);
+ }
+ } else
+ if (bUpdateField) oField.value=NumMulCorr;
+ }
+ oField=this.getField("MulScore3");
+ if (oField != null) oField.value=++NumMulTried;
+ oField=this.getField("MulScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumMulCorr/NumMulTried)*100);
+ break;
+ case 'd':
+ oField=this.getField("DivScore2");
+ bUpdateField = ( oField != null );
+ calculation=util.printf("\%."+numDecimals+"f",%
+t.value/b.value);
+ if(timeelapsed) {
+ if (timedScores) app.alert("\timeUpMsg",3);
+ if (bUpdateField) oField.value=NumDivCorr;
+ } else {
+ if((1*event.value)==calculation) {
+ MsgFlag=true;
+ if (bUpdateField) {
+ oField.value=++NumDivCorr;
+ updatescore("DivScore5",elapsedtime);
+ }
+ } else
+ if ( bUpdateField ) oField.value=NumDivCorr;
+ }
+ oField = this.getField("DivScore3");
+ if (oField != null) oField.value=++NumDivTried;
+ oField = this.getField("DivScore4");
+ if (oField != null) oField.value=util.printf("\%.0f",%
+(NumDivCorr/NumDivTried)*100);
+ break;
+ }
+ if(!timeelapsed) {
+ if(MsgFlag) {
+ oAlert.textColor=color.blue;
+ oAlert.value="\rightMsg";
+ } else {
+ oAlert.textColor=color.red;
+ oAlert.value="\wrongMsg";
+ }
+ }
+ this.getField("ansregion").value=calculation;
+ this.getField("NewProblem").setFocus() ;
+ this.delay=false;
+ }
+}
+function startAgain() {
+ getFieldObjects();
+ turnoff=true;
+ this.resetForm();
+ timelimit=600000;
+ event.rc=false;
+ operand='+';
+ NumAddCorr=0;
+ NumAddTried=0;
+ NumSubCorr=0;
+ NumSubTried=0;
+ NumMulCorr=0;
+ NumMulTried=0;
+ NumDivCorr=0;
+ NumDivTried=0;
+}
+function newCard() {
+ turnoff=true;
+ this.resetForm(["result","top","bottom","ansregion","alertbox"]);
+ operand = c.value;
+ switch (operand)
+ {
+ case 'a':
+ {
+ o.value='+'; // addDecT
+ numDecimals = Math.max(addDecT,addDecB);
+ var topTemplate = "\%."+addDecT+"f";
+ var botTemplate = "\%."+addDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(addT_b-addT_a)*Math.random()+addT_a);
+ var n=util.printf(botTemplate,%
+(addB_b-addB_a)*Math.random()+addB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ break;
+ }
+ case 's':
+ {
+ o.value="-";
+ numDecimals = Math.max(subDecT,subDecB);
+ var topTemplate = "\%."+subDecT+"f";
+ var botTemplate = "\%."+subDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(subT_b-subT_a)*Math.random()+subT_a);
+ var n=util.printf(botTemplate,%
+(subB_b-subB_a)*Math.random()+subB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ var bSwitch=( (!fcAllowNegSub) && (n-m>0) );
+ t.value=util.printf(commonTemplate,(bSwitch)?n:m);
+ b.value=util.printf(commonTemplate,(bSwitch)?m:n);
+ break;
+ }
+ case 'm':
+ {
+ o.value='x';
+ numDecimals=Math.max(mulDecT,mulDecB);
+ var topTemplate = "\%."+mulDecT+"f";
+ var botTemplate = "\%."+mulDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var m=util.printf(topTemplate,%
+(mulT_b-mulT_a)*Math.random()+mulT_a);
+ var n=util.printf(botTemplate,%
+(mulB_b-mulB_a)*Math.random()+mulB_a);
+ m=util.printf(matchTemplate,m);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = mulDecT + mulDecB;
+ break;
+ }
+ case 'd':
+ {
+ o.value='\string\367'
+ numDecimals=divDecQ+divDecB;
+ var topTemplate = "\%."+divDecQ+"f";
+ var botTemplate = "\%."+divDecB+"f";
+ var matchTemplate = "\%."+ numDecimals +"f";
+ var n,m;
+ var quotient=util.printf(topTemplate,%
+divQ_a + (divQ_b-divQ_a)*Math.random());
+ for(n=util.printf(botTemplate,%
+divB_a + (divB_b-divB_a)*Math.random());
+ n==0; n=util.printf("\%.0f",%
+divB_a + (divB_b-divB_a)*Math.random()));
+ m=util.printf(matchTemplate,quotient*n);
+ n=util.printf(matchTemplate,n);
+ var nWidth=(m.length < n.length) ? n.length : m.length;
+ var commonTemplate = "\%"+nWidth+"."+numDecimals+"f";
+ t.value=util.printf(commonTemplate,m);
+ b.value=util.printf(commonTemplate,n);
+ numDecimals = divDecQ;
+ break;
+ }
+ }
+ // console.println("operation = " + o.value);
+ turnoff=false;
+ if (!useKeyPad) r.readonly=false;
+ mybegin=new Date();
+ try{ r.setFocus(); } catch(e) {}
+}
+function addDigit(n) {
+ if (oAlert.value != "") return;
+ switch (n) {
+ case "Enter":
+ var tmp_value=r.valueAsString;
+ this.resetForm(["result"]);
+ keypadInput=false;
+ r.value = tmp_value;
+ break;
+ case "Back":
+ keypadInput=true;
+ var tmp_value=r.valueAsString;
+ if (tmp_value != "")
+ r.value = tmp_value.substring(0,tmp_value.length-1);
+ break;
+ case "Dec":
+ keypadInput=true;
+ var v=r.valueAsString;
+ v = v + ".";
+ r.value = v;
+ break;
+ case "Minus":
+ keypadInput=true;
+ var v=r.valueAsString;
+ if (r.value < 0 ) {
+ v = String(Math.abs(v));
+ } else v = "-" + v;
+ r.value = v;
+ break;
+ default:
+ keypadInput=true;
+ v=r.valueAsString;
+ v = v + String(n);
+ r.value = v;
+ }
+}
+function ToggleKeyPad() {
+ useKeyPad = !useKeyPad;
+ if ( typeof fcMenu == "object") {
+ for (var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="1") fcMenu[i].bMarked=useKeyPad;
+ if (fcMenu[i].cReturn=="3") fcMenu[i].bEnabled=useKeyPad;
+ if (fcMenu[i].cReturn=="4") fcMenu[i].bEnabled=useKeyPad;
+ }
+ }
+ this.delay=true;
+ if (useKeyPad) {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.visible;
+ this.getField("Back").display=display.visible;
+ this.getField("Enter").display=display.visible;
+ this.getField("Dec").display=display.visible;
+ this.getField("Minus").display=display.visible;
+ this.getField("result").readonly=true;
+ } else {
+ for (var i=0; i<= 9; i++)
+ this.getField("num"+i).display=display.hidden;
+ this.getField("Back").display=display.hidden;
+ this.getField("Enter").display=display.hidden;
+ this.getField("Dec").display=display.hidden;
+ this.getField("Minus").display=display.hidden;
+ this.getField("result").readonly=false;
+ }
+ this.delay=false;
+ getFieldObjects();
+
+}
+\end{newsegment}
+\begin{newsegment}{Custom Keystroke for Numbers}
+function fcNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if (turnoff) return;
+ var v = t.valueAsString;
+ if ( v == "")
+ { event.rc=false; this.resetForm(["result"]); }
+ else
+ if ( event.value != "-" && event.value != ".")
+ AFNumber_Keystroke(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+function fcNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend) {
+ if ( !useKeyPad && event.value != "-" && event.value != ".")
+ AFNumber_Format(nDec,sepStyle,negStyle,currStyle,
+ strCurrency,bCurrencyPrepend);
+}
+\end{newsegment}
+\begin{newsegment}{Touch or Mouse Friendly}
+var aKPFieldNames=new Array ("num0",
+ "num1","num4","num7","Dec","Enter",
+ "num2","num5","num8","num3","num6","num9",
+ "Back","Minus");
+var _tDlt=\amtChngMouToTou;
+var bTouchFriendly=false;
+function makeTouchFriendly() {
+ if (!useKeyPad||bTouchFriendly) return;
+ bTouchFriendly=true;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch!=-1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]+2*_tDlt,tkpRect[1]+%
+4*_tDlt,tkpRect[2]+2*_tDlt,tkpRect[3]+4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0:
+ r=[r[0],r[1]+_tDlt,r[2]+2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]+2*_tDlt,r[2]+_tDlt,r[3]+_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]+3*_tDlt,r[2]+_tDlt,r[3]+2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]+4*_tDlt,r[2]+_tDlt,r[3]+3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]+2*_tDlt,r[1]+_tDlt,r[2]+3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]+3*_tDlt,r[1]+2*_tDlt,r[2]+4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]+_tDlt,r[1]+2*_tDlt,r[2]+2*_tDlt,r[3]+_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]+_tDlt,r[1]+3*_tDlt,r[2]+2*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]+_tDlt,r[1]+4*_tDlt,r[2]+2*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]+2*_tDlt,r[1]+2*_tDlt,r[2]+3*_tDlt,r[3]+_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]+2*_tDlt,r[1]+3*_tDlt,r[2]+3*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]+2*_tDlt,r[1]+4*_tDlt,r[2]+3*_tDlt,r[3]+3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]+3*_tDlt,r[1]+3*_tDlt,r[2]+4*_tDlt,r[3]+2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]+3*_tDlt,r[1]+4*_tDlt,r[2]+4*_tDlt,r[3]+3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+}
+function makeMouseFriendly() {
+ if (!useKeyPad||!bTouchFriendly) return;
+ bTouchFriendly=false;
+ var indexTouch=-1, indexMouse;
+ if ( typeof fcMenu == "object") {
+ for ( var i=0; i<fcMenu.length; i++) {
+ if (fcMenu[i].cReturn=="3") indexTouch=i;
+ if (fcMenu[i].cReturn=="4") indexMouse=i;
+ }
+ if (indexTouch != -1) {
+ fcMenu[indexTouch].bMarked=bTouchFriendly;
+ fcMenu[indexMouse].bMarked=!bTouchFriendly;
+ }
+ }
+ var r;
+ this.delay=true;
+ var TKP=this.getField("toggleKeyPadBtn");
+ var bMovTKP=(TKP!=null);
+ if (bMovTKP) {
+ var tkpRect=TKP.rect;
+ tkpRect=[tkpRect[0]-2*_tDlt,tkpRect[1]-%
+4*_tDlt,tkpRect[2]-2*_tDlt,tkpRect[3]-4*_tDlt];
+ TKP.rect=tkpRect;
+ }
+ for (var i=0; i<aKPFieldNames.length; i++) {
+ f=this.getField(aKPFieldNames[i]);
+ r=f.rect;
+ switch(i) {
+ case 0: // 0
+ r=[r[0],r[1]-_tDlt,r[2]-2*_tDlt,r[3]];
+ break;
+ case 1: // num1 left edge
+ r=[r[0],r[1]-2*_tDlt,r[2]-_tDlt,r[3]-_tDlt];
+ break;
+ case 2: // num4 left edge
+ r=[r[0],r[1]-3*_tDlt,r[2]-_tDlt,r[3]-2*_tDlt];
+ break;
+ case 3: // num7 left edge
+ r=[r[0],r[1]-4*_tDlt,r[2]-_tDlt,r[3]-3*_tDlt];
+ break;
+ case 4: // Dec
+ r=[r[0]-2*_tDlt,r[1]-_tDlt,r[2]-3*_tDlt,r[3]];
+ break;
+ case 5: // Enter lower edge
+ r=[r[0]-3*_tDlt,r[1]-2*_tDlt,r[2]-4*_tDlt,r[3]];
+ break;
+ case 6: // num2
+ r=[r[0]-_tDlt,r[1]-2*_tDlt,r[2]-2*_tDlt,r[3]-_tDlt];
+ break;
+ case 7: // num5
+ r=[r[0]-_tDlt,r[1]-3*_tDlt,r[2]-2*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 8: // num8
+ r=[r[0]-_tDlt,r[1]-4*_tDlt,r[2]-2*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 9: // num2
+ r=[r[0]-2*_tDlt,r[1]-2*_tDlt,r[2]-3*_tDlt,r[3]-_tDlt];
+ break;
+ case 10: // num6
+ r=[r[0]-2*_tDlt,r[1]-3*_tDlt,r[2]-3*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 11: // num9
+ r=[r[0]-2*_tDlt,r[1]-4*_tDlt,r[2]-3*_tDlt,r[3]-3*_tDlt];
+ break;
+ case 12: // Back (right edge)
+ r=[r[0]-3*_tDlt,r[1]-3*_tDlt,r[2]-4*_tDlt,r[3]-2*_tDlt];
+ break;
+ case 13: // Minus (right edge)
+ r=[r[0]-3*_tDlt,r[1]-4*_tDlt,r[2]-4*_tDlt,r[3]-3*_tDlt];
+ break;
+ }
+ f.rect=r;
+ }
+ this.delay=false;
+}
+\end{newsegment}
+\begin{newsegment}{Option Dialog Box}
+var fcDialog =
+{
+ // set a default value for radio button field
+ initialize: function(dialog) {
+ var addDT="AT0" + String(addDecT);
+ var addDB="AB0" + String(addDecB);
+ var subDT="ST0" + String(subDecT);
+ var subDB="SB0" + String(subDecB);
+ var mulDT="MT0" + String(mulDecT);
+ var mulDB="MB0" + String(mulDecB);
+ var divDQ="DQ0" + String(divDecQ);
+ var divDB="DB0" + String(divDecB);
+ var radioString = addDT +": true, " + addDB +": true, "
+ + subDT + ": true, " + subDB + ": true, "
+ + mulDT + ": true, " + mulDB + ": true, "
+ + divDQ + ": true, " + divDB + ": true ";
+//console.println("radioString="+radioString);
+ eval("dialog.load({" + radioString + "})");
+ dialog.load({
+ // Populate the addition first
+ "aT_a": util.printf("\%.0f",addT_a),
+ "aT_b": util.printf("\%.0f",addT_b),
+ "aB_a": util.printf("\%.0f",addB_a),
+ "aB_b": util.printf("\%.0f",addB_b),
+ // subtraction
+ "sT_a": util.printf("\%.0f",subT_a),
+ "sT_b": util.printf("\%.0f",subT_b),
+ "sB_a": util.printf("\%.0f",subB_a),
+ "sB_b": util.printf("\%.0f",subB_b),
+ "nsCB": fcAllowNegSub,
+ // multiplication
+ "mT_a": util.printf("\%.0f",mulT_a),
+ "mT_b": util.printf("\%.0f",mulT_b),
+ "mB_a": util.printf("\%.0f",mulB_a),
+ "mB_b": util.printf("\%.0f",mulB_b),
+ // division
+ "dQ_a": util.printf("\%.0f",divQ_a),
+ "dQ_b": util.printf("\%.0f",divQ_b),
+ "dB_a": util.printf("\%.0f",divB_a),
+ "dB_b": util.printf("\%.0f",divB_b)
+ });
+ },
+ // when user presses "Ok", this handler will execute first
+ commit: function(dialog) {
+ var results = dialog.store();
+ addT_a = Math.round(results["aT_a"]);
+ addT_b = Math.round(results["aT_b"]);
+ addB_a = Math.round(results["aB_a"]);
+ addB_b = Math.round(results["aB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["AT0"+i]) { addDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["AB0"+i]) { addDecB = i; break; }
+ // subtraction
+ subT_a = Math.round(results["sT_a"]);
+ subT_b = Math.round(results["sT_b"]);
+ subB_a = Math.round(results["sB_a"]);
+ subB_b = Math.round(results["sB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["ST0"+i]) { subDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["SB0"+i]) { subDecB = i; break; }
+ fcAllowNegSub = results["nsCB"];
+ // multiplication
+ mulT_a = Math.round(results["mT_a"]);
+ mulT_b = Math.round(results["mT_b"]);
+ mulB_a = Math.round(results["mB_a"]);
+ mulB_b = Math.round(results["mB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["MT0"+i]) { mulDecT = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["MB0"+i]) { mulDecB = i; break; }
+ // division
+ divQ_a = Math.round(results["dQ_a"]);
+ divQ_b = Math.round(results["dQ_b"]);
+ divB_a = Math.round(results["dB_a"]);
+ divB_b = Math.round(results["dB_b"]);
+ for (var i=0; i < 3; i++)
+ if (results["DQ0"+i]) { divDecQ = i; break; }
+ for (var i=0; i < 3; i++)
+ if (results["DB0"+i]) { divDecB = i; break; }
+ },
+ // The Dialog Description
+ description:
+ {
+ name: "PDF Flash Cards - Options",
+ align_children: "align_left",
+ elements:
+ [
+\bFCa
+ { // The Addition Cluster
+ type: "cluster",
+ name: "\fcAdditionName",
+ item_id: "add",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "aT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AT00",
+ group_id: "AddT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AT01",
+ group_id: "AddT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AT02",
+ group_id: "AddT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "addRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "aB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "addRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "aB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "aDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "AB00",
+ group_id: "AddB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "AB01",
+ group_id: "AddB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "AB02",
+ group_id: "AddB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Addition Cluster
+\eFCa
+\bFCs
+ { // The Subtraction Cluster
+ type: "cluster",
+ name: "\fcSubtractionName",
+ item_id: "sub",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "sT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "ST00",
+ group_id: "SubT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "ST01",
+ group_id: "SubT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "ST02",
+ group_id: "SubT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "subRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "sB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "subRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "sB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "sDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "SB00",
+ group_id: "SubB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "SB01",
+ group_id: "SubB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "SB02",
+ group_id: "SubB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+//--
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "nSub",
+ name: "\fcOptAllowNegNumber"
+ },
+ {
+ type:"check_box",
+ item_id: "nsCB"
+ }
+ ]
+ }
+//--
+ ]
+ }, // End Subtraction Cluster
+\eFCs
+\bFCm
+ { // The Multiplication Cluster
+ type: "cluster",
+ name: "\fcMultiplicationName",
+ item_id: "mul",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngT",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRange"
+ },
+ {
+ item_id: "mT_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mT_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcT",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MT00",
+ group_id: "MulT",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MT01",
+ group_id: "MulT",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MT02",
+ group_id: "MulT",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mulRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRange"
+ },
+ {
+ item_id: "mB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "mulRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "mB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "mDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "MB00",
+ group_id: "MulB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "MB01",
+ group_id: "MulB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "MB02",
+ group_id: "MulB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Multiplication Cluster
+\eFCm
+\bFCd
+ { // The Division Cluster
+ type: "cluster",
+ name: "\fcDivisionName",
+ item_id: "div",
+ align_children: "align_left",
+ elements:
+ [
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngQ",
+ width: \fcOptTextWidth,
+ name: "\fcOptTopRangeDiv"
+ },
+ {
+ item_id: "dQ_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToT",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dQ_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcQ",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DQ00",
+ group_id: "DivQ",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DQ01",
+ group_id: "DivQ",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DQ02",
+ group_id: "DivQ",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ },
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "divRngB",
+ width: \fcOptTextWidth,
+ name: "\fcOptBottomRangeDiv"
+ },
+ {
+ item_id: "dB_a",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "static_text",
+ item_id: "divRngToB",
+ name: "\fcOptTo"
+ },
+ {
+ item_id: "dB_b",
+ type: "edit_text",
+ alignment: "align_fill",
+ width: 40,
+ height: 20
+ },
+ {
+ type: "view",
+ align_children: "align_distribute",
+ elements:
+ [
+ {
+ type: "static_text",
+ item_id: "dDcB",
+ name: "\fcOptDecimal"
+ },
+ {
+ type: "radio",
+ item_id: "DB00",
+ group_id: "DivB",
+ name: "\fcOptDecimalNone"
+ },
+ {
+ type: "radio",
+ item_id: "DB01",
+ group_id: "DivB",
+ name: "1",
+ },
+ {
+ type: "radio",
+ item_id: "DB02",
+ group_id: "DivB",
+ name: "2",
+ },
+ ]
+ },
+ ]
+ }
+ ]
+ }, // End Division Cluster
+\eFCd
+ {
+ type: "view",
+ align_children: "align_row",
+ elements:
+ [
+ {
+ alignment: "align_right",
+ type: "ok_cancel",
+ }
+ ]
+ }
+ ]
+ }
+}
+\end{newsegment}
+\end{insDLJS*}
+\begin{insDLJS}[fcMenu]{fcmd}{Menu Data}
+\fcMenu
+function processFcMenu() {
+ if ( (typeof fcMenu == "object") && fcMenu.length!=0 ) {
+ var cChoice = \popUpMenu(fcMenu);
+ if ( cChoice != null ) {
+ switch(cChoice) {
+ case "0": app.execDialog(fcDialog);
+ break;
+ case "1": ToggleKeyPad();
+ break;
+ case "2": app.execMenuItem("GeneralInfo");
+ break;
+ case "3": makeTouchFriendly();
+ break;
+ case "4": makeMouseFriendly();
+ break;
+ default:
+ if ( typeof processCustomFcMenu == "function" )
+ processCustomFcMenu(cChoice);
+ return;
+ }
+ }
+ } else app.alert("\fcMenuFCMsg");
+}
+\end{insDLJS}
+\InputIfFileExists{fc_custom.def}{}{}
+\endinput
+%%
+%% End of file `fc_arith.sty'.
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf b/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf
new file mode 100644
index 00000000..baf098f0
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_ht1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf b/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf
new file mode 100644
index 00000000..a081a07b
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_nt1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf b/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf
new file mode 100644
index 00000000..0bbc55b1
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fdg_vt1.swf
Binary files differ
diff --git a/texmf-dist/tex/latex/fldigigal/fldigigal.cfg b/texmf-dist/tex/latex/fldigigal/fldigigal.cfg
new file mode 100644
index 00000000..8c5ba816
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fldigigal.cfg
@@ -0,0 +1,7 @@
+% fldigigal config file. Delete the \endinput below and replace the path
+% provided with the path to the swf folder of your fldigigal installation.
+% This path is used to locate the fldigigal SWF files.
+\endinput
+\renewcommand{\fdgFolder}{%
+ C:/Users/Public/Documents/My TeX Files/tex/latex/aeb/aebpro/fldigigal/swf}
+
diff --git a/texmf-dist/tex/latex/fldigigal/fldigigal.sty b/texmf-dist/tex/latex/fldigigal/fldigigal.sty
new file mode 100644
index 00000000..c00f1058
--- /dev/null
+++ b/texmf-dist/tex/latex/fldigigal/fldigigal.sty
@@ -0,0 +1,177 @@
+%%
+%% This is file `fldigigal.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fldigigal.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fldigigal.sty package, 2010-23-10 %%
+%% 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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{fldigigal}
+ [2010/12/29 v0.5c fldigigal: Create a Flash Digital Gallery, Acrobat Distiller only (dps)]
+\RequirePackage{xkeyval}
+\RequirePackage{rmannot}[2010/12/22]
+\newcommand{\fdgFolder}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/fldigigal/swf}
+\InputIfFileExists{fldigigal.cfg}{}{}
+\def\fdg@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\fdg@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+{\catcode`\#=12 \catcode`\&=12 \catcode`\!=6
+ \gdef\fdg@iso!1{&#!1;}
+}
+\define@key{fdgxml}{path}[]{\def\fdg@pa@path{#1}}
+\define@key{fdgxml}{caption}[]{\def\fdg@pa@caption{#1}}
+\define@boolkey{fdgxml}{online}[true]{}
+\setkeys{fdgxml}{path,caption,online=false}
+\newcount\cntdigis
+\def\fdg@cnt@images#1{\advance\cntdigis1 }
+\def\fdg@image#1{\begingroup
+ \let\Name\rma@resource\let\urlName\rma@urlresource
+ \setkeys{fdgxml}{#1}%
+ \global\advance\cntdigis1
+ \edef\@digiImgName{Im\the\cntdigis(\fdg@CurrDigiName)}%
+ \saveNamedPath{\@digiImgName}{\fdg@pa@path}%
+ \edef\fdg@NamedExp{\expandafter\Name\expandafter{\@digiImgName}}%
+ \ifx\fdg@pa@caption\@empty\def\fdg@pa@caption{\fdg@NamedExp}\fi
+ \ifKV@fdgxml@online
+ \edef\fdg@urlNamedExp{%
+ \expandafter\urlName\expandafter{\@digiImgName}}%
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@urlNamedExp</image>
+ }%
+ \else
+ \toks0=\expandafter{\fdg@embededResources}%
+ \ifx\fdg@embededResources\@empty
+ \xdef\fdg@embededResources{\@digiImgName}\else
+ \xdef\fdg@embededResources{\the\toks0,\@digiImgName}\fi
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@NamedExp</image>
+ }%
+ \fi
+\endgroup}
+\def\fdg@IWVO{\immediate\write\verbatim@out}
+\def\embededResources#1{\csname #1ERs\endcsname}
+\def\xmlListiv#1{xmlList4#1}
+\let\fdg@cntOf\@gobble
+\newcommand{\fdgcntOf}[1]{\space(#1 of \fdg@numDigis)}
+\define@boolkey{fdgXML}{showcount}[true]{%
+ \ifKV@fdgXML@showcount\let\fdg@cntOf\fdgcntOf\else
+ \let\fdg@cntOf\@gobble\fi
+}
+\define@boolkey{fdgXML}{nowrite}[true]{}
+\setkeys{fdgXML}{showcount=false,nowrite=false}
+\newcommand{\fdgXmlList}[3][]{%
+\begingroup
+ \setkeys{fdgXML}{#1}%
+ \ifKV@fdgXML@nowrite\let\fdg@IWVO\@gobble\fi
+ \cntdigis=0 \gdef\fdg@embededResources{}%
+ \ifKV@fdgXML@nowrite\else
+ \newwrite \fdg@writexmllist
+ \immediate\openout \fdg@writexmllist=#2.xml
+ \let\verbatim@out\fdg@writexmllist
+ \fi
+ \fdg@IWVO{<photos>}%
+ \@ifundefined{#2@fdgdigis}{%
+ \fdg@namegdef{#2@fdgdigis}{#2}%
+ \def\fdg@CurrDigiName{#2}%
+ }{\PackageError{fldigigal}{Name already chosen}}%
+ \let\image\fdg@cnt@images#3%
+ \edef\fdg@numDigis{\the\cntdigis}%
+ \def\'{&apos;}\let\iso\fdg@iso
+ \cntdigis=0 \let\image\fdg@image#3%
+ \fdg@IWVO{</photos>}%
+ \ifKV@fdgXML@nowrite\else
+ \immediate\closeout \fdg@writexmllist
+ \fi
+\endgroup
+ \saveNamedPath{xmlList4#2}{\pathToSource/#2.xml}%
+ \fdg@namexdef{#2ERs}{\ifx\fdg@embededResources\@empty\else,\fi
+ \fdg@embededResources}%
+}
+\@onlypreamble{\fdgXmlList}
+\define@key{fgRmAnnot}{flashvars}[]{\def\fgRmAnnot@flashvars{&#1}}
+\let\fgRmAnnot@flashvars\@empty
+\define@key{fgRmAnnot}{galleryopts}[]{\def\fgRmAnnot@galleryopts{#1}}
+\saveNamedPath{fdg_vt1}{\fdgFolder/fdg_vt1.swf}
+\saveNamedPath{fdg_ht1}{\fdgFolder/fdg_ht1.swf}
+\saveNamedPath{fdg_nt1}{\fdgFolder/fdg_nt1.swf}
+\saveNamedPath{custom}{\fdgFolder/fdg_vt1.swf}
+\define@choicekey+{fgGalleryOpts}{gallery}[\val\nr]%
+ {vthumbs1,hthumbs1,nothumbs1,custom}[vthumbs1]{%
+ \ifcase\nr\relax
+ \def\fgGalleryOpts@gallery{fdg_vt1}\or
+ \def\fgGalleryOpts@gallery{fdg_ht1}\or
+ \def\fgGalleryOpts@gallery{fdg_nt1}\or
+ \def\fgGalleryOpts@gallery{custom}\fi
+}{}
+\define@choicekey+{fgGalleryOpts}{trans}[\val\nr]%
+ {Blinds,Fade,Fly,Iris,Photo,PixelDissolve,Rotate,%
+ Squeeze,Wipe,Zoom,Random}[Random]{%
+ \edef\fgGalleryOpts@trans{\val}%
+}{}
+\let\fgGalleryOpts@trans\@empty
+\define@key{fgGalleryOpts}{delay}[6]{\def\fgGalleryOpts@delay{#1}}
+\let\fgGalleryOpts@delay\@empty
+\define@boolkey{fgGalleryOpts}{auto}[true]{%
+ \edef\fgGalleryOpts@auto{\ifKV@fgGalleryOpts@auto
+ true\else false\fi}}
+\define@boolkey{fgGalleryOpts}{transOn}[true]{%
+ \edef\fgGalleryOpts@transOn{\ifKV@fgGalleryOpts@transOn
+ true\else false\fi}}
+\define@choicekey+{fgGalleryOpts}{captionalign}[\val\nr]%
+ {left,right,center}[left]{%
+ \edef\fgGalleryOpts@captionalign{\val}%
+}{}
+\let\fgGalleryOpts@captionalign\@empty
+\define@boolkey{fgGalleryOpts}{nocaptions}[true]{%
+ \edef\fgGalleryOpts@nocaptions{\ifKV@fgGalleryOpts@nocaptions
+ true\else false\fi}}
+\define@key{fgGalleryOpts}{nocaptionstext}[]{%
+ \def\fgGalleryOpts@nocaptionstext{#1}}
+\setkeys{fgGalleryOpts}{gallery,transOn,auto=true,nocaptions=false,nocaptionstext}
+\newcommand{\fgRmAnnot}[2][]{\begingroup
+ \@ifundefined{#2@fdgdigis}%
+ {\PackageError{fldigigal}{The name `#2' is not defined
+ for\MessageBreak this \string\fgRmAnnot}{Gallery names
+ are defined using \string\fdgXmlList}}%
+ \setkeys*{fgRmAnnot}{#1}\edef\XKV@rm@saved{\XKV@rm}%
+ \edef\tmp@setkeysEx{\noexpand\setkeys{fgGalleryOpts}%
+ {\fgRmAnnot@galleryopts}}\tmp@setkeysEx
+ \edef\merged@flashvars{\fgRmAnnot@flashvars%
+ \ifKV@fgGalleryOpts@auto\else&%
+ auto=\fgGalleryOpts@auto\fi
+ \ifx\fgGalleryOpts@delay\@empty\else&%
+ delay=\fgGalleryOpts@delay\fi
+ \ifx\fgGalleryOpts@trans\@empty\else&%
+ transitionType=\fgGalleryOpts@trans\fi
+ \ifKV@fgGalleryOpts@transOn\else&%
+ transitionOn=\fgGalleryOpts@transOn\fi
+ \ifx\fgGalleryOpts@captionalign\@empty\else&%
+ captionalign=\fgGalleryOpts@captionalign\fi
+ \ifKV@fgGalleryOpts@nocaptions&%
+ nocaptions=\fgGalleryOpts@nocaptions%
+ \ifx\gGalleryOpts@nocaptionstext\@empty\else&%
+ nocaptionstext=\fgGalleryOpts@nocaptionstext\fi\fi
+ }%
+ \rmAnnot[\XKV@rm@saved,
+ flashvars={xmlPath=\Name{\xmlListiv{#2}}\merged@flashvars},%
+ resources={\xmlListiv{#2}\embededResources{#2}}%
+ ]{320bp}{240bp}{\fgGalleryOpts@gallery}%
+ \endgroup
+}
+\endinput
+%%
+%% End of file `fldigigal.sty'.