diff options
Diffstat (limited to 'lib/parsearg.rb')
-rw-r--r-- | lib/parsearg.rb | 103 |
1 files changed, 59 insertions, 44 deletions
diff --git a/lib/parsearg.rb b/lib/parsearg.rb index e7e2b7a7f3..569ed260f7 100644 --- a/lib/parsearg.rb +++ b/lib/parsearg.rb @@ -1,68 +1,83 @@ +#!/usr/local/bin/ruby # -# parseargs.rb - parse arguments +# parsearg.rb - parse arguments # $Release Version: $ # $Revision: 1.3 $ -# $Date: 1994/02/15 05:16:21 $ -# by Yasuo OHBA(STAFS Development Room) +# $Date: 1996/11/12 06:48:51 $ +# by Yasuo OHBA(SHL Japan Inc. Technology Dept.) # # -- -# �����̉�͂���, $OPT_?? �ɒl���Z�b�g���܂�. -# ����I�������ꍇ��, �Z�b�g���ꂽ�I�v�V�����̐���Ԃ��܂�. # -# parseArgs(argc, single_opts, *opts) -# -# ex. sample [options] filename -# options ... -# -f -x --version --geometry 100x200 -d unix:0.0 -# �� -# parseArgs(1, nil, "fx", "version", "geometry:", "d:") -# -# ������: -# �I�v�V�����ȊO�̍Œ�����̐� -# ������: -# �I�v�V�����̕K�v���c�K���K�v�Ȃ� %TRUE �����łȂ���� %FALSE. -# ��O����: -# -f �� -x (= -fx) �̗l�Ȉꕶ���̃I�v�V�����̎w������܂�. -# �����ň������Ȃ��Ƃ��� nil �̎w�肪�K�v�ł�. -# ��l�����ȍ~: -# �����O�l�[���̃I�v�V������, �����̔����I�v�V�����̎w������܂�. -# --version ��, --geometry 300x400 ��, -d host:0.0 ���ł�. -# �������w��� ":" ��K���t���Ă�������. -# -# �I�v�V�����̎w�肪�������ꍇ, �ϐ� $OPT_?? �� non-nil ��������, ���̃I -# �v�V�����̈������Z�b�g����܂�. -# -f -> $OPT_f = %TRUE -# --geometry 300x400 -> $OPT_geometry = 300x400 -# -# usage ���g�������ꍇ��, $USAGE �� usage() ���w�肵�܂�. -# def usage() -# �c -# end -# $USAGE = 'usage' -# usage ��, --help ���w�肳�ꂽ��, �Ԉ�����w����������ɕ\�����܂�. -# -# - �������� -- ��, ����ȍ~, �S�ăI�v�V�����̉�͂����܂���. +# # -$RCS_ID="$Header: /var/ohba/RCS/parseargs.rb,v 1.3 1994/02/15 05:16:21 ohba Exp ohba $" +$RCS_ID="$Header: /home/jammy/current/ruby/RCS/parsearg.rb,v 1.3 1996/11/12 06:48:51 jammy Exp $" load("getopts.rb") def printUsageAndExit() if $USAGE - apply($USAGE) + eval($USAGE) end exit() end +def setParenthesis(ex, opt, c) + if opt != "" + ex = sprintf("%s$OPT_%s%s", ex, opt, c) + else + ex = sprintf("%s%s", ex, c) + end + return ex +end + +def setOrAnd(ex, opt, c) + if opt != "" + ex = sprintf("%s$OPT_%s %s%s ", ex, opt, c, c) + else + ex = sprintf("%s %s%s ", ex, c, c) + end + return ex +end + +def setExpression(ex, opt, op) + if !op + ex = sprintf("%s$OPT_%s", ex, opt) + return ex + end + case op.chr + when "(", ")" + ex = setParenthesis(ex, opt, op.chr) + when "|", "&" + ex = setOrAnd(ex, opt, op.chr) + else + return nil + end + return ex +end + def parseArgs(argc, nopt, single_opts, *opts) - if ((noOptions = getopts(single_opts, *opts)) == nil) + if (noOptions = getopts(single_opts, *opts)) == nil printUsageAndExit() end - if (nopt && noOptions == 0) - printUsageAndExit() + if nopt + ex = nil + pos = 0 + for o in nopt.split(/[()|&]/) + pos += o.length + ex = setExpression(ex, o, nopt[pos]) + pos += 1 + end + begin + if !eval(ex) + printUsageAndExit() + end + rescue + print "Format Error!! : \"" + nopt + "\"\t[parseArgs]\n" + exit! -1 + end end - if ($ARGV.length < argc) + if ARGV.length < argc printUsageAndExit() end return noOptions |