最初のプログラムLAY1 では, SGOPN のあと, SLMGNルー チンを呼び, 第1レベルめ(用紙全体)のフレームでマージン(余白部分)をとる ように指定しています. ここで, 引数は,順に左辺, 右辺, 下辺, 上辺のマー ジンで, それぞれの全幅を1とする比率で与えます. 次に, マージンを除いた 部分を SLDIV を用いて横3, 縦2に分割し, 次のレベルのフレームを定 義します. 最初の引数では順に割り付ける方向を指定します. 'Y' なら ば横方向に, 'T' ならば縦方向に割り付けられます. さらに, 14行めで は分割された第2レベルめのフレームでさらに5%ずつのマージンをとっていま す. SLDIV は2回まで呼ぶことができて, 分割されたフレームをさらに もう一度分割することが可能です.
PROGRAM LAY1 CHARACTER*7 CTXT DATA CTXT/'FRAME??'/ WRITE(*,*) ' WORKSTATION ID (I) ? ;' CALL SGPWSN READ (*,*) IWS CALL SGOPN( IWS ) CALL SLMGN( 0.1, 0.1, 0.05, 0.05 ) CALL SLDIV( 'Y', 3, 2 ) CALL SLMGN( 0.05, 0.05, 0.05, 0.05 ) DO 10 I=1,12 CALL SGFRM CALL SLPVPR( 1 ) WRITE(CTXT(6:7),'(I2.2)') I CALL SGTXV( 0.5, 0.5, CTXT ) 10 CONTINUE CALL SGCLS ENDPROGRAM LAY1
分割された領域は縦横比が1ではありませんが, SGFRMが1:1のフレーム
を設定しています. SLRAT ルーチンを用いると, 今のレベルのフレーム
すべてについて, 縦横比を指定してフレームが最大内接するようにマージンを
とることができます.
このように分割されたフレームを GRPH1 ではあたかも1枚の紙のように扱い,
SGFRM の実行により, 次のフレームに自動的に移っていきます. プログ
ラムの DO ループの中では, 普通に改ページをしながら描画するのと同
じように, SLPVPR を呼んで各フレームのビューポートの枠を描き, そ
の真中にSGTXV で 'FRAME01', 'FRANE02', などの文字列
を書いています. 第3.1節の出力結果と比較して, 文字の大きさ
が分割されたフレームの大きさに応じて小さくなっていることに注意して下さ
い.
このように, 同じ図形を規則的に並べることは SLPACK を使うと非常に簡単にできます. しかし, 大きな図形の横に小さな図形を並べるというようなことは, SLPACK を使うより SGSVPT で陽にビューポート の設定をした方がよいでしょう.