正弦曲線を描画した後,SINE プログラムは drawshapes を呼び出して,画面上に 2 つの矩形と 2 つの楕円を描画します。塗り潰しフラグには $GBORDER と $GFILLINTERIOR を交互に使用します。
! DRAWSHAPES:2 つの矩形と 2 つの楕円を描画します。 ! SUBROUTINE drawshapes( ) USE DFLIB EXTERNAL newx, newy INTEGER(2) dummy, newx, newy ! ! マスク (塗り潰し) パターンを作成します。 INTEGER(1) diagmask(8), horzmask(8) DATA diagmask / #93, #C9, #64, #B2, #59, #2C, #96, #4B / DATA horzmask / #FF, #00, #7F, #FE, #00, #00, #00, #CC / ! ! 矩形を描画します。 CALL SETLINESTYLE( INT2(#FFFF )) CALL SETFILLMASK( diagmask ) dummy = RECTANGLE( $GBORDER,newx(INT2(50)),newy(INT2(-325)), & & newx(INT2(200)),newy(INT2(-425))) dummy = RECTANGLE( $GFILLINTERIOR,newx(INT2(550)), & & newy(INT2(-325)),newx(INT2(700)), & & newy(INT2(-425))) ! ! 楕円を描画します。 CALL SETFILLMASK( horzmask ) dummy = ELLIPSE( $GBORDER,newx(INT2(50)),newy(INT2(325)), & & newx(INT2(200)),newy(INT2(425))) dummy = ELLIPSE( $GFILLINTERIOR,newx(INT2(550)), & & znewy(INT2(325)),newx(INT2(700)),& & newy(INT2(425))) END
SETLINESTYLE の呼び出しは,線パターンを実線にリセットします。このルーチンを省略すると,前に呼び出した drawlines サブルーチンが線種をダッシュに変更しているために,最初の矩形はダッシュで境界が表示されます。
ELLIPSE は RECTANGLE に似たパラメタを使って楕円を描画します。やはり塗り潰しフラグと境界矩形の 2 隅の値が必要です。次図は,楕円が境界矩形をどのように使用するかを示しています。
境界矩形
$GFILLINTERIOR 定数は,形状を現在の塗り潰しパターンで塗り潰します。パターンを作成するには,SETFILLMASK に 8 バイトの配列アドレスを渡します。drawshapes では,diagmask 配列は次の塗り潰しパターンに初期化されています。
ビット・パターン diagmask 中の値 ビット番号 7 6 5 4 3 2 1 0 x o o x o o x x diagmask(1) = #93 x x o o x o o x diagmask(2) = #C9 o x x o o x o o diagmask(3) = #64 x o x x o o x o diagmask(4) = #B2 o x o x x o o x diagmask(5) = #59 o o x o x x o o diagmask(6) = #2C x o o x o x x o diagmask(7) = #96 o x o o x o x x diagmask(8) = #4B