BASIC

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年代に事故で亡くなったおばあちゃん(作者)の遺品の中から孫が見つけだし復元したのだそうです。