diff options
Diffstat (limited to 'sample/biorhythm.rb')
| -rw-r--r-- | sample/biorhythm.rb | 161 |
1 files changed, 73 insertions, 88 deletions
diff --git a/sample/biorhythm.rb b/sample/biorhythm.rb index 50ad1f2ef7..f5d189014b 100644 --- a/sample/biorhythm.rb +++ b/sample/biorhythm.rb @@ -1,127 +1,112 @@ #!/usr/local/bin/ruby # -# biorhythm.rb - +# biorhythm.rb - # $Release Version: $ # $Revision$ -# $Date$ # by Yasuo OHBA(STAFS Development Room) # # -- # -# +# # -include Math -require "date.rb" -require "parsearg.rb" +# probably based on: +# +# Newsgroups: comp.sources.misc,de.comp.sources.os9 +# From: fkk@stasys.sta.sub.org (Frank Kaefer) +# Subject: v41i126: br - Biorhythm v3.0, Part01/01 +# Message-ID: <1994Feb1.070616.15982@sparky.sterling.com> +# Sender: kent@sparky.sterling.com (Kent Landfield) +# Organization: Sterling Software +# Date: Tue, 1 Feb 1994 07:06:16 GMT +# +# Posting-number: Volume 41, Issue 126 +# Archive-name: br/part01 +# Environment: basic, dos, os9 -def usage() - print "Usage:\n" - print "biorhythm.rb [options]\n" - print " options...\n" - print " -D YYYYMMDD(birthday) : すべて default 値を使う. \n" - print " --sdate | --date YYYYMMDD : system date もしくは指定した日付を使う.\n" - print " --birthday YYYYMMDD : 誕生日の指定をする. \n" - print " -v | -g : Values or Graph の指定. \n" - print " --days DAYS : 期間の指定をする(Graph の時のみ有効). \n" - print " --help : help\n" -end -$USAGE = 'usage' +include Math +require "date" +require "optparse" +require "optparse/date" -def printHeader(y, m, d, p, w) +def print_header(y, m, d, p, w) print "\n>>> Biorhythm <<<\n" printf "The birthday %04d.%02d.%02d is a %s\n", y, m, d, w printf "Age in days: [%d]\n\n", p end -def getPosition(z) - pi = 3.14159265 - phys = (50.0 * (1.0 + sin((z / 23.0 - (z / 23)) * 360.0 * pi / 180.0))).to_i - emot = (50.0 * (1.0 + sin((z / 28.0 - (z / 28)) * 360.0 * pi / 180.0))).to_i - geist =(50.0 * (1.0 + sin((z / 33.0 - (z / 33)) * 360.0 * pi / 180.0))).to_i +def get_position(z) + z = Integer(z) + phys = (50.0 * (1.0 + sin((z / 23.0 - (z / 23)) * 360.0 * PI / 180.0))).to_i + emot = (50.0 * (1.0 + sin((z / 28.0 - (z / 28)) * 360.0 * PI / 180.0))).to_i + geist =(50.0 * (1.0 + sin((z / 33.0 - (z / 33)) * 360.0 * PI / 180.0))).to_i return phys, emot, geist end +def prompt(msg) + $stderr.print msg + return gets.chomp +end + # # main program # -parseArgs(0, nil, "vg", "D:", "sdate", "date:", "birthday:", "days:") - -if $OPT_D - dd = Date.new(Time.now.strftime("%Y%m%d")) - bd = Date.new($OPT_D) - ausgabeart = "g" -else - if $OPT_birthday - bd = Date.new($OPT_birthday) - else - printf(STDERR, "Birthday (YYYYMMDD) : ") - if (si = STDIN.gets.chop) != "" - bd = Date.new(si) - end - end - if !bd - printf STDERR, "BAD Input Birthday!!\n" - exit() - end - - if $OPT_sdate - dd = Date.new(Time.now.strftime("%Y%m%d")) - elsif $OPT_date - dd = Date.new($OPT_date) - else - printf(STDERR, "Date [<RETURN> for Systemdate] (YYYYMMDD) : ") - if (si = STDIN.gets.chop) != "" - dd = Date.new(si) - end - end - if !dd - dd = Date.new(Time.now.strftime("%Y%m%d")) - end - - if $OPT_v - ausgabeart = "v" - elsif $OPT_g - ausgabeart = "g" - else - printf(STDERR, "Values for today or Graph (v/g) [default g] : ") - ausgabeart = STDIN.gets.chop +options = { + :graph => true, + :date => Date.today, + :days => 9, +} +ARGV.options do |opts| + opts.on("-b", "--birthday=DATE", Date, "specify your birthday"){|v| + options[:birthday] = v + } + opts.on("--date=DATE", Date, "specify date to show"){|v| + options[:date] = v + } + opts.on("-g", "--show-graph", TrueClass, "show graph (default)"){|v| + options[:graph] = v + } + opts.on("-v", "--show-values", TrueClass, "show values"){|v| + options[:graph] = !v + } + opts.on("--days=DAYS", Integer, "graph range (only in effect for graph)"){|v| + options[:days] = v - 1 + } + opts.on_tail("-h", "--help", "show this message"){puts opts; exit} + begin + opts.parse! + rescue => ex + puts "Error: #{ex.message}" + puts opts + exit end end -if (ausgabeart == "v") - printHeader(bd.year, bd.month, bd.day, dd.period - bd.period, bd.name_of_week) + +bd = options[:birthday] || Date.parse(prompt("Your birthday (YYYYMMDD): ")) +dd = options[:date] || Date.today +ausgabeart = options[:graph] ? "g" : "v" +display_period = options[:days] + +if ausgabeart == "v" + print_header(bd.year, bd.month, bd.day, dd - bd, bd.strftime("%a")) print "\n" - - phys, emot, geist = getPosition(dd.period - bd.period) + + phys, emot, geist = get_position(dd - bd) printf "Biorhythm: %04d.%02d.%02d\n", dd.year, dd.month, dd.day printf "Physical: %d%%\n", phys printf "Emotional: %d%%\n", emot printf "Mental: %d%%\n", geist print "\n" else - if $OPT_days - display_period = $OPT_days.to_i - elsif $OPT_D - display_period = 9 - else - printf(STDERR, "Graph for how many days [default 10] : ") - display_period = STDIN.gets.chop - if (display_period == "") - display_period = 9 - else - display_period = display_period.to_i - 1 - end - end - - printHeader(bd.year, bd.month, bd.day, dd.period - bd.period, bd.name_of_week) + print_header(bd.year, bd.month, bd.day, dd - bd, bd.strftime("%a")) print " P=physical, E=emotional, M=mental\n" print " -------------------------+-------------------------\n" print " Bad Condition | Good Condition\n" print " -------------------------+-------------------------\n" - - for z in (dd.period - bd.period)..(dd.period - bd.period + display_period) - phys, emot, geist = getPosition(z) - + + (dd - bd).step(dd - bd + display_period) do |z| + phys, emot, geist = get_position(z) + printf "%04d.%02d.%02d : ", dd.year, dd.month, dd.day p = (phys / 2.0 + 0.5).to_i e = (emot / 2.0 + 0.5).to_i |
