Posted at

bwBASICでBASIC言語に再会してみよう

パソコン黎明期にプログラミングを始めた人にとっては、最初に覚えたプログラミング言語がBASIC、という人が多いのではないでしょうか。とはいっても、もう30年以上も昔のこと。PRINT文やGOTO文くらいしか覚えてなくても不思議ではありません。本稿では、当時のシンプルなBASICの仕様を今に伝えるbwBASIC(Bywater BASIC)を使って、ちょっとだけBASICを思い出すお手伝いをしてみたいと思います。


bwBASICの特徴


  • ANSI minimal BASICの上位互換

  • UNIX系OSおよびWindowsに対応

  • 行番号は書いても書かなくてもよい

  • コマンドやステートメントは大文字でも小文字でもOK

  • 変数名は大文字と小文字が区別される(varとVARは別変数)

  • シェルコマンドなどOSのコマンドが実行できる!


bwBASICのインストール


Linux(Ubuntu)へのインストール

標準リポジトリにパッケージがあるので apt コマンドでインストールします。

apt install bwbasic


Windowsへのインストール

Windows版が sourceforge.net にて公開されているので、ダウンロードします。実行ファイル bwbasic.exe を適当なフォルダに配置してください。


bwBASICの起動

bwbasic コマンドを実行するとインタラクティブ環境が起動します。「bwBASIC:」はプロンプトです。Windowsの場合はコマンドプロンプトから bwbasic.exe を実行してください。

$ 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:

引数にプログラムファイルを指定すると、そのプログラムを実行した後、インタラクティブ環境になります。

$ bwbasic sample.bas

Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff

hello, bwBASIC!
17:55:52
bwBASIC:


インタラクティブ環境で使える基本コマンド

コマンドは大文字でも小文字でもかまいません。


LIST

読み込まれているプログラムリストを表示します。行番号付きプログラムの場合は、表示する行番号を指定できます。

bwBASIC: list

: print "hello, bwBASIC!"
: print time$
: end


RUN

読み込まれているプログラムを実行します。

bwBASIC: run

hello, bwBASIC!
17:57:43


NEW

カレントプログラムを消去します。


LOAD

プログラムを読み込みます。ファイル名を必ず " で囲んでください。

bwBASIC: load "sample.bas"


プログラムの入力

行番号を指定してコードを入力すると、カレントプログラムとして記録されます。同じ行番号を指定して入力すると、その行は上書きされます。

bwBASIC: 10 print date$, time$

bwBASIC: list
10: print date$, time$


BASICコマンドの実行

BASICコマンドをそのまま実行できます。ただし複数行にわたるコマンドには対応していません。

bwBASIC: print date$, time$

01-08-2019 20:45:03


シェルコマンドの実行

シェルコマンドを直接実行できます。bwBASIC 最大の特徴です。次の例では Linux の ls コマンドを実行しています。

bwBASIC: ls *.bas

99bottles.bas dartmouth2.bas sample.bas shellcmd.bas
accuracy.bas dartmouth.bas seiza.bas testcode.bas


QUIT

インタラクティブ環境を終了します。


BASICコマンド クイックリファレンス

主なコマンド(ステートメント)・関数を簡単にまとめておきます。

コマンド・関数
説明

REM
コメントを記述する
REM comment

PRINT
引数を出力する
PRINT "A="; A

INPUT
キーボードから変数に取り込む
INPUT "1-9 ?"; NUM

LET
変数の代入(省略可)
LET X = 1

FOR
FORループ
FOR I=1 TO 100 STEP 10

NEXT
FORループの終端
NEXT

DO ~ LOOP
DO ~ LOOP間の繰り返し。EXIT DOで抜ける

DO WHILE ~ LOOP
条件を満たす間の繰り返し
DO WHILE X<10 ... LOOP

WHILE ~ WEND
式が満たされている間ループ
WHILE X<10 ... WEND

IF ~ THEN ~ ELSEIF ~ ELSE ~ ENDIF
条件判定
IF X=0 THEN PRINT "zero"

DIM
配列を宣言する
DIM N(10)

GOTO
行番号またはラベルへジャンプ
GOTO LABEL

GOSUB
行番号またはラベルでサブルーチンへ
GOSUB LABEL

SUB
サブルーチンを定義
SUB TS(xarg) ... END SUB

CHAIN
指定したファイルを読み込んで実行する
CHAIN "AA.BAS"

DATA
データを","区切りで列挙
DATA "STR", 12, 34

READ
DATAのデータを読み込む
READ N$, NUM1, NUM2

RESTORE
DATA/READのカウンタを初期化する
RESTORE

END
プログラムを終了する
END

RND
疑似乱数を生成する
PRINT INT(RND*6)+1

RANDOMIZE
疑似乱数生成器を初期化する
RANDOMIZE TIMER

TIME$
現在時刻
PRINT TIME$

DATE$
現在年月日
PRINT DATE$

INT
小数点以下を切り捨て整数を返す
PRINT INT(9.9)

Linuxでは man bwbasic を実行するとマニュアルを閲覧できます。Windowsの方はこちらで見れます。また、Linuxでは /usr/share/doc/bwbasic/examples ディレクトリ内に多数のサンプルプログラムが用意されています。


おわりに

ドキュメントによると、Bywater BASIC のソースコードは、1980年代に事故で亡くなったおばあちゃん(作者)の遺品の中から孫が見つけだし復元したのだそうです。