Mac OSX Build and Run!

OSX上でのプログラミングの初歩について、情報共有ができればと思います。

FutureBASICで やさしいプログラミング#4

/*
Q11. ウインドウ内への線の引き方、乱数(RND)使い方、及び使用ウインドウのサイズの取得方法は?

A11. FBの関数とToolBoxの関数が混在していますが、以下が線引きのサンプルです。
(ちなみにToolboxだけのコードに変換してみたらどうなるでしょう?できますか?)
*/

//Graphics full color 1000 lines

dim as RGBColor pixelRGB
dim extremeRight,extremeBottom,i
dim as rect myRect

end globals

pixelRGB.red = 0
pixelRGB.green = 0
pixelRGB.blue = 0

myRect.top = 0
myRect.left = 0
myRect.bottom = system (_scrnHeight) -44//OSX 10.3
myRect.right = system (_scrnWidth)

window 1,"Full color 1000 lines",@myRect,_dialogMovable

RGBForeColor( pixelRGB )//fbでは変数に&は不要です。(toolbox)
PaintRect( myRect )//Quick Drawのtoolboxで描画。

/*
set graphics window to system largest size
*/
extremeBottom = myRect.bottom
extremeRight = myRect.right

plot extremeRight,extremeBottom

/*
pick a random starting point & full colors
*/
plot rnd(extremeRight),rnd(extremeBottom)

call PenSize(1,1)

for i = 1 to 1000
pixelRGB.red = rnd(65535)
pixelRGB.green = rnd(65535)
pixelRGB.blue = rnd(65535)
RGBForeColor( pixelRGB )
call LineTo(rnd(extremeRight),rnd(extremeBottom) )
next

do
handleevents
until 0


スポンサーサイト

FutureBASICで やさしいプログラミング#3

/*
Q10. Quick Draw関数(toolbox)を利用するには?

A10. Quick Drawの描画関数の使用例は以下の通りです。
*/

//FutureBASIC4.2用ソース
resources "plst jp.rsrc"

dim as RGBColor pixelRGB

dim as rect myRect
dim as rect myRect2
dim as rect myRect3
dim as rect myRect4
dim as rect myRect5
dim as rect myRect6
dim as rect myRect7

dim i
end globals

myRect.top = 0
myRect.left = 0
myRect.bottom = 500
myRect.right = 500

window 1,"XY軸のプロット",@myRect,_dialogMovable
//window 1,"XY軸のプロット",(myRect.top,myRect.left )-(myRect.right,myRect.bottom),_dialogMovable


pixelRGB.red = 0
pixelRGB.green = 0
pixelRGB.blue = 0

RGBForeColor( pixelRGB )//fbでは変数に&は不要です。(toolbox)
PaintRect( myRect )//Quick Drawのtoolboxで描画。

pixelRGB.blue = 50000

myRect2.top = 16
myRect2.left = 16
myRect2.bottom = 100
myRect2.right = 100


RGBForeColor( pixelRGB )//fbでは変数に&は不要です。(toolbox)
PaintRect( myRect2 )//Quick Drawのtoolboxで描画。


pixelRGB.red = 50000
pixelRGB.blue = 0

myRect3.top = 16
myRect3.left = 116
myRect3.bottom = 100
myRect3.right = 200

RGBForeColor( pixelRGB )
FrameRect( myRect3)

pixelRGB.red = 50000
pixelRGB.blue = 0

myRect4.top = 16
myRect4.left = 216
myRect4.bottom = 100
myRect4.right = 300

RGBForeColor( pixelRGB )
PaintRect( myRect4)
InvertRect( myRect4)


pixelRGB.red = 0
pixelRGB.blue = 56000

myRect5.top = 116
myRect5.left = 16
myRect5.bottom = 200
myRect5.right = 100

RGBForeColor( pixelRGB )
PaintOval( myRect5)


pixelRGB.red = 0
pixelRGB.blue = 56000

myRect6.top = 116
myRect6.left = 116
myRect6.bottom = 200
myRect6.right = 200

RGBForeColor( pixelRGB )
FrameOval( myRect6)


pixelRGB.red = 56000
pixelRGB.blue = 56000

myRect7.top = 116
myRect7.left = 216
myRect7.bottom = 200
myRect7.right = 300

RGBForeColor( pixelRGB )
PaintOval( myRect7)
InvertOval( myRect7)


do
handleevents
until 0

FutureBASICで やさしいプログラミング#2

/*
Q9. BASIC専用の描画コマンドだけじゃなく、Mac専用の関数(toolbox)が利用できるみたいだけどFBで使うメリットはあるの?BASICのコマンドにあるplotはToolboxにもありますか?

A9. BASIC専用の描画コマンドはMac専用の関数(toolbox)で作られています。FutureBASICではToolboxが簡単に利用できるので、描画に限らずFutureBASIC+Toolboxとすることでで
  Windowの扱い等の面倒な部分はFutureBASICの専用コマンドにまかせられます。関数が豊富にあるToolbox関数を利用することでMacでのプログラミングの世界が広がります。
  また、Toolboxの活用に慣れておくと、Carbon環境でのC言語移行が楽になると思います。
  Toolboxを活用する上で理解しておくこととして、例えば色の場合には3色セットとしてToobox関数にパラメータを渡す必要があります。または戻り値が複数ある場合はセットで受け取ることになります。
  以下の例だとRGBColorやrect がそれにあたり、FBでは既に内部で定義されているものもあります。もちろんCabon環境でのC言語利用なら全て定義済みです。
  plotについてですが、もちろんToolboxにもあり、以下が使用した例です。
*/

//FutureBASIC4.2用ソース
resources "plst jp.rsrc"

dim as RGBColor pixelRGB
dim as RGBColor XpixelRGB
dim as RGBColor YpixelRGB
dim as rect myRect
dim i
end globals

pixelRGB.red = 0
pixelRGB.green = 0
pixelRGB.blue = 0


XpixelRGB.green = 0
XpixelRGB.blue = 0

YpixelRGB.red = 0
YpixelRGB.green = 0


myRect.top = 0
myRect.left = 0
myRect.right = 500
myRect.bottom = 500

window 1,"XY軸のプロット",@myRect,_dialogMovable
//window 1,"XY軸のプロット",(myRect.top,myRect.left )-(myRect.right,myRect.bottom),_dialogMovable

RGBForeColor( pixelRGB )//fbでは変数に&は不要です。(toolbox)
PaintRect( myRect )//Quick Drawのtoolboxで描画。

for i = 1 to 500
XpixelRGB.red = 65535*i/500
SetCPixel(0+i,250,XpixelRGB)//plot 0+i,250 Toolboxだと色指定のパラメーターがあります。
YpixelRGB.blue = 65535*i/500
SetCPixel(250,0+i,YpixelRGB)//plot 250,0+i
next i

do
handleevents
until 0

FutureBASICで やさしいプログラミング

C言語だと何をさせるにしても色々と覚えることも多くて大変ですが、プログラミングを初めて経験する者には意外と敷居が高かったりします。そこで、FutureBASIC4を使うと短い記述で色々できたりして便利な一面があります。Real BASIC5.5を使うのも良いかも知れませんが、ここではFutureBASIC4のデモ版を使い簡単な絵を描いたりしてみようと思います。

FutureBASICデモ版は以下のリンクから入手先可能です。(30日間使用可能)
FutureBASICデモ版入手先
Full Demoを選択。
Includes latest release of the Editor, Compiler, Headers, Manuals and Examples. Download [ 12.5 Mb ]をダウンロードして下さい。
英語版しか無く、MACではBASICはマイナーな言語ですから、手放しにお勧めとは言えませんが、MACでのプログラミングの敷居を下げてくれます。

あなたがプログラミングの初心者だとして、以下の方法について考えてみて下さい。

Q1.例えば、Cのコードだけでウインドウを表示したかったらどうしますか?
絵を描かせるなら当然対象となるウインドウを作る必要があります。
XCODEに付属するインターフェースビルダーを使えば簡単とも言えますが、Cのコードでもできます。一分でできましたか?

A1.FutureBASICならどうするか?
Window 1
stop
とこの2行だけです。10秒で完了です。後はビルド&ランするだけです。

Q2.もう少しウインドウにタイトルを入れたりサイズを指定してきちんとしたいなら、

A.2
Window 1,"test",(100,100)-(500,500)
stop
とすれば済みます。

Q3.C言語の環境でウインドウのサイズを途中で変える必要があったらインターフェースビルダーではどうしますか?

A3. Fbなら一番目のウインドウを指定しなおせばOKです。
Window 1,"test",(100,100)-(500,500)
delay 500
Window 1,"test",(100,100)-(500,300)
stop

Q4.ウインドウを描くだけでは、メニューやウインドウ(ダイアログ)の処理がされません。では、何が必要になるか?

A4.人がメニューやウインドウを操作した情報を検出する必要があります。例えばプログラムを終了させるにはメニュー操作が当然必要ですよね。
MacではCやC++の言語使用する場合はCarbonと言う環境を利用する必要があります。
ちなみにFutureBASIC4もCarbonの環境を利用しています。

Xcodeなら雛形のソースコードにある
RunApplicationEventLoop();
がイベントの見張り番をやってくれます。

ではFutureBASIC4では
do
handleevents
until 0
で行われます。

従って、OSX最小のプログラムは以下の通りです。これでstopともお別れです。
Window 1,"test",(0,0)-(500,500)
do
handleevents
until 0

Q.5 ビルドはどうするか?

A.5 メニューからCommand>Carbon+Appearanceを選択した状態でrunを選択します。

Q6. さて本番ですが、出来上がったウインドウ1に絵を描くにはどうしますか?

A6. BASIC用の点を描くコマンドはplot x,yがあります。以下のサンプルはXとY軸を描く簡単なサンプルです。

dim i
end globals

window 1,"plot",(0,0)-(500,500),_dialogMovable

for i = 1 to 500 step 2
long color 0,0,60000
plot 0+i,250
long color 60000,0,0
plot 250,0+i
next

do
handleevents
until 0

Q7.このプログラムのメニューを見ると英語ですが、英語版で日本語は使えないのか?

A7.以下の様に先頭にresources "plst jp.rsrc"を追加すればメニューが日本語となりウインドウタイトルの文字も文字化けしなくなります。

//FutureBASIC4.2用ソース
resources "plst jp.rsrc"
dim i
end globals

window 1,"XY軸のプロット",(0,0)-(500,500),_dialogMovable

for i = 1 to 500 step 2
long color 0,0,60000
plot 0+i,250
long color 60000,0,0
plot 250,0+i
next

do
handleevents
until 0


Q8.FutureBASICはBASICの専用コマンドしかつかないのかな?

A8. C言語で使用されるToolBoxがFutureBASICでも使えます。以下のサンプルはPaintRectやRGBForeColorと言ったQuick Drawのtoolboxで描画したものです。

//FutureBASIC4.2用ソース
resources "plst jp.rsrc"

dim as RGBColor pixelRGB
dim as rect myRect
dim i
end globals

pixelRGB.red = 0
pixelRGB.green = 0
pixelRGB.blue = 0

myRect.top = 0
myRect.left = 0
myRect.right = 500
myRect.bottom = 500

window 1,"XY軸のプロット",(0,0)-(500,500),_dialogMovable

RGBForeColor( pixelRGB )//fbでは変数に&は不要です。(toolbox)
PaintRect( myRect )//Quick Drawのtoolboxで描画。

for i = 1 to 500 step 2
long color 0,0,60000
plot 0+i,250
long color 60000,0,0
plot 250,0+i
next

do
handleevents
until 0

尚、全てのサンプルコードの利用は自己の責任の元でのみ使用可能です。