いまさらBASICのプログラムを書こうと思ったわけではなくて、昔書いたN88-BASICのプログラムを読む前に動かしてみれば読む必要があるかどうかの判断が早いかとちょっと調べてみました。
BASICはシステムごとの仕様の差が大きいのです。でも今回動かしてみようというプログラムはグラフィック部分が必要ないので、そう面倒ではないだろうと予想しました。
LINUX上なのは、2009年からメインのデスクトップ環境がLINUX(Debian)だからです。
DebianのパッケージにあったBASICの説明文とgoogleの検索から探し出したマニュアルへのリンクです。
十進BASICはパッケージにはありませんが、以前お世話になったのでこれも調べました。
目的から、gambas3は重すぎるので避けました。
bwbasic->yabasic->十進BASICと試して、もう一度戻って、bwbasicがよいということになりました。残る3つは試していません。
単に起動すると、昔ながらのプログラミング環境になります。
debian:~$ は端末のプロンプト、bwBASIC:はBASICのプロンプト。
debian:~$ bwbasic Bywater BASIC Interpreter/Shell, version 2.20 patch level 2 Copyright (c) 1993, Ted A. Campbell Copyright (c) 1995-1997, Jon B. Volkoff bwBASIC:
直接実行もできるし、行番号をつけるとプログラムとして保存され、runで起動するしlistでリストが取れます。
bwBASIC: print "hello" hello bwBASIC: 100 print "hoge" bwBASIC: run hoge bwBASIC: list 100: print "hoge"
PC-8001(NEC)で始まるマイクロコンピュータは起動するとROMに格納されているBASICインタプリタが起動してこの状態になりました。とても懐かしい。この状態というのはBASICコマンドを実行するシェルとプログラムのエディタを兼ねた状態です。このエディタは一種のラインエディタで、行頭にある数値を元に行を訂正したり挿入したりします。
プログラムを2行にします。
bwBASIC: 110 print 2+3 bwBASIC: run hoge 5 bwBASIC: list 100: print "hoge" 110: print 2+3
保存します。
bwBASIC: save "bw1"
一旦プログラムを削除して、再度保存したものをloadします。
bwBASIC: delete 100-110 bwBASIC: list bwBASIC: load "bw1" bwBASIC: list 100: print "hoge" 110: print 2+3 bwBASIC:
行番号を使っての編集は流石に今は耐えられないので、別のエディタで編集して、実行してみます。
bwBASIC: load "bw2.bas" bwBASIC: list 100: print "Edited by another editor" 120: print "110はなくなりましたか? (この上に 5 はありますか?)" 130: for i=1 to 5 140: print i; 150: next i : bwBASIC: run Edited by another editor 110はなくなりましたか? (この上に 5 はありますか?) 1 2 3 4 5bwBASIC:
おっと、間違えてloadしてしまいましたが、これでloadするときにはメモリ上のプログラムはクリアされることが確認されました。print後改行なしの手法や数値の前に1桁空く(多分+印の省略のため)ことはN88-BAISCと一緒です。
端末から直接実行してみます。プログラムファイル名を引数にしてコマンドで実行します。
debian:~$ bwbasic bw2.bas Bywater BASIC Interpreter/Shell, version 2.20 patch level 2 Copyright (c) 1993, Ted A. Campbell Copyright (c) 1995-1997, Jon B. Volkoff Edited by another editor 110はなくなりましたか? (この上に 5 はありますか?) 1 2 3 4 5bwBASIC:
実行後はプログラムがloadされた状態でインタプリタ内に残ります。プログラムにsystemを書いておけばインタプリタも終了します。
行番号のない行を混ぜても問題ありません。行番号があれば、行番号の順序に整頓して読み込まれます。
N88-BASIC時代の簡単なプログラムを最小の変更で動かしてみることが目標なので、とりあえず直さねばならなかったところを列挙してみます。
一応、動きました。2の累乗の計算です。その最後の部分。
158456325028528675187087900672: 97 316912650057057350374175801344: 98 633825300114114700748351602688: 99 1267650600228229401496703205376:100
bwBASICの扱いが当初わからなくて、yabasicも試してみました。
adachi@debian64:~$ yabasic This is yabasic version 2.78.0, built on x86_64-pc-linux-gnu at Mon Jan 23 14:17:02 UTC 2017 Copyright 1995-2016 by Marc Ihm, according to the MIT License Enter your program and type RETURN twice when done. Your program will execute immediately and cannot be saved; create your program with an external editor, if you want to keep it. Type 'man yabasic' or see the file yabasic.htm for more information, or go to www.yabasic.de for online resources.
プロンプトのないインタープリタになります。上記にあるように、print "hoge" のあと[enter]2回でhogeと出ますが、行番号でプログラムを保存するようにはなっていない様子。そこで、素直に外部エディタで
100 print "Edited by another editor" 110 gosub LABEL1 130 for i=1 to 5 print i; 150 next i 152 print 180 end 200 // ---------- 210 label LABEL1 260 print int(10/3) 290 return
実行結果です。
debian:~$ yabasic ya2.bas Edited by another editor 3 1 2 3 4 5 debian:~$
この例とこの後の試行錯誤でわかったこと。違いはかなり大きい。
昔から授業で使わせていただいていたBASICなので調べてみました。LINUX版のバージョンが最近上がっています。
その昔、十進で計算していることが売りだったのですが、full BASICの規格ができて、これがそもそも十進らしい。その点先見の明があったというべきか、特徴が一つ減ったというべきかちょっとむずかしいところ。
プログラムの自動訂正があったり、ステップ実行ができたり、途中で変数の値を見ながら動作を確認できたりと、教育用によく考えられた仕様です。
ただ、起動してすぐに本質でないところで問題がありました。半角のフォントが全角の幅で表示されます。debianのバージョンがlennyのときには問題なかったので、BASIC側だけの問題ではないとは思いますが、単語が認識しずらくなっています。
試してみたのは上記3つですが、その中でN88-BASICを一番手を加えずに動かせるのは Bywater BASIC であるという結論です。
今、「BASICを使ってプログラムを組むなら」の話ではありません。昔のN88-BASICを一番手を加えずに動かせるのはどれかという話です。
というわけで、とりあえずですが、次の点を修正して端末から bwbasic ファイル名 で動かします。