\def\getargsversionnumber{v1.01}
\ProvidesPackage{getargs}
[2016/05/20 \getargsversionnumber\
Macro to parse an argument list, using user-specified parsing character]
% CREATED BY Steven B. Segletes <[email protected]>
% THIS PACKAGE IS RELEASED IN ACCORDANCE WITH THE LaTeX PUBLIC PROJECT LICENSE
% LPPL v1.3c (http://ctan.org/license/lppl1.3) OR ITS SUCCESSORS

% V1.00-Initial release
\newcounter{getarg@ctr}
\let\getargs\relax
\newcommand\getargs{}

\newcommand\setparsechar[1]{%
 \def\getargparsechar{#1}%
 \renewcommand{\getargs}[1]{%
   \setcounter{getarg@ctr}{0}%
   \parse@args##1#1\relax\relax%
 }%
 \def\parse@args##1#1##2\relax{%
   \stepcounter{getarg@ctr}%
   \expandafter\gdef\csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname{##1}%
   \ifx\relax##2\relax%
     \expandafter\xdef\csname n\getarg@root\endcsname{\thegetarg@ctr}\else%
       \parse@args##2\relax\fi%
 }%
}

\newcommand\setparserootname[1][arg]{\def\getarg@root{#1}}

\let\showargs\relax
\newcommand\showargs[1][t]{%
 \fboxrule=.7pt\relax\fboxsep=\dimexpr-.5pt-\fboxrule\relax%
 \csname n\getarg@root\endcsname{} \textbackslash\getarg@root\ldots{} items %
   \if x#1(expanded)\else (tokens)\fi%
 : \showargs@help{#1}{1}{\csname n\getarg@root\endcsname}\unskip\fbox{\strut}.%
}

\newcommand\showargs@help[3]{%
 \setcounter{getarg@ctr}{#2}%
 \if x#1%
   \fbox{\strut}\csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname%
   \hskip0pt\relax%
 \else
   \fbox{\strut}%
     \expandafter\detokenize\expandafter\expandafter\expandafter{%
     \csname\getarg@root\romannumeral\value{getarg@ctr}\endcsname}\hskip0pt\relax%
 \fi
 \ifnum\value{getarg@ctr}<#3\relax\stepcounter{getarg@ctr}%
   \showargs@help{#1}{\thegetarg@ctr}{#3}%
 \fi%
}

\setparserootname
\setparsechar{,}
\endinput