魔術師をめざして

魔術師を目指して、相場・数学・プログラム言語を研究しています。

永遠なる F-BASIC V6.3

F-BASIC は 2006年3月31日(金)大安をもってその販売を終了した。

しかし「もってる星人」のぼくはこの F-BASIC V6.3 を持っていたのだ。ただし、現在まで使ったことは一度もなかった。つい最近のある日、ぼくはその F-BASIC V6.3 のインストールディスクをしばし眺めていた。で、一人、うん、とうなずき Windows 7 へのインストールを始めたのだ。

【 F-BASIC V6.3 - http://www.fmworld.net/product/soft/fbasic/

f:id:fxrobot:20131119004353j:plain

で、インストールが終わり、立ち上げてサンプルプログラムなどを動かしコンパイルもしてみた。動くじゃないか。次に、富士通のサイトにあるアップデートモジュールをインストール。更に U003+(http://bluemarble.jp/fbasic/)なる非公式アップデートもインストール(感謝。でもこれ、だいじょうぶかなぁ)。

 それで、見た目はこんな感じ。

f:id:fxrobot:20131119005626j:plain

パッケージに付いていたマニュアルも「F-BASIC V6.3 プログラミングのすべて」なる書籍も持っていたのだが、なんたることか棄ててしまったのだ。

普通ならそこで縁が切れるところだが、インストールディスクだけは棄てずに持っていた。しかし実用的な視点でいえば、FreeBasic も PureBasic もあるぼくには F-BASIC は必要なさそうだ。

だだね、開発元にも見放されてしまったこの BASIC を大切にしたいという気持ちがぼくに湧いてきたのだ。99BASIC に接し、VisualBasic 6.0 に思いを向けたときにその芽が出たのだろうか。

この際だから懐古趣味に花を咲かせようじゃないか..って。
で、画像の参考書を注文した。バカな行いなのは承知のうえだ。

f:id:fxrobot:20131119011148j:plain

一番肝腎な右端の本は一応アマゾンに注文はしたけれど多分ないだろうね。
この不合理な行いはぼくの特徴であり仕方がないことなのだ。:P

f:id:fxrobot:20131119012643j:plain

さてさて、F-BASIC V6.3 の特徴はなんといっても、ランタイム不要な実行ファイルを生成できる Basic コンパイラであるということだろう。

サンプルの電卓プログラムをコンパイルしてみたら、その実行ファイルのサイズは 72.7kb だった。このサイズなら、同等のプログラムで FreeBasic よりも小さいかもしれない。

ただしこれは Window9 を使った場合で、別のライブラリ(Win32APIなら最強)を使えば F-BASIC V6.3 と FreeBasic は同等なのかもしれない。

しかし、PureBasic には敵わないだろう。PureBasic なら多分 20~30kb くらいなはずだ。それでも F-BASIC V6.3 のコンパイル結果は十分に小さい。

この辺りを見ても、国産 Basic コンパイラとして見捨てるには惜しいと感じる。言い忘れていたが、画像がその電卓プログラムの実行結果。参考までにこのソースコードを記事の最後に添付しようと思う。

 ところで、開発元である富士通は F-BASIC の多くのバージョンを販売したようだ。
下の画像のパッケージがその代表的なものだと思うが、ViasualBasic に市場を席巻され販売停止に追いやられた最後のパッケージが右のものだ。(どちらも値段は 35,000円だった)

 f:id:fxrobot:20131119015036j:plain

今現在でも F-BASIC V6.3 を愛好し、開発の再開を願う人たちが存在する。ぼくもこの記事をもって、それらの人たちの一人になるかもしれない。

 富士通には、マイクロソフトVisualBasic 6.0 のサポートを続けているように、開発の再開はないとしても最低でもサポートは続けてもらいたい。

そうすれば、富士通を信じて F-BASIC を購入し、F-BASIC を学習し、使い続けている人たちの富士通愛を維持できるだろう。

F-BASIC V6.3 が永遠に使い続けることができることを僭越ながら祈念したい。
それを想い「永遠なる F-BASIC V6.3」とした。

 

【 F-BASIC V6.3 に添付のサンプルプログラム 】

'************************************************************************
'*      電卓のサンプルプログラム                                        *
'*              COPYRIGHT FUJITSU LIMITED 1997-1999                     *
'************************************************************************
' ボタンのイベントを共通のイベントプロシージャで処理します。
' 共通のイベントプロシージャでは、GETFOCUS関数によってボタンを識別します。
'
#include "windows.bi"
var shared TEXT1 as object
var shared FF
var shared NUM1
var shared NUM2
FF = 0
TEXT1.ATTACH GETDLGITEM("TEXT1")
TEXT1.SETWINDOWTEXT "0"
'================================================
'=      イベントループ                          =
'================================================
while 1
  WAITEVENT
wend
'================================================
'=      演算のボタン                            =
'================================================
declare sub BUTTONOPL_ON edecl ()
sub BUTTONOPL_ON()
        var BUTTON as object
        static  OPL$
        BUTTON.ATTACH GETFOCUS
        FF=1
        select case BUTTON.GETWINDOWTEXT
         case "C"
                TEXT1.SETWINDOWTEXT "0"
         case "AC"
                TEXT1.SETWINDOWTEXT "0"
                FF = 0
         case "+","-","*","/"
                OPL$=BUTTON.GETWINDOWTEXT
         case "="
                NUM2=val(TEXT1.GETWINDOWTEXT)
                select case OPL$
                 case "+"
                        NUM1=NUM1+NUM2
                 case "-"
                        NUM1=NUM1-NUM2
                 case "*"
                        NUM1=NUM1*NUM2
                 case "/"
                        NUM1=NUM1/NUM2
                end select
                TEXT1.SETWINDOWTEXT mid$(str$(NUM1),2)
        end select
end sub
'================================================
'=      数字のボタン                            =
'================================================
declare sub BUTTONNUM_ON edecl ()
sub BUTTONNUM_ON ()
        var BUTTON as object
        BUTTON.ATTACH GETFOCUS
        BNUM$ = BUTTON.GETWINDOWTEXT
        NUM$ = TEXT1.GETWINDOWTEXT
        if NUM$="0" then
                TEXT1.SETWINDOWTEXT BNUM$
                FF=0
        else if FF=1 then
                NUM1 = val(NUM$)
                FF=0
                TEXT1.SETWINDOWTEXT BNUM$
        else
                TEXT1.SETWINDOWTEXT NUM$+BNUM$
        end if
end sub
'
declare sub COPY_ON edecl ()
sub COPY_ON()
  SETCBTEXT TEXT1.GETWINDOWTEXT
end sub
'
declare sub EXIT_ON edecl ()
sub EXIT_ON()
  end
end sub
 【 終わり 】