utashiro@sran84.sra.co.jp (Kazumasa Utashiro) (03/16/91)
This is a perl library to generate a usage string which is used combined with &Getopts function. --utashiro@sra.co.jp #!/usr/local/bin/perl require('getopts.pl'); #require('usage.pl'); $option = 'deg:u:s:'; @arglist = ( 'd::debug', 'g:group', 'u:user:user name', ); &Getopts($option); print &Usage($0, $option, 'file ...', @arglist); exit; ;#------------------------------------------------------------ ;# usage.pl: make a string for usage line. ;# by K. Utashiro <utashiro@sra.co.jp> on Fri Sep 7 1990 ;# Revised by utashiro on Sat Mar 16 1991 ;# ;# Syntax: &Usage($command, $option, $trailer, @arglist); ;# $command: command name (maybe $0) ;# $option: option string same as &Getopt ;# $trailer: trailer string (optional) ;# @arglist: description for options which takes argument (optional) ;# format is "option character : argument : description" ;# where argument and description are optional ;# ;# &Usage returns list of two strings where 1st string is for usage ;# line and 2nd is for description. ;# ;# Example: ;# $option = 'deg:u:s:'; ;# @arglist = ('d::debug', 'g:group', 'u:user:user name'); ;# unless (&Getopts($option)) { ;# print &Usage($0, $option, 'file ...', @arglist); ;# exit(1); ;# } ;# ;# Result: ;# usage: sample [ -d ] [ -e ] [ -g group ] [ -u user ] [ -s : ] file ... ;# -d debug ;# -u user user name ;# sub Usage { package usage; local($cmd, $opt, $trailer, @arglist, %optarg) = @_; for(@arglist) { ($name, $arg, $desc) = split(/:/, $_, 3); $optarg{$name} = $arg if $arg; $optdesc{$name} = $desc if $desc; } $cmd =~ s#.*/##; local(@list) = ("usage:", $cmd); while ($opt =~ /^\s*(.)(:?)/) { push(@list, "[", "-$1"); $2 && push(@list, $optarg{$1} || $2); push(@list, "]"); $opt = $'; } push(@list, "$trailer\n"); $usage = join(' ', @list); if (defined(%optdesc)) { for(keys %optdesc) { $l = length($optarg{$_}); $max < $l && ($max=$l); } $format = sprintf("\t-%%s %%-%ds %%s\n", $max); for(sort keys %optdesc) { $description .= sprintf($format, $_, $optarg{$_}, $optdesc{$_}); } } ($usage, $description); } 1; ;#------------------------------------------------------------