同じ様な図形を沢山並べたい時, gropn のあとで sldivルーチン
を呼ぶと, 第1レベルめ(用紙全体)のフレームが分割され, 次のレベルのフレー
ムが定義されます. 分割されたフレームをあたかも1枚の紙のように扱って,
grfrm の実行により, 次のフレームに自動的に移っていきます.
次のプログラム lay1 では, do 20 のループの中で, 普通に改 ページをしながら描画するのと同じように, grfrm と usgrph を 呼んで折れ線グラフを描いています. 21行めの sldiv ルーチンでは 3×2=6分割していますから, 7番めの図は自動的に次のページに移って います. また, 第5.2節の出力結果と比較して, 文字の大きさが 分割されたフレームの大きさに応じて小さくなっていることにも注意して下さ い.
cform (文字型) フレームを順に割り付けていく方向. 'T':縦方向, 'Y':横方向. ix, iy (整数型) x 方向, y 方向の分割数.
# lay1.rb require "narray" require "numru/dcl" include NumRu include Math nmax = 401 jmax = 51 y = NArray.sfloat(nmax) #-- data ---- y0 = 0.5 for n in 0..nmax-1 y[n] = 5.0*y0 + 10.0 y0 = 3.7*y0*(1.0-y0) end rundef = DCL::glrget('RUNDEF') #-- graph ---- iws = (ARGV[0] || (puts ' WORKSTATION ID (I) ? ;'; DCL::sgpwsn; gets)).to_i DCL::gropn iws DCL::sldiv('Y', 3, 2) for i in 1..8 DCL::grfrm j = (i-1)*(jmax-1) xmin = j + 1600.0 xmax = xmin + jmax - 1 DCL::grswnd(xmin, xmax, rundef, rundef) DCL::ussttl('TIME', 'YEAR', 'TEMPERATURE', 'DEG') DCL::usgrph(rundef, y[j..j+jmax-1]) end DCL::grclsprogram lay1