[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003674] gpview に DCL のコマンドラインオプション



竹広様、皆様:

gpview のオプションが飽和状態のところ失礼します。
DCL のコマンドラインオプションを解釈するようにしてみたので、
パッチをお送りします。 [gpview_dclopts.patch]
たとえばこのように使えます。

   % gpview hogehoge.nc@anything -sg:iws=2

1文字目が「-」、4文字目が「:」、その後に「=」を含む引数は
DCL 用のオプションと解され、パラメータ設定されます。
(従来の gpview オプションやその引数を誤って解釈しないよう、
 このような定義にしました。副作用ありませんように。。。)
これで、個々のパラメータごとに gpview オプションを増やさずに、
DCL の多くのパラメータを指定することができます。

ただ、DCL でコマンドラインオプションになっていないけれど
指定したいものもあるんですよね。。。
コンターのラベルの書式を指定するオプション udfmt も実装しました。
飽和状態のところ申し訳ないけれど追加パッチをお送りします。
[gpview_udfmt.patch]

   % gpview hogehoge.nc@anything --udfmt B

のように指定すれば単に DCL.udsfmt('B') されます。

要るものだけ取り込んでいただければ幸いです。

------------------------------------------------------------
京都大学 大学院理学研究科 地球惑星科学専攻 地球物理学教室
内藤 陽子 <naito@xxxxxxxxxxxxxxxxxx>

*** gpview.org	2014-02-19 17:37:27.058039734 +0900
--- gpview	2014-02-19 17:52:38.000995761 +0900
***************
*** 584,593 ****
--- 584,644 ----
    return min, max
  end
  
+ def check_dclopts
+ 
+   indices = []
+   ARGV.each_index{|i|
+     if /^-(.)(.):(.*)=(.*)/ =~ ARGV[i]
+       indices << i
+     end
+   }
+ 
+   dclopts = []
+   indices.reverse_each{|i|
+     dclopts << ARGV[i]
+     ARGV.slice!(i)
+   }
+ 
+   dclopts.each{|opt|
+     pkg = opt[1..2]
+     name = opt[4..-1].split('=')[0]
+     value = opt[4..-1].split('=')[1]
+     dcl_set_params(pkg,name,value)
+   }
+   
+ end
+ 
+ def dcl_set_params(pkg,name,value)
+ 
+   set = 'stx'
+   case name
+   when /^c/i
+     eval( "DCL.#{pkg}c#{set}(name,value.to_s)" )
+   when /^l/i
+     if /(.*)(T|t)(.*)/ =~ value
+       eval( "DCL.#{pkg}l#{set}(name,true)" )
+     else
+     if /(.*)(F|f)(.*)/ =~ value
+       eval( "DCL.#{pkg}l#{set}(name,false)" )
+     else
+       raise "value of logical parameter must include 't' or 'f'"
+     end
+     end
+   when /^[i-n]/i
+     eval( "DCL.#{pkg}i#{set}(name,value.to_i)" )
+   else
+     eval( "DCL.#{pkg}r#{set}(name,value.to_f)" )
+   end
+   
+ end
+ 
  
  #####################################################
  ###++++++           Main Routine            ++++++###
  
+ ## options for DCL
+ check_dclopts
+ 
  ## parse options
  parser = GetoptLong.new
  parser.set_options(
*** gpview	2014-02-19 17:52:38.000995761 +0900
--- gpview_udfmt	2014-02-19 17:52:40.173031023 +0900
***************
*** 692,697 ****
--- 692,698 ----
                     ['--tonf',                     GetoptLong::NO_ARGUMENT],
                     ['--nocolorbar',               GetoptLong::NO_ARGUMENT],
                     ['--nozero',                   GetoptLong::NO_ARGUMENT],
+                    ['--udfmt',                    GetoptLong::REQUIRED_ARGUMENT],
                     ['--help',                     GetoptLong::NO_ARGUMENT]
  #                   ['--version',                  GetoptLong::NO_ARGUMENT]  # to be defined
                     )
***************
*** 735,740 ****
--- 736,745 ----
  ## tune the size of axis parameters.
  DCL.uzfact(0.7)
  
+ ## set the format of contour labels.
+ udfmt = ($OPT_udfmt||DCL.udqfmt())
+ DCL.udsfmt(udfmt)
+ 
  ## draw figure
  loopdim   = ( $OPT_animate || $OPT_anim ) 
  loopdim = loopdim.to_i if loopdim.to_i.to_s == loopdim