antsusage.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Thu, 05 Mar 2015 12:51:48 +0000
changeset 10 3dfa16523886
parent 4 ff72b00b4342
child 15 ebd8a4ddd7f2
permissions -rw-r--r--
whoosher version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#/usr/bin/perl
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    A N T S U S A G E . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    doc: Fri Jun 19 13:43:05 1998
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
     5
#                    dlm: Sat Jan 31 15:49:23 2015
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    (c) 1998 A.M. Thurnherr
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
     7
#                    uE-Info: 652 28 NIL 0 0 70 2 2 4 NIL ofnI
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
#	Dec 30, 1998: - removed directory from $0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#				  - added global -P option (pass comments)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#	Jan 02, 1999: - changed -P to -T and added -P)refix for [./fnr]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
# 	Feb 08,	1999: - added &antsUsageError()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#	Feb 17, 1999: - added -N
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
#	Feb 28, 1999: - forced string interpretation for -O, -R, -I
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
#	Mar 08, 1999: - added -L, $antsLibs
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
#	Mar 20, 1999: - added exit(1) for unknown options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
#				  - added optional argument to &antsUsageError()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
#	May 28, 1999: - library loading generated headers even on -Q
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
#	Jun 31, 1999: - added &antsDescription()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
#	Jul 31, 1999: - added parameter typechecking (field, float, card, int, file)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
#	Aug 02, 1999: - changed &antsDescription() to be option-dependent
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
#	Sep 18, 1999: - added option delimiter --
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
#				  - treat cardinals & integers differently
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
#				  - added option typechecking funs, e.g. &antsIntOpt()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
#				  - auto set -Q if stdout is tty
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
#	Sep 19, 1999: - changed &getopts() from Perl4 to Perl5
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
#	Sep 21, 1999: - load local libraries first
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
#	Mar 06, 2000: - added for-M)at
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
#	Mar 07, 2000: - worked on -M
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
#	Aug 24, 2000: - removed setting -Q on tty (bad for [yoyo] and [Split])
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
#	Aug 28, 2000: - added -Z
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
#				  - changed -P to -A
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
#				  - added new -P
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
#	Sep 19, 2000: - set opt_M (dodgily) if not specifically set (only affects
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
#					[count] so far)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
#	Sep 20, 2000: - added []-syntax to -P
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
#				  - added workaround for -M %0xd bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
#	Sep 25, 2000: - changed order of -P and -L processing
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
#	Sep 26, 2000: - cosmetics
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
#	Nov 13, 2000: - BUG: -- had left a single empty argument
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
#	Nov 15, 2000: - added &antsParamParam()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
#				  - added &antsFileOpt()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
#	Nov 17, 2000: - made -P override any header PARAMs
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
#	Jan  4, 2001: - moved -L processing before -P
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
#	Feb  8, 2001: - added -G)range option
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
#   Mar 17, 2001: - param->arg
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
#				  - added @file:field argument syntax
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
#				  - added #num-num[:step] syntax
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
#	Mar 23, 2001: - added prefix{#-#}suff syntax
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
#	Mar 31, 2001: - changed -G)range to #[..#]{,#[..#}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
#				  - added -F)ields f{,f}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
#	Apr  3, 2001: - added +f syntax to -F)ields
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
#	Apr  5, 2001: - added f+ syntax to -F)ields
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
#	Apr 24, 2001: - removed err msg in case of -G f:* (select numbers)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
#	Apr 30, 2001: - shortened date, added pwd
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
#	Jun 23, 2001: - removed default setting of $opt_M
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
#	Jul  6, 2001: - added degree notation to &antsFloatArg() via str2num()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
#	Jul 10, 2001: - added select field names (for V.3)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
#	Jul 13, 2001: - store ONLY field names (replaced on 1st use)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
#				  - added quotes to usage history
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
#	Jul 15, 2001: - added &antsNewFieldOpt()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
#	Jul 16, 2001: - made it work with Description again
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
#	Jul 24, 2001: - removed fnr lookup on -G
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
#	Jul 30, 2001: - BUG: made parseHeader conditional on $antsFixedFormat
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
#	Aug  9, 2001: - chgd pref{#-#}suff syntax to expand only to exist files
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
#	Oct 28, 2001: - BUG: added -K handling before parseHeader
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
#	Nov 22, 2001: - moved logic into &antsParseHeader()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
#	Nov 28, 2001: - cosmetics
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
#	Jan 18, 2002: - old -N => -X; new -N
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
#	Mar 24, 2002: - BUG: &antsFieldArg('file') did not handle %PARAMs correctly
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
#	Jul 26, 2002: - removed common usage from antsUsageError unless -U is set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
#	Jan  6, 2003: - added regexp option to -G
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
#	Feb  9, 2003: - BUG: {103-103}.ens hung
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
#	Jun 26, 2004: - made sure that near-zero \#args are rounded to zero
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
#	Jun 27, 2004: - BUG: \#22-14 did not work correctly any more
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
#	Jul 12, 2004: - removed &antsDescription()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
#	May  5, 2005: - added &antsNewField()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
#	May 17, 2005: - allowed &antsFieldArg() to check [Layout]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
#	Nov  1, 2005: - disallowed numeric options by adding -- if first argument
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
#				    begins with -[0-9]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
#	Nov  8, 2005: - removed -P, -T => -P, -Z => -T, added -Z
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
#	Nov 17, 2005: - removed $antsLibs
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
#				  - removed remainder of -D
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
#				  - added $antsARGV0 for [yoyo]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
#				  - added !<arg> quoting (for filenames)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
#	Nov 18, 2005: - finally allowed %PARAMs in -G
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
#	Nov 21, 2005: - BUG: had not been allowed in -G fieldname
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
#   Dec  7, 2005: - antsFName -> antsLayout (not tested)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
#	Dec  9, 2005: - Version 3.2 (see [HISTORY])
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
#	Dec 11, 2005: - error on 0 args & tty stdin
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
#	Dec 20, 2005: - created &antsFieldInFileArg() & added flag to &antsFieldArg
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
#				  - simplified opt_M, because it now works w/o $#
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
#	Dec 22, 2005: - added $antsInteractive for [abc]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
#   Dec 23, 2005: - replaced defined(@array) (c.f. perlfunc(1))
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
#	Dec 31, 2005: - BUG: @-notation was broken (used antique [fields]!!!)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
#	Jan  3, 2006: - added support for -S)elect
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
#	Jan  9, 2006: - removed old line-masking code
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
#	Jan 12, 2006: - removed -A support
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
#				  - removed support for $ENV{ANTS}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
#				  - changed from old -H)eader <skip> to -H)ead <n lines>
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
#	Jan 13, 2006: - moved -G handling to -S
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
#				  - BUG: -G regexpr did not allow :
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
#				  - renamed -T)rim to -C)anonical
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
#				  - removed warnings on -M/-C
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
#				  - removed weird -Z)ap
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
#	Jan 14, 2006: - removed -G (now handled by -S)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
#				  - changed semantics of pref{#-#}suff special arg to
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
#					expand non-existing file names
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
#	Jul 28, 2006: - made special arg #-#:# numerically more robust
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
#	Aug 18, 2006: - improved special arg to pref{#,#-#,...} and allow / instead of ,
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
#	Dec 14, 2006: - exported handling of -X to [antsio.pl]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   114
#				  - disallow -P & -Q
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   115
#	May 31, 2007: - added -G
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   116
#	Nov 28, 2007: - replaced / by + to separate ranges in {} arguments
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   117
#	Mar  4, 2008: - disallow partial fname matches in antsNewField*()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   118
#	Mar 24, 2008: - new usage formatting (glorious!)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   119
#	Mar 25, 2008: - added $antsSummary
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   120
#   Mar 26, 2008: - extended -F syntax
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   121
#	Mar 27, 2008: - modified &antsUsage() to allow disabling common options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   122
#	Apr 24, 2008: - added &antsFieldListOpt()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   123
#	May  7, 2008: - disabled -N/-S for utilities without header parsing
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   124
#	May 13, 2008: - moved -U to standard usage message
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   125
#	Aug  5, 2008: - suppress empty usage lines
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   126
#   Nov 12, 2008: - added opt_T
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   127
#	Aug 24, 2009: - added V4 dependency on @file:field special args, file args & opts
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   128
#	Oct  3, 2009: - BUG: sometime recently I had changed the pref{}suff semantics to be
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   129
#				    much more permissive; this led to problems as args like {print $0}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   130
#					were erroneously expanded; changed => pref{}suff is only expanded
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   131
#					if first expanded element is existing file
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   132
#				  - special args expanding to zilch are not expanded any more
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   133
#	Aug 16, 2010: - added -A)ctivate output (F/S Poseidon, P403, Lucky Strike)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   134
#	Aug 28, 2010: - added suppress -D)ependency check option
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   135
#				  - improve common-options usage help
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   136
#	Oct 15, 2010: - removed diagnostic output about loading libs
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   137
#	Oct 29, 2010: - replaced list by Cat in expansion of @-special args
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   138
#	Dec 21, 2010: - made $@ at end of -F list optional (i.e. -F can end with ,)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   139
#	Jul 21, 2011: - modified -D usage info
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   140
#	Sep 19, 2011: - SEMANTICS: pref{#-#}suff does now produce warning on missing files
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   141
#	Oct  3, 2011: - BUG: pref{}suff special args were (again) too permissive and matched
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   142
#						 output formats; this time, I solved problem by making regexp
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   143
#						 more restrictive; if this does not work, I can go back to
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   144
#					     earlier solution (see BUG Oct 3 2009)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   145
#	Oct 16, 2011: - added support for \, escape in -F to protect commas used, e.g. in
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   146
#					function calls, from splitting the opt_F argument string
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   147
#	Nov 11, 2011: - BUG: antsNewField did not work for external layouts
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   148
#	Dec 29, 2011: - BUG: antsNewField did not work Cat -f c=1,1,10 without input
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   149
#				  - BUG: antsNewField did still not work for external layouts (the bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   150
#						 resulted in always extending the layout, even when the field already
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   151
#						 existed)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   152
#	Feb 13, 2012: - antsNewFieldOpt simplified by using 2nd arg to fnrNoErr
3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   153
#	Oct 29, 2012: - diabled "no file" messages on special args
4
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   154
#	Mar 29, 2013: - added support for $ANTSLIBS
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   155
#	Apr  2, 2013: - BUG: pref{}suff special args did sometimes produce unexpanded as well
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   156
#						 as expanded output (unexpanded should be produced only if the
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   157
#						 expansion is empty)
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   158
#	Jan 30, 2015: - added &antsFunOpt()
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   159
#	Jan 31, 2015: - made it work
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   160
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   161
# NOTES:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   162
#	- ksh expands {}-arguments with commas in them!!! Use + instead
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   163
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   164
use Getopt::Std;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   165
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   166
sub antsUsageError() {									# die with Usage error
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   167
	if (defined($antsSummary)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   168
		print(STDERR "\n$0 -- $antsSummary\n\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   169
	} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   170
		print(STDERR "\n$0\n\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   171
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   172
	if ($opt_U) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   173
		print(STDERR "Options & Arguments: $antsCurUsage$_[0]\n\nCommon options:\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   174
			"\t[-F)ields {%P|f|[\$@]|[f]=expr}[,...]]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   175
			"\t[num for-M)at] [-C)anonical numbers] [-G)eographic lat/lon]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   176
			"\t[-A)ctivate output] [LaTeX -T)able output]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   177
			"\t[-S)elect <addr-expr>] [-N)ums f[,...]] [-H)ead <n lines>]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   178
			"\t[-P)ass comments] [-Q)uiet (no headers)] [-X (no new header)]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   179
			"\t[suppress -D)ependency checks & addition of new dependencies]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   180
			"\t[-L)oad <lib,...>]\n" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   181
			"\t[-I)n field-sep] [-O)ut field-sep] [-R)ecord sep]\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   182
	} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   183
		print(STDERR "Options & Arguments: $antsCurUsage$_[0]\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   184
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   185
	croak("\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   186
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   187
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   188
# NB: "-" as first char in opts string disables common-option processing
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   189
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   190
sub antsUsage($$@) {									# handle options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   191
	my($opts,$min,@usage) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   192
	my($cOpts) = 'ADM:QN:XCGPH:UI:O:R:L:F:S:T';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   193
	my($d,$p);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   194
	$antsCurUsage .= "\n\t[print full -U)sage]";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   195
	foreach my $uln (@usage) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   196
		$antsCurUsage .= "\n\t$uln"						# suppress emtpy, e.g.
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   197
			unless ($uln eq '');						# for interp. model usage
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   198
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   199
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   200
	&antsUsageError()									# no args && tty stdin
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   201
		if (!$antsInteractive && $min == 0 && @ARGV == 0 && -t 0);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   202
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   203
	unshift(@ARGV,'--') if ($ARGV[0] =~ /^-\d/);		# -ve number heuristics
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   204
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   205
	chomp($0 = `basename $0`);							# set scriptname
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   206
	chop($d = `date +%D`);								# build header line
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   207
	chop($p = `pwd`);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   208
	$p = "..." . substr($p,-17) if (length($p) > 20);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   209
	$antsCurHeader = "#ANTS# [$d $p] $0";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   210
	my($i,$eoo);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   211
	for ($i=0; $i<=$#ARGV; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   212
		$antsCurHeader .= " '$ARGV[$i]'";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   213
		$eoo = 1 if ($ARGV[$i] eq '--');				# -- handling
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   214
		$ARGV[$i] = "!$ARGV[$i+1]" if ($eoo); 			# make -ve non-options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   215
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   216
	$antsCurHeader .= "\n";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   217
	pop(@ARGV) if ($eoo);								# remove last ARG
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   218
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   219
	if ($opts =~ m{^-}) {								# no common options processing
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   220
		$opts = $';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   221
		undef($cOpts);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   222
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   223
	&antsUsageError(), exit(1)							# parse options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   224
		unless (&getopts($cOpts . $opts));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   225
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   226
	unless ($antsParseHeader) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   227
		croak("$0: -S not supported (implementation restriction)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   228
			if defined($opt_S);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   229
		croak("$0: -N not supported (implementation restriction)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   230
			if defined($opt_N);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   231
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   232
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   233
	if ($eoo) {											# reset args
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   234
		for ($i=0; $i<=$#ARGV; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   235
			$ARGV[$i] = substr($ARGV[$i],1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   236
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   237
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   238
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   239
	if (defined($cOpts)) {								# process common options
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   240
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   241
		croak("$0: illegal option combination (-P & -Q)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   242
			if ($opt_P && $opt_Q);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   243
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   244
		&antsActivateOut() if ($opt_A);					# activate output
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   245
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   246
		if ($opt_T) {									# LaTeX table output
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   247
			croak("$0: illegal option combination (-T & -G)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   248
				if ($opt_G);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   249
			croak("$0: illegal option combination (-T & -O)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   250
				if defined($opt_O);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   251
			$opt_O = ' & ';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   252
			croak("$0: illegal option combination (-T & -R)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   253
				if defined($opt_R);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   254
			$opt_R = ' \\\\\\\\\n';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   255
        }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   256
        
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   257
		if (defined($opt_I)) {							# defaults
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   258
			eval('$opt_I = "' . $opt_I .'";');			# interpret strings 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   259
		} else {										# ... as perl strings
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   260
			$opt_I = '\s+';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   261
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   262
		if (defined($opt_O)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   263
			eval('$opt_O = "' . $opt_O .'";');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   264
		} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   265
			$opt_O = "\t";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   266
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   267
		if (defined($opt_R)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   268
			eval('$opt_R = "' . $opt_R .'";');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   269
		} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   270
			$opt_R = "\n";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   271
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   272
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   273
		if (defined($opt_L)) {							# load libraries
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   274
			foreach $lib (split(',',$opt_L)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   275
				if (-r "lib$lib.pl") {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   276
					require "lib$lib.pl";
4
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   277
				} elsif (-r "$ANTS/lib$lib.pl") {
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   278
					require "$ANTS/lib$lib.pl";
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   279
				} elsif (-r "$ANTSLIBS/lib$lib.pl") {
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   280
					require "$ANTSLIBS/lib$lib.pl";
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   281
				} else {
4
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   282
					croak("$0: cannot load {.,$ANTS,$ANTSLIBS}/lib$lib.pl\n");
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   283
				}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   284
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   285
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   286
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   287
		if (defined($opt_N)) {							# parse -N)ums
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   288
			@antsNFNames = split(',',$opt_N);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   289
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   290
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   291
		if (defined($opt_F)) {							# parse -F)ields
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   292
			$opt_F =~ s/\\,/aNtScOmMa/g;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   293
			@antsOutExprs = split(',',$opt_F);	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   294
			push(@antsOutExprs,'$@') if ($opt_F =~ /,$/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   295
			foreach my $e (@antsOutExprs) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   296
				$e =~ s/aNtScOmMa/,/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   297
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   298
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   299
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   300
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   301
	my($ai);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   302
	for ($ai=0; $ai<=$#ARGV; $ai++) {					# parse special args
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   303
		my(@exp);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   304
		if ($ARGV[$ai] =~ /^@([^:]+):(.+)/) {			# @file:field
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   305
			&antsAddDeps($1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   306
			@exp = `Cat -QF$2 $1`;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   307
			croak("(...while expanding $ARGV[$ai])\n") if ($?);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   308
		} elsif ($ARGV[$ai] =~ /^#(-?[\d\.]+)-(-?[\d\.]+):?(-?[\d\.]+)?/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   309
			my($step) = 1;								# #num-num:step
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   310
			if (defined($3)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   311
				$step = $3;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   312
			} elsif ($2 < $1) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   313
				$step = -1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   314
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   315
			if ($step > 0) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   316
				for (my($c)=0,my($i)=$1; $i<=$2+$step/1e6; $c++,$i=$1+$c*$step) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   317
					$i = 0 if (abs($i) < abs($step) / 1e6);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   318
					push(@exp,$i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   319
				}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   320
			} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   321
				for (my($c)=0,my($i)=$1; $i>=$2+$step/1e6; $c++,$i=$1+$c*$step) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   322
					$i = 0 if (abs($i) < abs($step) / 1e6);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   323
					push(@exp,$i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   324
				}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   325
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   326
#		} elsif ($ARGV[$ai] =~ m{\{([^\}]+)\}}) {		# pref{list of ranges}suff
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   327
		} elsif ($ARGV[$ai] =~ m{\{([-\+,\d]+)\}}) {	# pref{list of ranges}suff
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   328
			my($pref) = $`; my($suff) = $';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   329
			foreach my $range (split('[,\+]',$1)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   330
				if ($range =~ /^(\d+)-(\d+)$/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   331
					my($fmt) = length($1)==length($2) ?
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   332
							   sprintf("$pref%%0%dd$suff",length($1)) : "$pref%d$suff";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   333
					if ($2 > $1) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   334
						for (my($i)=$1; $i<=$2; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   335
							my($f) = sprintf($fmt,$i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   336
							if (-f $f) { push(@exp,$f); }
3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   337
#							else { &antsInfo("$ARGV[$ai]: no file <$f>"); }
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   338
						}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   339
					} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   340
						for (my($i)=$1; $i>=$2; $i--) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   341
							my($f) = sprintf($fmt,$i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   342
							if (-f $f) { push(@exp,$f); }
3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   343
#							else { &antsInfo("$ARGV[$ai]: no file <$f>"); }
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   344
	                    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   345
	                }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   346
				} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   347
					my($f) = "$pref$range$suff";
4
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   348
#					print(STDERR "f = $pref . $range . $suff\n");
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   349
					if (-f $f) { push(@exp,$f); }
3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   350
#					else { &antsInfo("$ARGV[$ai]: no file <$f>"); }
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   351
	            }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   352
	        }
4
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   353
			@exp = ($ARGV[$ai])							# make sure it *was* special arg
ff72b00b4342 after adding $pi and some other stuff
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   354
				unless (@exp);
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   355
		} else {										# regular argument
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   356
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   357
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   358
		&antsInfo("WARNING: special arg $ARGV[$ai] expands to nothing"),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   359
		push(@exp,$ARGV[$ai])
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   360
			unless ($#exp >= 0);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   361
		splice(@ARGV,$ai,1,@exp);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   362
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   363
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   364
	my($nargs) = $#ARGV + 1;							# check arg count
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   365
	&antsUsageError() if ($opt_U || ($min > 0) && ($nargs < $min));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   366
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   367
	$antsARGV0 = $ARGV[0];								# save 1st filename
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   368
	&antsParseHeader();									# get fields & params
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   369
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   370
	for (my($i)=0; $i<=$#ARGV; $i++) {					# remove leading ! from args
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   371
		$ARGV[$i] =~ s/^!//;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   372
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   373
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   374
	return $nargs;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   375
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   376
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   377
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   378
# argument typechecking
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   379
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   380
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   381
sub antsFieldInFileArg($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   382
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   383
	my($fn) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   384
	my($fnr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   385
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   386
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   387
	open(F,$fn) || croak("$fn: $!\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   388
	if ($ARGV[0] =~ /^%/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   389
		croak("$0: no PARAM $ARGV[0] in $fn\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   390
			unless (defined(&antsFileScanParam(F,$')));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   391
		$fnr = $ARGV[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   392
	} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   393
		$fnr = &antsFileScanFnr(F,$ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   394
		unless (defined($fnr)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   395
			print(STDERR "$0: WARNING: no field $ARGV[0] in $fn\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   396
			$fnr = &fnr($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   397
		}	    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   398
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   399
    close(F);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   400
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   401
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   402
	return $fnr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   403
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   404
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   405
sub antsFieldArg($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   406
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   407
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   408
	my($paramsAllowed) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   409
	my($fnr) = &fnr($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   410
	croak("$0: $ARGV[0] is not a field\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   411
		unless (numberp($fnr) || $paramsAllowed);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   412
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   413
	return $fnr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   414
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   415
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   416
sub antsFieldOpt(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   417
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   418
	my($opt,$default) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   419
	if (ref($opt)) {									# reference => set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   420
		if (defined(${$opt})) {							# defined => check,set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   421
			${$opt} = &fnr(${$opt});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   422
		} elsif (defined($default)) {					# not defined => default
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   423
			${$opt} = &fnr($default);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   424
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   425
		return ${$opt};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   426
	} else {											# not ref => do not set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   427
		return defined($opt) ? &fnr($opt) :
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   428
					defined($default) ? &fnr($default) : $opt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   429
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   430
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   431
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   432
sub antsFieldListOpt($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   433
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   434
	my($opt) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   435
	my(@fn) = split(',',$opt);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   436
	my(@fi);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   437
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   438
	for (my($i)=0; $i<@fn; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   439
		$fi[$i] = &fnr($fn[$i]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   440
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   441
	return @fi;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   442
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   443
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   444
sub antsNewField($)										# allocate if needed
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   445
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   446
	my($fname) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   447
	my($fnr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   448
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   449
	$fnr = &fnrNoErr($fname,1);							# exact match
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   450
	unless (defined($fnr)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   451
		return $antsBufNFields++						# external layout
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   452
			unless ($antsBufNFields==0 || @antsLayout);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   453
		@antsNewLayout = @antsLayout
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   454
			unless (@antsNewLayout);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   455
		push(@antsNewLayout,$fname);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   456
		$fnr = $#antsNewLayout;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   457
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   458
	$antsBufNFields = $fnr+1 if ($fnr >= $antsBufNFields);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   459
	return $fnr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   460
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   461
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   462
sub antsNewFieldOpt(@)									# allocate if does not exist
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   463
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   464
	my($opt,$default) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   465
	my($fname,$fnr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   466
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   467
	if (ref($opt)) {									# reference => set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   468
		if (defined(${$opt})) {							# defined => check,set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   469
			$fname = ${$opt};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   470
		} elsif (defined($default)) {					# not defined => default
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   471
			$fname = $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   472
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   473
		if (defined($fname)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   474
			$fnr = &antsNewField($fname);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   475
			${$opt} = $fnr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   476
			return $fnr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   477
		} else { return undef; }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   478
	} else {											# not ref => do not set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   479
		if (defined($opt)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   480
			$fname = $opt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   481
		} elsif (defined($default)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   482
			$fname = $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   483
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   484
		return defined($fname) ? &antsNewField($fname) : undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   485
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   486
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   487
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   488
sub antsNoFileErr($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   489
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   490
	croak("$0: $_[0] $_[1] is not a valid file\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   491
		unless (-r $_[1]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   492
	&antsAddDeps($_[1]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   493
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   494
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   495
sub antsFileArg()	# arg 1 => do not shift
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   496
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   497
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   498
	&antsNoFileErr("Argument",$ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   499
	my($res) = $ARGV[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   500
	shift(@ARGV) unless ($_[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   501
	return $res;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   502
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   503
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   504
sub antsFileOpt($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   505
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   506
	my($opt) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   507
	&antsNoFileErr("Option Argument",$opt)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   508
		if (defined($opt));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   509
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   510
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   511
sub antsParamArg()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   512
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   513
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   514
	croak("$0: Argument $ARGV[0] is not a valid PARAM\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   515
		unless ($ARGV[0] =~ /^%/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   516
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   517
	return $';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   518
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   519
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   520
sub antsNoCardErr($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   521
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   522
	croak("$0: $_[0] $_[1] is not a cardinal number\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   523
		unless (cardinalp($_[1]));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   524
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   525
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   526
sub antsCardArg()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   527
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   528
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   529
	$ARGV[0] = &{&antsCompileConstExpr($')}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   530
		if ($ARGV[0] =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   531
	&antsNoCardErr("Argument",$ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   532
	my($res) = 1.0*$ARGV[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   533
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   534
	return $res;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   535
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   536
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   537
sub antsCardOpt(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   538
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   539
	my($opt,$default) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   540
	if (ref($opt)) {									# reference => set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   541
		if (defined(${$opt})) {							# defined => check
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   542
			$$opt = &{&antsCompileConstExpr($')} if ($$opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   543
			&antsNoCardErr("Option Argument",${$opt});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   544
		} else {										# not defined => default
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   545
			${$opt} = $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   546
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   547
		return ${$opt};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   548
	} else {											# not ref => do not set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   549
		if (defined($opt)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   550
			$opt = &{&antsCompileConstExpr($')} if ($opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   551
			&antsNoCardErr("Option Argument",$opt);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   552
	        return $opt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   553
	    } else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   554
	    	return $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   555
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   556
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   557
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   558
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   559
sub antsNoIntErr($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   560
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   561
	croak("$0: $_[0] $_[1] is not an integer\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   562
		unless (integerp($_[1]));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   563
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   564
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   565
sub antsIntArg()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   566
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   567
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   568
	$ARGV[0] = &{&antsCompileConstExpr($')}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   569
		if ($ARGV[0] =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   570
	&antsNoIntErr("Argument",$ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   571
	my($res) = 1.0*$ARGV[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   572
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   573
	return $res;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   574
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   575
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   576
sub antsIntOpt(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   577
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   578
	my($opt,$default) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   579
	if (ref($opt)) {									# reference => set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   580
		if (defined(${$opt})) {							# defined => check
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   581
			$$opt = &{&antsCompileConstExpr($')} if ($$opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   582
			&antsNoIntErr("Option Argument",${$opt});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   583
		} else {										# not defined => default
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   584
			${$opt} = $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   585
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   586
		return ${$opt};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   587
	} else {											# not ref => do not set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   588
		if (defined($opt)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   589
			$opt = &{&antsCompileConstExpr($')} if ($opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   590
			&antsNoIntErr("Option Argument",$opt);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   591
	        return $opt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   592
	    } else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   593
	    	return $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   594
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   595
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   596
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   597
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   598
sub antsNoFloatErr($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   599
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   600
	croak("$0: $_[0] $_[1] is not a number\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   601
		unless (numberp($_[1]));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   602
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   603
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   604
sub antsFloatArg()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   605
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   606
	&antsUsageError() unless defined($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   607
	$ARGV[0] = &{&antsCompileConstExpr($')}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   608
		if ($ARGV[0] =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   609
	my($res) = str2num($ARGV[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   610
	&antsNoFloatErr("Argument",$res);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   611
	shift(@ARGV);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   612
	return $res;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   613
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   614
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   615
sub antsFloatOpt(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   616
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   617
	my($opt,$default) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   618
	if (ref($opt)) {									# reference => set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   619
		if (defined(${$opt})) {							# defined => check
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   620
			$$opt = &{&antsCompileConstExpr($')} if ($$opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   621
			&antsNoFloatErr("Option Argument",${$opt});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   622
		} else {										# not defined => default
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   623
			${$opt} = $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   624
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   625
		return ${$opt};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   626
	} else {											# not ref => do not set
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   627
		if (defined($opt)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   628
			$opt = &{&antsCompileConstExpr($')} if ($opt =~ m{^=});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   629
			&antsNoFloatErr("Option Argument",$opt);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   630
	        return $opt;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   631
	    } else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   632
	    	return $default;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   633
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   634
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   635
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   636
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   637
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   638
# antsFunOpt(\$opt_x) parses the contents of $opt_x as follows:
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   639
#
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   640
#	name(value)	=> $opt_x = 'name'; $name = "value";
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   641
#	name		=> no change
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   642
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   643
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   644
sub antsFunOpt(@)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   645
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   646
	my($opt) = @_;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   647
	return unless defined($opt);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   648
	croak("antsusage.pl: antsFunOpt(@_): argument is not a ref\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   649
		unless ref($opt);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   650
	my($name,$param) = (${$opt} =~ m{^([^\)]+)\(([^\)]+)\)$});
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   651
	return unless defined($param);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   652
	eval(sprintf('$%s = "%s";',$name,$param));
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   653
	${$opt} = $name;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   654
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 4
diff changeset
   655
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   656
1;														# return true