グラフィックス・モードを活動状態に

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 ピクセルであると仮定します。画面上に点を描画するために,newxnewy は個々の点を物理 (ピクセル) 座標にマップします。

!
!	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

座標系について」で説明しているウィンドウ座標を使えば,プログラマはこれに似た独立座標系を設定することができます。