# = irbrc_ggraph.rb
# irb で GPhys を使いやすくするスタートアップファイル.
# Windows用暫定版(GDir利用なし)
# ホームディレクトリや c:\NumRu\Ruby\bin などにおいて使うとよい．
# 
# == 使用法
#   $ irb -r C:\Users\ユーザー名\irbrc_ggraph_win.rb
#   $ irb -r C:\NumRu\Ruby\bin\irbrc_ggraph_win.rb
# など．
# 後者の場合，さらにバッチファイルを用意するとよい．
# 参照：http://ruby.gfd-dennou.org/products/gphys/tutorial2/getting_started.htm
# 
# == 機能
#
# ggraphをrequireする．
# DCLの設定をする．
# irb のヒストリーを一覧したり (グローバルメソッド history),
# ファイルに保存したりできるようになる (グローバルメソッド history_save).
# デフォルトの保存場所は ~/irb_ggraph_history.rb というファイル．
# (デフォルトは追記)


print "Start interactive GGraph session\n"

require "numru/ggraph"
include NumRu
include GGraph

### // DCL の flush. 以下は他の窓が上に乗ったらその部分の画面表示が消えてしまう
###    (どけても回復しない) 場合に使う．そのような症状がなければ不要. -->

t = Thread.new do
  loop do
    DCL.swflsh
    sleep 0.5
  end
end

### <-- DCL の flush ここまで //


### 描画 (GGraph, DCL) の設定 ###

DCL.swpset('iwidth',700)    # デフォルトの画像サイズ横幅（好みで編集するとよい）
DCL.swpset('iheight',700)   # デフォルトの画像サイズ高さ（好みで編集するとよい）
DCL.swpset('lwait',false) if /^irb/ =~ $0   # 改ページ時にマウスクリックを待たない
##DCL.swpset('lalt',true)   # 裏書描画．パラパラアニメ用．通常対話処理には向かない．
DCL.sgscmn(10)              # カラーマップ番号を10番に．gropn前なら再取替可

##DCL.gropn(1)         # 通常は最初の描画時に自動的に呼ばれる．
                       # 装置番号1番以外を使う場合やページ分割する際は陽に呼ぶ
##DCL.sldiv('y',2,2)   # ページ分割の例．ページ分割する場合，先に DCL.gropn(1) を陽に呼ぶ

DCL.sgpset('isub', 96)      # control character of subscription: '_' --> '`'
DCL.glpset('lmiss',true)

def gropn_dmpimg   # 描画結果を PNG ファイルにダンプするように gropn を呼ぶ(呼び直す)
  DCL.swpset('ldump',true)  # 画像ダンプ．装置番号4のときは PNG で．
  DCL.gropn(4)
end

#DCL.sgscmn で設定するカラーマップ番号のメモ
# 
# 1:  dcl_original
# 2:  black-orange-yellow-white
# 3:  black-blue-cyan-white
# 4:  blue-cyan-white-yellow-red
# 5:  gray_scale
# 6:  pastel_rainbow
# 7:  black-rainbow-black
# 8:  white_yellow_red
# 9:  white_blue_black
# 10: short_green_original
# 11: black-rainbow-white
# 12: pink-rainbow-pink

### History 機能 ###

def history(latest_n=nil)     # block accpeted
  if latest_n
    if !block_given?
      (-latest_n..-1).each{|i| puts Readline::HISTORY[i]}
    else
      (-latest_n..-1).each{|i| yield(Readline::HISTORY[i])}
    end
  else
    if !block_given?
      Readline::HISTORY.each{|s| puts s}
    else
      Readline::HISTORY.each{|s| yield(s)}
    end
  end
  Readline::HISTORY.length
end

def history_grep(regexp)
  history{|h| puts h if regexp =~ h}
end

def history_save(path=File.expand_path("~/irb_ggraph_history.rb"),renew=false)
  if renew
    mode = "w"
  else
    mode = "a"
  end
  file = File.open(path,mode)
  file.print("###########################\n## #{Time.now.to_s}\n")
  history{|s| file.puts(s)}
  file.close
  print "irb history saved in ",path,"\n"
  nil
end
