2024/01/21(日) [n年前の日記]
#1 [basic] FreeBASICを再勉強中
スクリーンセーバの作り方についてググっていたら、FreeBASICを使ったスクリーンセーバの作成事例があるらしいと知った。「FreeBASICってそんなこともできるのか…」と気になり始めたので、少し試用してみた。
FreeBASICは、WindowsやLinuxで利用できるBASICコンパイラ。無料で使える。インタプリタではなくコンパイラなので、拡張子 .bas でソースを書いて、fbc hoge.bas で hoge.exe を生成できる。
_FreeBASIC Language | Home
今回は Windows10 x64 22H2上で使ってみた。
ちなみに、以前も少しだけ試用したことがある。
_mieki256's diary - 色々なBASICをちょっとだけ触ってみた
_mieki256's diary - FreeBASICのGUIライブラリを試用
_mieki256's diary - FreeBASICのグラフィックスライブラリを試用
FreeBASICは、WindowsやLinuxで利用できるBASICコンパイラ。無料で使える。インタプリタではなくコンパイラなので、拡張子 .bas でソースを書いて、fbc hoge.bas で hoge.exe を生成できる。
_FreeBASIC Language | Home
今回は Windows10 x64 22H2上で使ってみた。
ちなみに、以前も少しだけ試用したことがある。
_mieki256's diary - 色々なBASICをちょっとだけ触ってみた
_mieki256's diary - FreeBASICのGUIライブラリを試用
_mieki256's diary - FreeBASICのグラフィックスライブラリを試用
◎ インストール :
以下から辿って、.7z か .zip を入手する。
_FreeBASIC Compiler - Browse Files at SourceForge.net
今回は FreeBASIC-1.10.1-winlibs-gcc-9.3.0.7z を入手した。この版には、32bit版と64bit版の両方が入っている。
32bit版だけ欲しければ FreeBASIC-1.10.1-win32.zip を、64bit版だけ欲しければ FreeBASIC-1.10.1-win64.zip を入手すればいいのだろうけど、元々 FreeBASIC は32bit版しか無かったせいか、関連ライブラリが32bit版しかサポートしてないことも多いようで…。ここは両方入っている版を選んでおいたほうが良さそうな気がする。
解凍して任意の場所に置く。今回は D:\Dev\FreeBASIC\ に置いてみた。
ユーザ側の環境変数 PATH の最後に、D:\Dev\FreeBASIC を追加。fbc --version でバージョンを確認できたら利用できる状態になっている。
_FreeBASIC Compiler - Browse Files at SourceForge.net
今回は FreeBASIC-1.10.1-winlibs-gcc-9.3.0.7z を入手した。この版には、32bit版と64bit版の両方が入っている。
32bit版だけ欲しければ FreeBASIC-1.10.1-win32.zip を、64bit版だけ欲しければ FreeBASIC-1.10.1-win64.zip を入手すればいいのだろうけど、元々 FreeBASIC は32bit版しか無かったせいか、関連ライブラリが32bit版しかサポートしてないことも多いようで…。ここは両方入っている版を選んでおいたほうが良さそうな気がする。
解凍して任意の場所に置く。今回は D:\Dev\FreeBASIC\ に置いてみた。
ユーザ側の環境変数 PATH の最後に、D:\Dev\FreeBASIC を追加。fbc --version でバージョンを確認できたら利用できる状態になっている。
> fbc --version FreeBASIC Compiler - Version 1.10.1 (2023-12-24), built for win32 (32bit) Copyright (C) 2004-2023 The FreeBASIC development team. standalone
◎ FreeBASICでOpenGLを使う :
FreeBASIC は OpenGL を使って描画することもできる。FreeBASICインストールフォルダ\examples\graphics\OpenGL\ に、OpenGLを使ったサンプルがいくつか入っている。
fbgfx_opengl.bas のスクリーンショット。
fbgfx_texture.bas のスクリーンショット。
サンプルの中の gl_test.bas は、glut32.dll を要求する。MinGW用の freeglut.dll (freeglut 3.0.0 for MinGW、freeglut-MinGW-3.0.0-1.mp.zip) を入手して解凍。
_freeglut Windows Development Libraries
_The freeglut Project :: About
freeglut.dll を glut32.dll にリネームしつつ、.bas をビルドして生成した .exe と同じフォルダに置いたところ動いてくれた。
glext_test.bas は、glfw (libglfw.a) を要求する。以下のやり取りの中で入手先が提示されていた。
_Error when compiling - freebasic.net
_FreeBASIC Compiler - Browse /Older versions/0.90.1/Binaries - Windows/Libraries at SourceForge.net
FB-win32-glfw-2.7.7.zip を入手して解凍。FreeBASICインストールフォルダ/lib/win32/ に libglfw.a をコピーした。32bit (win32)用しか無いらしいので、試すときは 32bit版 FreeBASICを使う。この状態なら件の .bas をビルドして実行することができた。
また、以下のやり取りの中で、glfw 3.1.1 をビルドして配布されている方が居た。
_OpenGL Window library GLFW 3.1.1 (win/lin 32/64-bit) - freebasic.net
glfw-3.1.1.zip を入手して解凍すると、32bit版と64bit版の両方が入っていた。ファイル名は glfw ではなくて glfw3 になる。ただ、.bas 内の glfw.bi を glfw3.bi に変更しても、ビルドはできなかった。ちなみに元々、FreeBASIC 1.10.1 の inc/GLFW/ にも glfw3.bi が入っていた。
glu_quadrics.bas は、SDLを要求するが、-lSDL というエラーが出た。libSDL.a が必要なのだろうけど、入手方法が分からない。
試しにダメ元で、MSYS2のインストールフォルダ、D:/msys64/mingw32/lib/ から、以下のファイルを FreeBASICインストールフォルダ/lib/win32/ にコピーしてみたところ、件の .bas もビルドして動作させることができた。
こういうやり方で本当にいいのか分からんけど…。実際に動いてるから、まあ、いいか…。
せっかくの機会(?)なので、MSYS2 上で以下のパッケージもインストールしておいた。pacman -S xxxx でインストールできる。
fbgfx_opengl.bas のスクリーンショット。
fbgfx_texture.bas のスクリーンショット。
サンプルの中の gl_test.bas は、glut32.dll を要求する。MinGW用の freeglut.dll (freeglut 3.0.0 for MinGW、freeglut-MinGW-3.0.0-1.mp.zip) を入手して解凍。
_freeglut Windows Development Libraries
_The freeglut Project :: About
freeglut.dll を glut32.dll にリネームしつつ、.bas をビルドして生成した .exe と同じフォルダに置いたところ動いてくれた。
glext_test.bas は、glfw (libglfw.a) を要求する。以下のやり取りの中で入手先が提示されていた。
_Error when compiling - freebasic.net
_FreeBASIC Compiler - Browse /Older versions/0.90.1/Binaries - Windows/Libraries at SourceForge.net
FB-win32-glfw-2.7.7.zip を入手して解凍。FreeBASICインストールフォルダ/lib/win32/ に libglfw.a をコピーした。32bit (win32)用しか無いらしいので、試すときは 32bit版 FreeBASICを使う。この状態なら件の .bas をビルドして実行することができた。
また、以下のやり取りの中で、glfw 3.1.1 をビルドして配布されている方が居た。
_OpenGL Window library GLFW 3.1.1 (win/lin 32/64-bit) - freebasic.net
glfw-3.1.1.zip を入手して解凍すると、32bit版と64bit版の両方が入っていた。ファイル名は glfw ではなくて glfw3 になる。ただ、.bas 内の glfw.bi を glfw3.bi に変更しても、ビルドはできなかった。ちなみに元々、FreeBASIC 1.10.1 の inc/GLFW/ にも glfw3.bi が入っていた。
glu_quadrics.bas は、SDLを要求するが、-lSDL というエラーが出た。libSDL.a が必要なのだろうけど、入手方法が分からない。
試しにダメ元で、MSYS2のインストールフォルダ、D:/msys64/mingw32/lib/ から、以下のファイルを FreeBASICインストールフォルダ/lib/win32/ にコピーしてみたところ、件の .bas もビルドして動作させることができた。
libSDL.a libSDL_gfx.a libSDL_image.a libSDL_mixer.a libSDL_net.a libSDL_ttf.a
こういうやり方で本当にいいのか分からんけど…。実際に動いてるから、まあ、いいか…。
せっかくの機会(?)なので、MSYS2 上で以下のパッケージもインストールしておいた。pacman -S xxxx でインストールできる。
mingw-w64-i686-SDL mingw-w64-i686-SDL_image mingw-w64-i686-SDL_gfx mingw-w64-i686-SDL_net mingw-w64-i686-SDL_ttf mingw-w64-i686-SDL_mixer mingw-w64-x86_64-SDL mingw-w64-x86_64-SDL_gfx mingw-w64-x86_64-SDL_net mingw-w64-x86_64-SDL_ttf mingw-w64-x86_64-SDL_image mingw-w64-x86_64-SDL_mixer mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_gfx mingw-w64-i686-SDL2_net mingw-w64-i686-SDL2_ttf mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_mixer mingw-w64-i686-SDL2_sound mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_gfx mingw-w64-x86_64-SDL2_net mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_image mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_sound
◎ IDE FbEditをインストール :
FreeBASICのソースを書くためのIDEっぽいアプリもインストールしてみた。一つは FbEdit。
_FbEdit
上記のページから FbEdit 1.0.7.4 Unicode対応版、fbedit1.0.7.4Unicode.zip を入手して解凍。今回は D:\Prog\FbEdit\ にインストール。
FbEdit.exe を実行すると、FreeBASICコンパイラ(fbc.exe)がある場所その他を尋ねてくるので設定。
少し触ってみたけれど、リソースエディタというか、フォームデザイナーも入っているのだな…。リソースファイルを選択して、ダイアログのレイアウトをGUI操作で作っていける。
_FbEdit
上記のページから FbEdit 1.0.7.4 Unicode対応版、fbedit1.0.7.4Unicode.zip を入手して解凍。今回は D:\Prog\FbEdit\ にインストール。
FbEdit.exe を実行すると、FreeBASICコンパイラ(fbc.exe)がある場所その他を尋ねてくるので設定。
少し触ってみたけれど、リソースエディタというか、フォームデザイナーも入っているのだな…。リソースファイルを選択して、ダイアログのレイアウトをGUI操作で作っていける。
◎ IDE WinFBEをインストール :
WinFBE というIDEもインストールしてみた。
_WinFBE Editor and FreeBASIC Compiler (All-in-One Package) (V3.1.0 June 4, 2023) - freebasic.net
_PaulSquires/WinFBE: FreeBASIC Editor for Windows
_Releases - PaulSquires/WinFBE
WinFBE_Suite.zip (3.1.0) を入手して解凍。D:\Prog\WinFBE\ にインストールした。
これもフォームデザイナーがついている。FbEdit にしろ、WinFBE にしろ、ちょっとした GUIアプリなら作れる機能を用意しているようだなと…。
_WinFBE Editor and FreeBASIC Compiler (All-in-One Package) (V3.1.0 June 4, 2023) - freebasic.net
_PaulSquires/WinFBE: FreeBASIC Editor for Windows
_Releases - PaulSquires/WinFBE
WinFBE_Suite.zip (3.1.0) を入手して解凍。D:\Prog\WinFBE\ にインストールした。
これもフォームデザイナーがついている。FbEdit にしろ、WinFBE にしろ、ちょっとした GUIアプリなら作れる機能を用意しているようだなと…。
◎ FBImageをインストール :
FreeBASICは標準状態だと bmp画像ファイルしか開けないようだけど、jpg, png, tga などを開いたり保存したりできる FBImage というライブラリがあるらしい。せっかくだからインストールしてみた。
_FBImage static Win/Lin 32/64-bit - freebasic.net
FBImage.zip を入手して解凍。中には以下が入っている。
Windows環境の場合、以下のファイルを FreeBASICインストールフォルダ以下にコピー。
解凍したフォルダの中にはサンプルファイルが入っている。 test_*.bas がサンプルファイル。それぞれ数行で画像の読み込みや作成ができるようになっていた。一通りビルドして動かしてみたけれど、たしかに画像の読み書きができた。
_FBImage static Win/Lin 32/64-bit - freebasic.net
FBImage.zip を入手して解凍。中には以下が入っている。
FBImage.bi lib/lin/libFBImage-32-static.a lib/lin/libFBImage-64-static.a lib/win/libFBImage-32-static.a lib/win/libFBImage-64-static.a test_*.bas
Windows環境の場合、以下のファイルを FreeBASICインストールフォルダ以下にコピー。
- FBImage.bi を、FreeBASICインストールフォルダ/inc/ にコピー。
- lib/win/libFBImage-32-static.a を、FreeBASICインストールフォルダ/lib/win32/ 以下にコピー。
- lib/win/libFBImage-64-static.a を、FreeBASICインストールフォルダ/lib/win64/ 以下にコピー。
解凍したフォルダの中にはサンプルファイルが入っている。 test_*.bas がサンプルファイル。それぞれ数行で画像の読み込みや作成ができるようになっていた。一通りビルドして動かしてみたけれど、たしかに画像の読み書きができた。
[ ツッコむ ]
以上です。