[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