Mercurial > repos > vandelj > giant_plot_functions
annotate src/getopt.R @ 0:488e6e8bb8cb draft
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
| author | vandelj | 
|---|---|
| date | Fri, 26 Jun 2020 09:41:56 -0400 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 0 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 1 # Copyright (c) 2008-2010 Allen Day | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 2 # Copyright (c) 2011-2013 Trevor L. Davis <trevor.l.davis@stanford.edu> | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 3 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 4 # Modified by J.Vandel 2017 to consider situation of multiple identical flag | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 5 # and concatenate as a vector the set of parameter for the same flag instead of | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 6 # keeping only the last value as done by the previous version. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 7 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 8 # This file is free software: you may copy, redistribute and/or modify it | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 9 # under the terms of the GNU General Public License as published by the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 10 # Free Software Foundation, either version 2 of the License, or (at your | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 11 # option) any later version. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 12 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 13 # This file is distributed in the hope that it will be useful, but | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 14 # WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 16 # General Public License for more details. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 17 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 18 # You should have received a copy of the GNU General Public License | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 19 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 20 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 21 #' C-like getopt behavior | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 22 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 23 #' getopt is primarily intended to be used with ``\link{Rscript}''. It | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 24 #' facilitates writing ``\#!'' shebang scripts that accept short and long | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 25 #' flags/options. It can also be used from ``R'' directly, but is probably less | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 26 #' useful in this context. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 27 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 28 #' getopt() returns a \link{list} data structure containing \link{names} of the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 29 #' flags that were present in the \link{character} \link{vector} passed in under | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 30 #' the \emph{opt} argument. Each value of the \link{list} is coerced to the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 31 #' data type specified according to the value of the \emph{spec} argument. See | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 32 #' below for details. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 33 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 34 #' Notes on naming convention: | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 35 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 36 #' 1. An \emph{option} is one of the shell-split input strings. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 37 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 38 #' 2. A \emph{flag} is a type of \emph{option}. a \emph{flag} can be defined as | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 39 #' having no \emph{argument} (defined below), a required \emph{argument}, or an | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 40 #' optional \emph{argument}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 41 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 42 #' 3. An \emph{argument} is a type of \emph{option}, and is the value associated | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 43 #' with a flag. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 44 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 45 #' 4. A \emph{long flag} is a type of \emph{flag}, and begins with the string | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 46 #' ``--''. If the \emph{long flag} has an associated \emph{argument}, it may be | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 47 #' delimited from the \emph{long flag} by either a trailing \emph{=}, or may be | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 48 #' the subsequent \emph{option}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 49 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 50 #' 5. A \emph{short flag} is a type of \emph{flag}, and begins with the string | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 51 #' ``-''. If a \emph{short flag} has an associated \emph{argument}, it is the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 52 #' subsequent \emph{option}. \emph{short flags} may be bundled together, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 53 #' sharing a single leading ``-'', but only the final \emph{short flag} is able | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 54 #' to have a corresponding \emph{argument}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 55 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 56 #' Many users wonder whether they should use the getopt package, optparse package, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 57 #' or argparse package. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 58 #' Here is some of the major differences: | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 59 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 60 #' Features available in \code{getopt} unavailable in \code{optparse} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 61 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 62 #' 1. As well as allowing one to specify options that take either | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 63 #' no argument or a required argument like \code{optparse}, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 64 #' \code{getopt} also allows one to specify option with an optional argument. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 65 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 66 #' Some features implemented in \code{optparse} package unavailable in \code{getopt} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 67 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 68 #' 1. Limited support for capturing positional arguments after the optional arguments | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 69 #' when \code{positional_arguments} set to TRUE in \code{parse_args} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 70 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 71 #' 2. Automatic generation of an help option and printing of help text when encounters an "-h" | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 72 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 73 #' 3. Option to specify default arguments for options as well the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 74 #' variable name to store option values | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 75 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 76 #' There is also new package \code{argparse} introduced in 2012 which contains | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 77 #' all the features of both getopt and optparse but which has a dependency on | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 78 #' Python 2.7 or 3.2+ and has not been used in production since 2008 or 2009 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 79 #' like the getopt and optparse packages. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 80 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 81 #' Some Features unlikely to be implemented in \code{getopt}: | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 82 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 83 #' 1. Support for multiple, identical flags, e.g. for "-m 3 -v 5 -v", the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 84 #' trailing "-v" overrides the preceding "-v 5", result is v=TRUE (or equivalent | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 85 #' typecast). | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 86 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 87 #' 2. Support for multi-valued flags, e.g. "--libpath=/usr/local/lib | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 88 #' --libpath=/tmp/foo". | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 89 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 90 #' 3. Support for lists, e.g. "--define os=linux --define os=redhat" would | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 91 #' set result$os$linux=TRUE and result$os$redhat=TRUE. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 92 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 93 #' 4. Support for incremental, argument-less flags, e.g. "/path/to/script | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 94 #' -vvv" should set v=3. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 95 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 96 #' 5. Support partial-but-unique string match on options, e.g. "--verb" and | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 97 #' "--verbose" both match long flag "--verbose". | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 98 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 99 #' 6. No support for mixing in positional arguments or extra arguments that | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 100 #' don't match any options. For example, you can't do "my.R --arg1 1 foo bar | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 101 #' baz" and recover "foo", "bar", "baz" as a list. Likewise for "my.R foo | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 102 #' --arg1 1 bar baz". | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 103 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 104 #' @aliases getopt getopt-package | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 105 #' @param spec The getopt specification, or spec of what options are considered | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 106 #' valid. The specification must be either a 4-5 column \link{matrix}, or a | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 107 #' \link{character} \link{vector} coercible into a 4 column \link{matrix} using | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 108 #' \link{matrix}(x,ncol=4,byrow=TRUE) command. The \link{matrix}/\link{vector} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 109 #' contains: | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 110 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 111 #' Column 1: the \emph{long flag} name. A multi-\link{character} string. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 112 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 113 #' Column 2: \emph{short flag} alias of Column 1. A single-\link{character} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 114 #' string. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 115 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 116 #' Column 3: \emph{Argument} mask of the \emph{flag}. An \link{integer}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 117 #' Possible values: 0=no argument, 1=required argument, 2=optional argument. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 118 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 119 #' Column 4: Data type to which the \emph{flag}'s argument shall be cast using | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 120 #' \link{storage.mode}. A multi-\link{character} string. This only considered | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 121 #' for same-row Column 3 values of 1,2. Possible values: \link{logical}, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 122 #' \link{integer}, \link{double}, \link{complex}, \link{character}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 123 #' If \link{numeric} is encountered then it will be converted to double. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 124 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 125 #' Column 5 (optional): A brief description of the purpose of the option. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 126 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 127 #' The terms \emph{option}, \emph{flag}, \emph{long flag}, \emph{short flag}, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 128 #' and \emph{argument} have very specific meanings in the context of this | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 129 #' document. Read the ``Description'' section for definitions. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 130 #' @param opt This defaults to the return value of \link{commandArgs}(TRUE). | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 131 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 132 #' If R was invoked directly via the ``R'' command, this corresponds to all | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 133 #' arguments passed to R after the ``--args'' flag. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 134 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 135 #' If R was invoked via the ``\link{Rscript}'' command, this corresponds to all | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 136 #' arguments after the name of the R script file. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 137 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 138 #' Read about \link{commandArgs} and \link{Rscript} to learn more. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 139 #' @param command The string to use in the usage message as the name of the | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 140 #' script. See argument \emph{usage}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 141 #' @param usage If TRUE, argument \emph{opt} will be ignored and a usage | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 142 #' statement (character string) will be generated and returned from \emph{spec}. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 143 #' @param debug This is used internally to debug the getopt() function itself. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 144 #' @author Allen Day | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 145 #' @seealso \code{\link{getopt}} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 146 #' @keywords data | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 147 #' @export | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 148 #' @examples | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 149 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 150 #' #!/path/to/Rscript | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 151 #' library('getopt'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 152 #' #get options, using the spec as defined by the enclosed list. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 153 #' #we read the options from the default: commandArgs(TRUE). | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 154 #' spec = matrix(c( | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 155 #' 'verbose', 'v', 2, "integer", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 156 #' 'help' , 'h', 0, "logical", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 157 #' 'count' , 'c', 1, "integer", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 158 #' 'mean' , 'm', 1, "double", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 159 #' 'sd' , 's', 1, "double" | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 160 #' ), byrow=TRUE, ncol=4); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 161 #' opt = getopt(spec); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 162 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 163 #' # if help was asked for print a friendly message | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 164 #' # and exit with a non-zero error code | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 165 #' if ( !is.null(opt$help) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 166 #' cat(getopt(spec, usage=TRUE)); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 167 #' q(status=1); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 168 #' } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 169 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 170 #' #set some reasonable defaults for the options that are needed, | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 171 #' #but were not specified. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 172 #' if ( is.null(opt$mean ) ) { opt$mean = 0 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 173 #' if ( is.null(opt$sd ) ) { opt$sd = 1 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 174 #' if ( is.null(opt$count ) ) { opt$count = 10 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 175 #' if ( is.null(opt$verbose ) ) { opt$verbose = FALSE } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 176 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 177 #' #print some progress messages to stderr, if requested. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 178 #' if ( opt$verbose ) { write("writing...",stderr()); } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 179 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 180 #' #do some operation based on user input. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 181 #' cat(paste(rnorm(opt$count,mean=opt$mean,sd=opt$sd),collapse="\n")); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 182 #' cat("\n"); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 183 #' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 184 #' #signal success and exit. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 185 #' #q(status=0); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 186 getopt = function (spec=NULL,opt=commandArgs(TRUE),command=get_Rscript_filename(),usage=FALSE,debug=FALSE) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 187 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 188 # littler compatibility - map argv vector to opt | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 189 if (exists("argv", where = .GlobalEnv, inherits = FALSE)) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 190 opt = get("argv", envir = .GlobalEnv); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 191 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 192 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 193 ncol=4; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 194 maxcol=6; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 195 col.long.name = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 196 col.short.name = 2; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 197 col.has.argument = 3; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 198 col.mode = 4; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 199 col.description = 5; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 200 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 201 flag.no.argument = 0; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 202 flag.required.argument = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 203 flag.optional.argument = 2; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 204 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 205 result = list(); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 206 result$ARGS = vector(mode="character"); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 207 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 208 #no spec. fail. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 209 if ( is.null(spec) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 210 stop('argument "spec" must be non-null.'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 211 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 212 #spec is not a matrix. attempt to coerce, if possible. issue a warning. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 213 } else if ( !is.matrix(spec) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 214 if ( length(spec)/4 == as.integer(length(spec)/4) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 215 warning('argument "spec" was coerced to a 4-column (row-major) matrix. use a matrix to prevent the coercion'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 216 spec = matrix( spec, ncol=ncol, byrow=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 217 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 218 stop('argument "spec" must be a matrix, or a character vector with length divisible by 4, rtfm.'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 219 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 220 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 221 #spec is a matrix, but it has too few columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 222 } else if ( dim(spec)[2] < ncol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 223 stop(paste('"spec" should have at least ",ncol," columns.',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 224 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 225 #spec is a matrix, but it has too many columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 226 } else if ( dim(spec)[2] > maxcol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 227 stop(paste('"spec" should have no more than ",maxcol," columns.',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 228 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 229 #spec is a matrix, and it has some optional columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 230 } else if ( dim(spec)[2] != ncol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 231 ncol = dim(spec)[2]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 232 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 233 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 234 #sanity check. make sure long names are unique, and short names are unique. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 235 if ( length(unique(spec[,col.long.name])) != length(spec[,col.long.name]) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 236 stop(paste('redundant long names for flags (column ',col.long.name,').',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 237 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 238 if ( length(na.omit(unique(spec[,col.short.name]))) != length(na.omit(spec[,col.short.name])) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 239 stop(paste('redundant short names for flags (column ',col.short.name,').',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 240 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 241 # convert numeric type to double type | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 242 spec[,4] <- gsub("numeric", "double", spec[,4]) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 243 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 244 # if usage=TRUE, don't process opt, but generate a usage string from the data in spec | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 245 if ( usage ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 246 ret = ''; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 247 ret = paste(ret,"Usage: ",command,sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 248 for ( j in 1:(dim(spec))[1] ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 249 ret = paste(ret,' [-[-',spec[j,col.long.name],'|',spec[j,col.short.name],']',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 250 if (spec[j,col.has.argument] == flag.no.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 251 ret = paste(ret,']',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 252 } else if (spec[j,col.has.argument] == flag.required.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 253 ret = paste(ret,' <',spec[j,col.mode],'>]',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 254 } else if (spec[j,col.has.argument] == flag.optional.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 255 ret = paste(ret,' [<',spec[j,col.mode],'>]]',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 256 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 257 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 258 # include usage strings | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 259 if ( ncol >= 5 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 260 max.long = max(apply(cbind(spec[,col.long.name]),1,function(x)length(strsplit(x,'')[[1]]))); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 261 ret = paste(ret,"\n",sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 262 for (j in 1:(dim(spec))[1] ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 263 ret = paste(ret,sprintf(paste(" -%s|--%-",max.long,"s %s\n",sep=''), | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 264 spec[j,col.short.name],spec[j,col.long.name],spec[j,col.description] | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 265 ),sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 266 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 267 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 268 else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 269 ret = paste(ret,"\n",sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 270 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 271 return(ret); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 272 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 273 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 274 #XXX check spec validity here. e.g. column three should be convertible to integer | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 275 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 276 i = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 277 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 278 while ( i <= length(opt) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 279 if ( debug ) print(paste("processing",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 280 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 281 current.flag = 0; #XXX use NA | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 282 optstring = opt[i]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 283 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 284 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 285 #long flag | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 286 if ( substr(optstring, 1, 2) == '--' ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 287 if ( debug ) print(paste(" long option:",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 288 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 289 optstring = substring(optstring,3); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 290 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 291 this.flag = NA; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 292 this.argument = NA; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 293 kv = strsplit(optstring, '=')[[1]]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 294 if ( !is.na(kv[2]) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 295 this.flag = kv[1]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 296 this.argument = paste(kv[-1], collapse="="); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 297 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 298 this.flag = optstring; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 299 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 300 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 301 rowmatch = grep( this.flag, spec[,col.long.name],fixed=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 302 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 303 #long flag is invalid, matches no options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 304 if ( length(rowmatch) == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 305 stop(paste('long flag "', this.flag, '" is invalid', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 306 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 307 #long flag is ambiguous, matches too many options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 308 } else if ( length(rowmatch) > 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 309 # check if there is an exact match and use that | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 310 rowmatch = which(this.flag == spec[,col.long.name]) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 311 if(length(rowmatch) == 0) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 312 stop(paste('long flag "', this.flag, '" is ambiguous', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 313 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 314 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 315 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 316 #if we have an argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 317 if ( !is.na(this.argument) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 318 #if we can't accept the argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 319 if ( spec[rowmatch, col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 320 stop(paste('long flag "', this.flag, '" accepts no arguments', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 321 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 322 #otherwise assign the argument to the flag | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 323 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 324 storage.mode(this.argument) = spec[rowmatch, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 325 #don't need here to remove the last value of the vector as argument is in the same string as | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 326 #the flag name "--flag=argument" so no spurious TRUE was added | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 327 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],this.argument); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 328 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 329 next; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 330 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 331 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 332 #otherwise, we don't have an argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 333 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 334 #if we require an argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 335 ###if ( spec[rowmatch, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 336 ### stop(paste('long flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 337 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 338 #long flag has no attached argument. set flag as present. set current.flag so we can peek ahead later and consume the argument if it's there | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 339 ###} else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 340 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 341 current.flag = rowmatch; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 342 ###} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 343 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 344 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 345 #short flag(s) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 346 } else if ( substr(optstring, 1, 1) == '-' ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 347 if ( debug ) print(paste(" short option:",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 348 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 349 these.flags = strsplit(optstring,'')[[1]]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 350 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 351 done = FALSE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 352 for ( j in 2:length(these.flags) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 353 this.flag = these.flags[j]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 354 rowmatch = grep( this.flag, spec[,col.short.name],fixed=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 355 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 356 #short flag is invalid, matches no options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 357 if ( length(rowmatch) == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 358 stop(paste('short flag "', this.flag, '" is invalid', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 359 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 360 #short flag is ambiguous, matches too many options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 361 } else if ( length(rowmatch) > 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 362 stop(paste('short flag "', this.flag, '" is ambiguous', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 363 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 364 #short flag has an argument, but is not the last in a compound flag string | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 365 } else if ( j < length(these.flags) & spec[rowmatch,col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 366 stop(paste('short flag "', this.flag, '" requires an argument, but has none', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 367 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 368 #short flag has no argument, flag it as present | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 369 } else if ( spec[rowmatch,col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 370 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 371 done = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 372 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 373 #can't definitively process this flag yet, need to see if next option is an argument or not | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 374 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 375 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 376 current.flag = rowmatch; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 377 done = FALSE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 378 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 379 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 380 if ( done ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 381 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 382 next; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 383 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 384 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 385 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 386 #invalid opt | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 387 if ( current.flag == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 388 stop(paste('"', optstring, '" is not a valid option, or does not support an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 389 #TBD support for positional args | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 390 #if ( debug ) print(paste('"', optstring, '" not a valid option. It is appended to getopt(...)$ARGS', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 391 #result$ARGS = append(result$ARGS, optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 392 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 393 # some dangling flag, handle it | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 394 } else if ( current.flag > 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 395 if ( debug ) print(' dangling flag'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 396 if ( length(opt) > i ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 397 peek.optstring = opt[i + 1]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 398 if ( debug ) print(paste(' peeking ahead at: "',peek.optstring,'"',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 399 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 400 #got an argument. attach it, increment the index, and move on to the next option. we don't allow arguments beginning with '-' UNLESS | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 401 #specfile indicates the value is an "integer" or "double", in which case we allow a leading dash (and verify trailing digits/decimals). | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 402 if ( substr(peek.optstring, 1, 1) != '-' | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 403 #match negative double | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 404 ( substr(peek.optstring, 1, 1) == '-' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 405 & regexpr('^-[0123456789]*\\.?[0123456789]+$',peek.optstring) > 0 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 406 & spec[current.flag, col.mode]== 'double' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 407 ) | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 408 #match negative integer | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 409 ( substr(peek.optstring, 1, 1) == '-' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 410 & regexpr('^-[0123456789]+$',peek.optstring) > 0 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 411 & spec[current.flag, col.mode]== 'integer' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 412 ) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 413 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 414 if ( debug ) print(paste(' consuming argument *',peek.optstring,'*',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 415 storage.mode(peek.optstring) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 416 #remove the last argument put in result for current.flag that should be a TRUE and concatenate argument with previous ones | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 417 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]][-length(result[[spec[current.flag, col.long.name]]])],peek.optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 418 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 419 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 420 #a lone dash | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 421 } else if ( substr(peek.optstring, 1, 1) == '-' & length(strsplit(peek.optstring,'')[[1]]) == 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 422 if ( debug ) print(' consuming "lone dash" argument'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 423 storage.mode(peek.optstring) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 424 #remove the last argument put in result for current.flag that should be a TRUE and concatenate argument with previous ones | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 425 result[[spec[current.flag, col.long.name]]] =c(result[[spec[current.flag, col.long.name]]][-length(result[[spec[current.flag, col.long.name]]])],peek.optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 426 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 427 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 428 #no argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 429 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 430 if ( debug ) print(' no argument!'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 431 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 432 #if we require an argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 433 if ( spec[current.flag, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 434 stop(paste('flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 435 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 436 #otherwise set flag as present. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 437 } else if ( | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 438 spec[current.flag, col.has.argument] == flag.optional.argument | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 439 spec[current.flag, col.has.argument] == flag.no.argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 440 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 441 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 442 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 443 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 444 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 445 stop(paste("This should never happen.", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 446 "Is your spec argument correct? Maybe you forgot to set", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 447 "ncol=4, byrow=TRUE in your matrix call?")); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 448 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 449 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 450 #trailing flag without required argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 451 } else if ( spec[current.flag, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 452 stop(paste('flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 453 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 454 #trailing flag without optional argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 455 } else if ( spec[current.flag, col.has.argument] == flag.optional.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 456 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 457 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 458 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 459 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 460 #trailing flag without argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 461 } else if ( spec[current.flag, col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 462 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 463 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 464 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 465 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 466 stop("this should never happen (2). please inform the author."); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 467 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 468 #no dangling flag, nothing to do. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 469 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 470 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 471 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 472 i = i+1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 473 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 474 return(result); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 475 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 476 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 477 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 478 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 479 ######################### | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 480 #set a modified version using only long named parameters | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 481 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 482 getoptLong = function (spec=NULL,opt=commandArgs(TRUE),command=get_Rscript_filename(),usage=FALSE,debug=FALSE) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 483 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 484 # littler compatibility - map argv vector to opt | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 485 if (exists("argv", where = .GlobalEnv, inherits = FALSE)) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 486 opt = get("argv", envir = .GlobalEnv); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 487 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 488 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 489 ncol=4; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 490 maxcol=6; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 491 col.long.name = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 492 #col.short.name = 2; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 493 col.has.argument = 3; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 494 col.mode = 4; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 495 col.description = 5; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 496 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 497 flag.no.argument = 0; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 498 flag.required.argument = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 499 flag.optional.argument = 2; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 500 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 501 result = list(); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 502 result$ARGS = vector(mode="character"); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 503 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 504 #no spec. fail. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 505 if ( is.null(spec) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 506 stop('argument "spec" must be non-null.'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 507 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 508 #spec is not a matrix. attempt to coerce, if possible. issue a warning. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 509 } else if ( !is.matrix(spec) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 510 if ( length(spec)/4 == as.integer(length(spec)/4) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 511 warning('argument "spec" was coerced to a 4-column (row-major) matrix. use a matrix to prevent the coercion'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 512 spec = matrix( spec, ncol=ncol, byrow=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 513 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 514 stop('argument "spec" must be a matrix, or a character vector with length divisible by 4, rtfm.'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 515 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 516 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 517 #spec is a matrix, but it has too few columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 518 } else if ( dim(spec)[2] < ncol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 519 stop(paste('"spec" should have at least ",ncol," columns.',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 520 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 521 #spec is a matrix, but it has too many columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 522 } else if ( dim(spec)[2] > maxcol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 523 stop(paste('"spec" should have no more than ",maxcol," columns.',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 524 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 525 #spec is a matrix, and it has some optional columns. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 526 } else if ( dim(spec)[2] != ncol ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 527 ncol = dim(spec)[2]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 528 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 529 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 530 #sanity check. make sure long names are unique, and short names are unique. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 531 if ( length(unique(spec[,col.long.name])) != length(spec[,col.long.name]) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 532 stop(paste('redundant long names for flags (column ',col.long.name,').',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 533 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 534 # if ( length(na.omit(unique(spec[,col.short.name]))) != length(na.omit(spec[,col.short.name])) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 535 # stop(paste('redundant short names for flags (column ',col.short.name,').',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 536 # } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 537 # convert numeric type to double type | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 538 spec[,4] <- gsub("numeric", "double", spec[,4]) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 539 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 540 # if usage=TRUE, don't process opt, but generate a usage string from the data in spec | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 541 if ( usage ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 542 ret = ''; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 543 ret = paste(ret,"Usage: ",command,sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 544 for ( j in 1:(dim(spec))[1] ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 545 ret = paste(ret,' [-[-',spec[j,col.long.name],']',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 546 if (spec[j,col.has.argument] == flag.no.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 547 ret = paste(ret,']',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 548 } else if (spec[j,col.has.argument] == flag.required.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 549 ret = paste(ret,' <',spec[j,col.mode],'>]',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 550 } else if (spec[j,col.has.argument] == flag.optional.argument) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 551 ret = paste(ret,' [<',spec[j,col.mode],'>]]',sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 552 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 553 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 554 # include usage strings | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 555 if ( ncol >= 5 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 556 max.long = max(apply(cbind(spec[,col.long.name]),1,function(x)length(strsplit(x,'')[[1]]))); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 557 ret = paste(ret,"\n",sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 558 for (j in 1:(dim(spec))[1] ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 559 ret = paste(ret,sprintf(paste("--%-",max.long,"s %s\n",sep='') | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 560 ,spec[j,col.long.name],spec[j,col.description] | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 561 ),sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 562 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 563 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 564 else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 565 ret = paste(ret,"\n",sep=''); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 566 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 567 return(ret); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 568 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 569 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 570 #XXX check spec validity here. e.g. column three should be convertible to integer | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 571 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 572 i = 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 573 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 574 while ( i <= length(opt) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 575 if ( debug ) print(paste("processing",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 576 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 577 current.flag = 0; #XXX use NA | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 578 optstring = opt[i]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 579 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 580 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 581 #long flag | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 582 if ( substr(optstring, 1, 2) == '--' ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 583 if ( debug ) print(paste(" long option:",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 584 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 585 optstring = substring(optstring,3); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 586 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 587 this.flag = NA; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 588 this.argument = NA; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 589 kv = strsplit(optstring, '=')[[1]]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 590 if ( !is.na(kv[2]) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 591 this.flag = kv[1]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 592 this.argument = paste(kv[-1], collapse="="); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 593 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 594 this.flag = optstring; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 595 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 596 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 597 rowmatch = grep( this.flag, spec[,col.long.name],fixed=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 598 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 599 #long flag is invalid, matches no options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 600 if ( length(rowmatch) == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 601 stop(paste('long flag "', this.flag, '" is invalid', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 602 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 603 #long flag is ambiguous, matches too many options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 604 } else if ( length(rowmatch) > 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 605 # check if there is an exact match and use that | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 606 rowmatch = which(this.flag == spec[,col.long.name]) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 607 if(length(rowmatch) == 0) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 608 stop(paste('long flag "', this.flag, '" is ambiguous', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 609 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 610 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 611 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 612 #if we have an argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 613 if ( !is.na(this.argument) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 614 #if we can't accept the argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 615 if ( spec[rowmatch, col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 616 stop(paste('long flag "', this.flag, '" accepts no arguments', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 617 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 618 #otherwise assign the argument to the flag | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 619 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 620 storage.mode(this.argument) = spec[rowmatch, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 621 #don't need here to remove the last value of the vector as argument is in the same string as | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 622 #the flag name "--flag=argument" so no spurious TRUE was added | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 623 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],this.argument); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 624 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 625 next; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 626 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 627 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 628 #otherwise, we don't have an argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 629 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 630 #if we require an argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 631 ###if ( spec[rowmatch, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 632 ### stop(paste('long flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 633 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 634 #long flag has no attached argument. set flag as present. set current.flag so we can peek ahead later and consume the argument if it's there | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 635 ###} else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 636 result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 637 current.flag = rowmatch; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 638 ###} | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 639 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 640 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 641 #short flag(s) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 642 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 643 #else if ( substr(optstring, 1, 1) == '-' ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 644 # if ( debug ) print(paste(" short option:",opt[i])); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 645 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 646 # these.flags = strsplit(optstring,'')[[1]]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 647 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 648 # done = FALSE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 649 # for ( j in 2:length(these.flags) ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 650 # this.flag = these.flags[j]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 651 # rowmatch = grep( this.flag, spec[,col.short.name],fixed=TRUE ); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 652 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 653 # #short flag is invalid, matches no options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 654 # if ( length(rowmatch) == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 655 # stop(paste('short flag "', this.flag, '" is invalid', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 656 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 657 # #short flag is ambiguous, matches too many options | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 658 # } else if ( length(rowmatch) > 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 659 # stop(paste('short flag "', this.flag, '" is ambiguous', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 660 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 661 # #short flag has an argument, but is not the last in a compound flag string | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 662 # } else if ( j < length(these.flags) & spec[rowmatch,col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 663 # stop(paste('short flag "', this.flag, '" requires an argument, but has none', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 664 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 665 # #short flag has no argument, flag it as present | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 666 # } else if ( spec[rowmatch,col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 667 # result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 668 # done = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 669 # | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 670 # #can't definitively process this flag yet, need to see if next option is an argument or not | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 671 # } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 672 # result[[spec[rowmatch, col.long.name]]] = c(result[[spec[rowmatch, col.long.name]]],TRUE); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 673 # current.flag = rowmatch; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 674 # done = FALSE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 675 # } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 676 # } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 677 # if ( done ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 678 # i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 679 # next; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 680 # } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 681 # } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 682 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 683 #invalid opt | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 684 if ( current.flag == 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 685 stop(paste('"', optstring, '" is not a valid option, or does not support an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 686 #TBD support for positional args | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 687 #if ( debug ) print(paste('"', optstring, '" not a valid option. It is appended to getopt(...)$ARGS', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 688 #result$ARGS = append(result$ARGS, optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 689 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 690 # some dangling flag, handle it | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 691 } else if ( current.flag > 0 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 692 if ( debug ) print(' dangling flag'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 693 if ( length(opt) > i ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 694 peek.optstring = opt[i + 1]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 695 if ( debug ) print(paste(' peeking ahead at: "',peek.optstring,'"',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 696 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 697 #got an argument. attach it, increment the index, and move on to the next option. we don't allow arguments beginning with '-' UNLESS | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 698 #specfile indicates the value is an "integer" or "double", in which case we allow a leading dash (and verify trailing digits/decimals). | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 699 if ( substr(peek.optstring, 1, 1) != '-' | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 700 #match negative double | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 701 ( substr(peek.optstring, 1, 1) == '-' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 702 & regexpr('^-[0123456789]*\\.?[0123456789]+$',peek.optstring) > 0 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 703 & spec[current.flag, col.mode]== 'double' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 704 ) | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 705 #match negative integer | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 706 ( substr(peek.optstring, 1, 1) == '-' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 707 & regexpr('^-[0123456789]+$',peek.optstring) > 0 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 708 & spec[current.flag, col.mode]== 'integer' | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 709 ) | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 710 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 711 if ( debug ) print(paste(' consuming argument *',peek.optstring,'*',sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 712 storage.mode(peek.optstring) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 713 #remove the last argument put in result for current.flag that should be a TRUE and concatenate argument with previous ones | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 714 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]][-length(result[[spec[current.flag, col.long.name]]])],peek.optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 715 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 716 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 717 #a lone dash | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 718 } else if ( substr(peek.optstring, 1, 1) == '-' & length(strsplit(peek.optstring,'')[[1]]) == 1 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 719 if ( debug ) print(' consuming "lone dash" argument'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 720 storage.mode(peek.optstring) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 721 #remove the last argument put in result for current.flag that should be a TRUE and concatenate argument with previous ones | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 722 result[[spec[current.flag, col.long.name]]] =c(result[[spec[current.flag, col.long.name]]][-length(result[[spec[current.flag, col.long.name]]])],peek.optstring); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 723 i = i + 1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 724 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 725 #no argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 726 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 727 if ( debug ) print(' no argument!'); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 728 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 729 #if we require an argument, bail out | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 730 if ( spec[current.flag, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 731 stop(paste('flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 732 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 733 #otherwise set flag as present. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 734 } else if ( | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 735 spec[current.flag, col.has.argument] == flag.optional.argument | | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 736 spec[current.flag, col.has.argument] == flag.no.argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 737 ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 738 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 739 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 740 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 741 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 742 stop(paste("This should never happen.", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 743 "Is your spec argument correct? Maybe you forgot to set", | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 744 "ncol=4, byrow=TRUE in your matrix call?")); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 745 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 746 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 747 #trailing flag without required argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 748 } else if ( spec[current.flag, col.has.argument] == flag.required.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 749 stop(paste('flag "', this.flag, '" requires an argument', sep='')); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 750 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 751 #trailing flag without optional argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 752 } else if ( spec[current.flag, col.has.argument] == flag.optional.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 753 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 754 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 755 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 756 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 757 #trailing flag without argument | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 758 } else if ( spec[current.flag, col.has.argument] == flag.no.argument ) { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 759 x = TRUE; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 760 storage.mode(x) = spec[current.flag, col.mode]; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 761 result[[spec[current.flag, col.long.name]]] = c(result[[spec[current.flag, col.long.name]]],x); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 762 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 763 stop("this should never happen (2). please inform the author."); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 764 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 765 #no dangling flag, nothing to do. | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 766 } else { | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 767 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 768 | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 769 i = i+1; | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 770 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 771 return(result); | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 772 } | 
| 
488e6e8bb8cb
"planemo upload for repository https://github.com/juliechevalier/GIANT/tree/master commit cb276a594444c8f32e9819fefde3a21f121d35df"
 vandelj parents: diff
changeset | 773 | 
