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

[dennou-ruby:000145] Re: reading binary files



沼口です.

 > ちなみに, 今のパッケージでは電脳ライブラリのどこの辺りまで使えるんでしょ
 > うか?  grph1 だけ?

今のパッケージでは grph1 だけです.
dcl のソースにも mksrc.rb をかければ,
grph2 なども使えると思います.

% mksrc.rb $DCLDIR/src/grph2/*/*.f > grph2.c

など..

ただし,まだ ***get がうまくいっていないようです.

***get は
   lclip=nil   # 宣言代わりの初期化が必要
   Dcl.sglget('lclip', lclip)     
とするより,
   lclip = Dcl.sglget('lclip')
としたほうがいいでしょうね.

同様に,たとえば sgqwnd は,
  uxmin, uxmax, uymin, uymax = Dcl.sgqwnd()
でしょうか.


ところで,添付の例では簡単すぎて,FloatArray のインタフェースが
わからないと思います.sgpk03 の例をつけます.

      x = FloatArray.new(N) 
にご注目ください.これで,
      Dcl.sgplu(N, x, y)                  
などと使えますし,ruby から通常の Array のようにアクセスできます.

------------------------------------------------
#!/usr/local/bin/ruby 

require "mcarray"
require "mcdcl"

#     program sgpk03

      N=41
      x = FloatArray.new(N)
      y = FloatArray.new(N)

      dt = 4.0* 3.14159 / (N-1)
      for i in 0...N
        y[i] = Math.sin(dt*i)*0.15
        x[i] = 1.0*i/(N-1)
      end

      Dcl.sgopn(1)

#----------------------------- page 1 ---------------------------------
      Dcl.sgfrm

      Dcl.sgswnd( 0.0,  1.0, -0.8, 0.2)
      Dcl.sgsvpt( 0.15, 0.85, 0.1, 0.9)
      Dcl.sgstrn(1)
      Dcl.sgstrf
      Dcl.slpvpr(1)
      Dcl.sgplu(N, x, y)                   # <-- 1本目

      Dcl.sgswnd( 0.0,  1.0, -0.7, 0.3)
      Dcl.sgstrf
      Dcl.sgspli(2)                        # <-- line index 設定
      Dcl.sgplu(N, x, y)                   # <-- 2本目

      Dcl.sgswnd( 0.0,  1.0, -0.6, 0.4)
      Dcl.sgstrf
      Dcl.sgspli(3)                        # <-- line index 設定
      Dcl.sgplu(N, x, y)                   # <-- 3本目

      Dcl.sgswnd( 0.0,  1.0, -0.4, 0.6)
      Dcl.sgstrf
      Dcl.sgsplt(2)                        # <-- line type 設定 (破線)
      Dcl.sgplu(N, x, y)                   # <-- 4本目

      Dcl.sgswnd( 0.0,  1.0, -0.3, 0.7)
      Dcl.sgstrf
      Dcl.sgsplt(3)                        # <-- line type 設定 (点線)
      Dcl.sgplu(N, x, y)                   # <-- 5本目

      Dcl.sgswnd( 0.0,  1.0, -0.2, 0.8)
      Dcl.sgstrf
      Dcl.sgsplt(4)                        # <-- line type 設定 (一点鎖線)
      Dcl.sgplu(N, x, y)                   # <-- 6本目

#----------------------------- page 2 ---------------------------------

      Dcl.sgfrm

      Dcl.sgswnd( 0.0,  1.0, -0.8, 0.2)
      Dcl.sgsvpt( 0.15, 0.85, 0.1, 0.9)
      Dcl.sgstrn(1)
      Dcl.sgstrf
      Dcl.slpvpr(1)

      Dcl.sgrset('bitlen', 0.006)          # <-- サイクル長の変更
      Dcl.sgsplt(4)
      Dcl.sgplu(N, x, y)                   # <-- 1本目

      Dcl.sgswnd( 0.0,  1.0, -0.6, 0.4)
      Dcl.sgstrf
      Dcl.sgspli(2)

      itype, = ['1111111100100100'].pack("B*").unpack("s")
      Dcl.sgsplt(itype)                    # <-- パターン設定
      Dcl.sgplu(N, x, y)                   # <-- 2本目

      Dcl.sgswnd( 0.0,  1.0, -0.4, 0.6)
      Dcl.sgstrf
      Dcl.sgiset('nbits', 32)
      itype, = ['10010010011111000111110001111100'].pack("B*").unpack("i")
      Dcl.sgsplt(itype)
      Dcl.sgplu(N, x, y)

      Dcl.sgswnd( 0.0,  1.0, -0.2, 0.8)
      Dcl.sgstrf
      Dcl.sgspli(1)
      Dcl.sgsplt(1)

      n1=N/4-1
      y[n1-1] = 999.0                        # <-- 欠損値
      y[n1  ] = 999.0
      y[n1+1] = 999.0

      n2=(n1+1)*3-1
      y[n2-1] = 999.0
      y[n2+1] = 999.0

###   Dcl.gllset('lmiss',true)             # not implimented yet, sorry!!
      Dcl.sgplu(N, x, y)                   # <-- 4本目

      Dcl.sgcls