harzi@toybox:~/g/o/goldenderp-bin $ mkgetopts "$(mkvgenerate-imdb -D declared_option_string)" opt "$(./mkvgenerate-imdb_goldenderp -D declared_option_string)" if [ "$opt" = "q" ] ; then opt_q="1" elif [ "$opt" = "h" ] ; then opt_h="1" elif [ "$opt" = "V" ] ; then opt_V="1" elif [ "$opt" = "D" ] ; then opt_D="1" D_arg="$OPTARG" elif [ "x$opt" = "x-" ] ; then break elif [ "$opt" = "p" ] ; then opt_p="1" elif [ "$opt" = "d" ] ; then opt_d="1" elif [ "$opt" = "g" ] ; then opt_g="1" elif [ "$opt" = "x" ] ; then opt_x="1" elif [ "$opt" = "w" ] ; then opt_w="1" elif [ "$opt" = "o" ] ; then opt_o="1" o_arg="$OPTARG" elif [ "$opt" = "O" ] ; then opt_O="1" elif [ "$opt" = "n" ] ; then opt_n="1" elif [ "$opt" = "t" ] ; then opt_t="1" elif [ "$opt" = "N" ] ; then opt_N="1" elif [ "$opt" = "S" ] ; then opt_S="1" fi
#!/usr/bin/env ruby # generate new manpage with: # rd2 -r rd/rd2man-lib.rb mkgetopts > ~/.local/share/man/man1/mkgetopts.1 =begin = NAME mkgetopts - make getopts parser for shell scripts = SYNOPSIS mkgetopts [-s] option_string variable_name [merge_option_string]... = DESCRIPTION = OPTIONS = FILES = SEE ALSO gengetopt(1) =end require 'strscan' require 'optparse' show_optstring=false ARGV.options do |q| q.banner = "Usage: #{$0} [options] rd-file > output\n" q.on_head("global options:") q.on("-s", "--show-optstring", "also show optstring") do |i| show_optstring=true end end ARGV.parse! u=ARGV[0] o=ARGV[1] merge=0 if (ARGV.length > 2) then merge=1 m="" ARGV[2..-1].each do |a| m="#{m}#{a}" end u="#{u}#{m}" end class OptStrScanner def initialize(sc) @sc=sc end def each_elt while (not @sc.eos?) found=@sc.scan(/.:/) if (found != nil) then yield found next end found=@sc.scan(/./) if (found != nil) then yield found end end end end state=0 sc=StringScanner.new(u) oss=OptStrScanner.new(sc) if (merge==1) then elts=Hash.new oss.each_elt do |c| elts[c]=1 end mu="" elts.each do |e| mu="#{mu}#{e[0]}" end sc=StringScanner.new(mu) oss=OptStrScanner.new(sc) end if (show_optstring) then if (merge==1) then puts "# #{mu}" else puts "# #{u}" end end oss.each_elt do |c| ifelif = (state == 1) ? 'elif' : 'if' if (c.length == 2) then puts " #{ifelif} [ \"$#{o}\" = \"#{c[0]}\" ] ; then" puts " opt_#{c[0]}=\"1\"" puts " #{c[0]}_arg=\"$OPTARG\"" elsif (c == "-") puts " #{ifelif} [ \"x$#{o}\" = \"x#{c}\" ] ; then" puts " break" else puts " #{ifelif} [ \"$#{o}\" = \"#{c}\" ] ; then" puts " opt_#{c}=\"1\"" end state = 1 end puts " fi"