SETWINDOWCONFIG でグラフィックス・モードを設定せずにグラフィックス・ルーチンを呼び出すと,QuickWin は自動的に基本値を使ってグラフィックス・モードを設定します。
SINE プログラムは,サブルーチン graphicsmode 中でグラフィックス・モードを選択し,設定します。このサブルーチンは,現在のビデオ・ドライバで使用できる最も高い解像度を選択します。
SUBROUTINE graphicsmode( ) USE DFLIB LOGICAL modestatus INTEGER(2) maxx, maxy TYPE (windowconfig) myscreen COMMON maxx, maxy ! 最高の解像度のグラフィックス・モードに設定します。 myscreen.numxpixels=-1 myscreen.numypixels=-1 myscreen.numtextcols=-1 myscreen.numtextrows=-1 myscreen.numcolors=-1 myscreen.fontsize=-1 myscreen.title = " "C ! 空白 modestatus=SETWINDOWCONFIG(myscreen) ! 最大の大きさを決定します。 modestatus=GETWINDOWCONFIG(myscreen) maxx=myscreen.numxpixels - 1 maxy=myscreen.numypixels - 1 END
ピクセル座標はゼロから始まるので,たとえば水平ピクセルが 640 個の解像度を持つ画面では,X 座標の最大値が 639 となります。このため,maxx (X ピクセルの最大座標) は合計のピクセル数から 1 を引いた値になります。同じことが maxy にも当てはまります。
graphicsmode が設定するビデオ・モードに依存しないように,2 つの短い関数が,1000x1000 ピクセルという適当に選ばれた画面の大きさを,その時点で有効になっている任意のビデオ・モードに変換します。これ以降,プログラムは各方向が 1000 ピクセルであると仮定します。画面上に点を描画するために,newx と newy は個々の点を物理 (ピクセル) 座標にマップします。
! ! NEWX:この関数は,新しい X 座標を探します。 ! INTEGER(2) FUNCTION newx( xcoord ) INTEGER(2) xcoord, maxx, maxy REAL(4) tempx COMMON maxx, maxy tempx = maxx / 1000.0 tempx = xcoord * tempx + 0.5 newx = tempx END ! ! NEWY:この関数は,新しい Y 座標を探します。 ! INTEGER(2) FUNCTION newy( ycoord ) INTEGER(2) ycoord, maxx, maxy REAL(4) tempy COMMON maxx, maxy tempy = maxy / 1000.0 tempy = ycoord * tempy + 0.5 newy = tempy END
「座標系について」で説明しているウィンドウ座標を使えば,プログラマはこれに似た独立座標系を設定することができます。